Skip to main content
Four reads stand between a search box and a correctly formatted price. Do them in order and you never hardcode an exchange convention: the limits say what the feed accepts, the catalog says what exists, symbol details say how one instrument is written and when it trades, and the futures catalog says what a contract is worth. All four take a tenant key.
1

Fetch the limits once, before your first data call

Get market-data limits answers the question the other routes cannot: which timeframes are legal, and how large an ask will be honoured.
timeframes.units is the timeframe format itself — each unit with its inclusive count ceiling, so 1..maxCount of any listed unit parses. Validate a user’s token against units and you reach the same verdict the engine does, with no round trip and no 400 to recover from.
2

Search the catalog

Search the symbol catalog is a substring search over the enabled asset classes.
limit is clamped to 100, never refused, and hasMore is exact — so paging with offset terminates cleanly instead of guessing at the end. Each row names the provider that actually publishes the data, with via naming a proxy feed where one is in play.Use the returned symbol verbatim in every other market call. It is the id the feed knows.
3

Resolve one symbol's details

Get symbol details is the read a chart and an order ticket both need. Fetch it once per instrument and cache it for the session.
Resolution is metadata-only: a known symbol with no configured feed still resolves, with provider null. An unknown symbol answers 404 — a data answer, not a failure.
4

Fetch the futures catalog once and keep it

Get the futures catalog is static reference data, one row per futures product root.
These are the facts the trdrs ticket itself sizes, snaps and prices with. No per-user state, no secrets — fetch it at boot and hold it.

Why the limits call comes first

The other market routes assume you already know three things, and only this one will tell you. nominalSeconds on each unit is exact for the fixed-duration units and a coarse nominal for t (about a minute) and mo (about 30 days). Use it to bound ranges and order menus. It is never a promise about bar spacing.

What symbol details carry

A spread expression resolves here too, under type spread, with no tick and no quote surface. A string that matches a catalog symbol exactly is always that symbol, never arithmetic — so the slash pair BTC/USD resolves as itself.

What the futures catalog adds

One row per product root, not per contract: the listing exchange, tickSize and tickValue, the dollar multiplier, and the roll cycle. Two rows repay a closer look:
  • A product whose roll the engine does not approximate carries months — the calendar months that list contracts — so an order ticket can offer the month picker such an order needs.
  • A root the exchange quotes in thirty-seconds carries priceFraction as well: the denominator and subFraction its prices are written and traded in. Read that fact rather than deriving one from the tick.
Crypto instruments are not here. Their grid comes from each venue and is resolved client-side.

One more read worth making once

Get server time returns the engine clock in epoch seconds. Read it once at startup, compute the offset against your own clock, and apply that offset locally — session countdowns and bar boundaries then agree with the engine without ever polling the route again.

Where to go deeper