> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trdrs.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Find symbols

> Ask what the feed accepts, search the catalog, then resolve one symbol into the tick, the price format, and the session a ticket needs.

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.

<Steps>
  <Step title="Fetch the limits once, before your first data call">
    [Get market-data limits](/api-reference/market-data/get-market-data-limits) answers the question
    the other routes cannot: which timeframes are legal, and how large an ask will be honoured.

    ```bash theme={null}
    curl "$TRDRS_API_BASE_URL/api/market/config" \
      -H "Authorization: Bearer $TRDRS_TENANT_KEY"
    ```

    `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.
  </Step>

  <Step title="Search the catalog">
    [Search the symbol catalog](/api-reference/market-data/search-the-symbol-catalog) is a substring
    search over the enabled asset classes.

    ```bash theme={null}
    curl "$TRDRS_API_BASE_URL/api/market/symbols?q=E-mini&class=futures&limit=25" \
      -H "Authorization: Bearer $TRDRS_TENANT_KEY"
    ```

    `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.
  </Step>

  <Step title="Resolve one symbol's details">
    [Get symbol details](/api-reference/market-data/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.

    ```bash theme={null}
    curl "$TRDRS_API_BASE_URL/api/market/symbol-info?symbol=ESU6" \
      -H "Authorization: Bearer $TRDRS_TENANT_KEY"
    ```

    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.
  </Step>

  <Step title="Fetch the futures catalog once and keep it">
    [Get the futures catalog](/api-reference/market-data/get-the-futures-catalog) is static
    reference data, one row per futures product root.

    ```bash theme={null}
    curl "$TRDRS_API_BASE_URL/api/instruments" \
      -H "Authorization: Bearer $TRDRS_TENANT_KEY"
    ```

    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.
  </Step>
</Steps>

## Why the limits call comes first

The other market routes assume you already know three things, and only this one will tell you.

| From `/api/market/config`  | What it settles                                                                                                                                                                                                                                              |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `timeframes.units`         | The token format is `<N><unit>` over `t` `s` `m` `h` `d` `w` `mo`, each with an inclusive `maxCount`. Custom values like `45s`, `90m`, `250t` and `3mo` are legal even though no preset lists them. Above the ceiling the request fails closed with a `400`. |
| `timeframes.presets`       | The standard menu a client renders. A suggestion, never the boundary.                                                                                                                                                                                        |
| `limits.maxBars`           | Both the `countBack` ceiling and the plain window's width cap on [price history](/api-reference/market-data/get-price-history).                                                                                                                              |
| `limits.maxSymbolsPerPage` | The `limit` ceiling on symbol search. A larger ask is clamped, not refused.                                                                                                                                                                                  |
| `limits.maxQuoteSymbols`   | The symbol-count ceiling on [quote snapshots](/api-reference/market-data/get-quote-snapshots).                                                                                                                                                               |
| `assetClasses`             | What this deployment's catalog can actually answer for — so a filter you offer always has rows behind it.                                                                                                                                                    |

`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

| Field                               | What it is for                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ticker`                            | The canonical symbol id to resolve and subscribe with on every later call.                                                                                                                                                                                                                                                                                                                                                                                                |
| `tick`                              | The smallest price move, or null where the feed declares none.                                                                                                                                                                                                                                                                                                                                                                                                            |
| `format`                            | How prices are written: `pricescale` is price units per whole unit and alone sets the width of the decimal column; `minmov` is the smallest move in those units; `minmove2` divides one step again for a fraction-of-a-fraction market; `fractional` writes the sub-unit part as a counted fraction; `variableTickSize` carries a tick ladder where a symbol declares one. Derived from the declared tick and quotation convention — never from the magnitude of a price. |
| `sessionClass`                      | The trading-session model the symbol follows: `equity`, `futures`, `fx`, or `crypto`. Served, never guessed.                                                                                                                                                                                                                                                                                                                                                              |
| `session`                           | Exchange-local hours as `HHMM-HHMM`, with a trading-day suffix where the session opens on the previous calendar day, and the literal `24x7` for a market that never closes.                                                                                                                                                                                                                                                                                               |
| `timezone`                          | The IANA zone of the exchange session.                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `sessionHolidays` and `corrections` | Full closures, and trading days whose session differs from the weekly one.                                                                                                                                                                                                                                                                                                                                                                                                |
| `sessionCalendar`                   | The served holiday calendar, with `coverageThrough` naming the last date it covers. The platform maintains this annually server-side, so clients never ship their own calendar updates.                                                                                                                                                                                                                                                                                   |
| `subsessions`                       | The named spans of a market with extended hours — `regular`, `extended`, `premarket`, `postmarket`. Present for equity and futures; absent for fx, crypto and spreads, whose one session has no named spans.                                                                                                                                                                                                                                                              |
| `dataStatus`                        | How live the data is for this caller: `streaming` when something feeds the symbol, `endofday` when nothing does, or `delayed_streaming`.                                                                                                                                                                                                                                                                                                                                  |
| `multiplier`                        | The dollar value of a 1.0 move per unit, or null when unknown — never a guess.                                                                                                                                                                                                                                                                                                                                                                                            |
| `supportedResolutions`              | The wire timeframe tokens this symbol's feed serves. **Empty is not "none":** it means the feed serves any token the format published by the limits route admits, which is what an unconstrained feed declares rather than a finite list that would promise less than it serves.                                                                                                                                                                                          |
| `quotes`                            | Whether the serving feed exposes a real level-1 quote surface.                                                                                                                                                                                                                                                                                                                                                                                                            |

A [spread expression](/guides/backfill-history) 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](/api-reference/market-data/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

* [Backfill history](/guides/backfill-history) — windows, `countBack` paging, and spread expressions.
* [Stream live data](/guides/stream-live-data) — what takes over once the backfill is on screen.
* [Get quote snapshots](/api-reference/market-data/get-quote-snapshots) — up to 50 symbols in one call, answered in request order.
* [Rate limits](/partner-platform/overview/rate-limits) — the `429` and its `Retry-After`.
* [Paging](/partner-platform/overview/paging) — the `offset` and `hasMore` contract in full.
