Skip to main content
Publish a datafeed when your market comes from somewhere trdrs doesn’t connect to, such as your venue’s own index or a synthetic product. You run a small read-only HTTP server, trdrs polls it, and your symbols show up in your traders’ symbol search, charts and live streams beside everything else. Your traders never talk to your server; trdrs does. This page is for venues with their own market data. By the end you have a feed trdrs can read and know how it behaves when your server is slow or down. If your traders’ data comes from a provider login you already issue them, one whose market data is licensed to each user, use provider data instead, which needs no server at all.

Know who sees your symbols

Only your traders see them: anyone holding an account your venue issued, or a registration they linked with their own login. To everyone else on trdrs, including other venues, your symbols don’t exist. They aren’t in search, they don’t resolve, and a request naming one directly gets the same answer as a symbol nobody published. No request and no error message tells the two cases apart. Your symbols can’t collide with the shared catalog either. trdrs keeps every symbol you publish under your venue’s own id, so you can publish ES without touching the CME contract of the same name. Your traders resolve yours and everyone else resolves theirs.

Build the feed

Your feed is a UDF datafeed: three read-only JSON endpoints over HTTPS. It’s the same contract Quick Charts reads, so a server that already feeds Quick Charts works here unchanged.
1

Serve your configuration

GET /config declares what you serve. trdrs fetches it once and caches it.
trdrs holds you to supported_resolutions: a bar size you didn’t declare is refused before a request goes out, because a server asked for an unlisted size often answers with a different one. If you declare an empty list or serve no /config, trdrs assumes the protocol’s defaults and restricts nothing.
2

Serve symbol search

GET /search?query=&limit= returns the symbols that match.
type is your own word for the product, and traders see it exactly as you wrote it, so call an index an index.If you answer supports_search: false, serve GET /symbol_info?group=<exchange> instead, in the protocol’s column form: parallel arrays keyed symbol, ticker, description, exchange-listed and type, where a single value applies to every row. trdrs fetches each exchange listed in /config once and searches it itself, so in this mode /config must list at least one exchange.
3

Serve price history

GET /history?symbol=&resolution=&from=&to=&countback= returns bars in the protocol’s column form, with times in epoch seconds.
The status field has three answers, and they mean different things:to is exclusive, as the protocol defines it, so the bar at to isn’t included. trdrs maps its own windows onto yours so no bar is dropped at a page boundary. When countback is present, it wins over from: return that many bars at or before to.Resolutions use the protocol’s names: seconds as 30S, minutes as a bare number such as 5, hours as minutes (60 is one hour), then 1D, 1W and 1M. If you leave out v, every bar has a volume of 0.
You serve bars alone, with no quotes endpoint and no push channel. A chart on one of your symbols shows no bid or ask rather than a number nobody quoted, and trdrs polls, so an ordinary HTTP server is all you need.

Register it with trdrs

Registration isn’t self-serve: trdrs sets it up for you. Send your trdrs contact:
  • the base URL of your feed, such as https://feed.yourfirm.com/udf;
  • the Authorization header value your server expects, if it wants one. trdrs sends it unchanged on every request and stores it as a secret that no read of your venue returns.
Once trdrs sets both, your symbols appear for your traders within a minute. Clearing the URL removes them the same way. Serve the feed over HTTPS from an address reachable on the public internet, and keep it behind a credential. The header above is the only thing guarding your data.

Know how trdrs reads your feed

  • History comes straight from /history, for the window the chart asks for.
  • Live bars come from polling the end of /history every 10 seconds. The newest bar updates as it forms and is final once the next one opens.
  • Traders share the poll. Ten traders watching one symbol cost your server one request every 10 seconds, not ten.
  • Every request has a 10-second deadline, so a slow answer never hangs a chart.

Plan for your feed going down

A feed that goes down costs your symbols and nothing else. trdrs sees each change in both directions, and contacts you about a feed that stays down.

Know what a feed covers

A published symbol charts and streams bars, and no order path reaches it, so your traders can’t take a position in a market you publish this way. A market they trade is a provider, either built in or public. A feed serves bars, polled over HTTP and registered through trdrs.

Test it end to end

Before you send trdrs the URL, check the feed from outside your network:
  1. Request /config, /search?query=A&limit=10 and a /history window with countback, and confirm each answers within 10 seconds with the shapes above.
  2. Request a symbol that doesn’t exist and confirm /history answers s: "error" rather than a 5xx.
  3. Once trdrs has registered it, sign in as a test trader holding one of your accounts and find your symbol in search. Sign in as a trader who doesn’t hold one and confirm it’s absent.

Next steps

Provider data

Use the provider login you already issue, with no server to run.

Provider conformance

Build a provider your traders can trade through, not just chart.