> ## 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.

# Get market-data limits

> Returns the timeframe format, symbol caps, and rate limits. Fetch before your first data call: it answers the question the other routes cannot — which timeframes are legal, and how large an ask will be honoured.

`timeframes.units` is the format itself, each unit with its inclusive count ceiling, so `1..maxCount` of any listed unit is accepted. The token is `<N><unit>`, which means custom values like `45s`, `90m`, `250t` and `3mo` are legal even though no preset lists them; validate against `units` and you reach the same verdict the engine does, without a round trip. `timeframes.presets` is the standard menu a client renders: a suggestion, never the boundary.

`nominalSeconds` is exact for the fixed-duration units and a coarse nominal for `t` (~1 minute) and `mo` (~30 days); it bounds ranges and orders menus, and is never a promise about bar spacing. `limits.maxBars` is both the `countBack` ceiling and the plain window’s width cap on `/api/market/history`. `assetClasses` lists what the catalog can actually answer for on this deployment, so a filter you offer always has rows behind it.



## OpenAPI

````yaml /partner-platform/openapi.json get /api/market/config
openapi: 3.1.0
info:
  title: trdrs Engine API
  version: 1.1.0
  description: >-
    ## API Reference


    This is the served OpenAPI contract for the trdrs engine: market data,
    trading and account

    routes for your firm's traders, trdrs Connect account-registration handoff,
    and preview

    challenge routes.


    See Quick Start for the first integration path: key setup, market config,
    chart data, Connect

    account registrations, idempotency, stream reconnects, and conformance.


    See Overview and API Standards for the cross-cutting contract rules.
servers:
  - url: https://app.trdrs.co
    description: Production
  - url: /
    description: This engine
security: []
tags:
  - name: Market data
    description: >-
      Symbol search and resolution, OHLCV history, quote snapshots, the server
      clock, and the live bar stream. Crypto rides each venue’s public feed;
      futures stream from the caller’s own connected Rithmic account. With none
      connected, futures requests answer 503 `feed_requires_connection`.
  - name: News
    description: >-
      Aggregated market news and the economic calendar, from licensed/open
      sources, keyword-tagged with futures roots at ingest. Platform-wide
      content (nothing per-user), admitted exactly like Market data: a licensed
      origin, a session, or a firm API key. Headlines page by published time,
      scope by instrument root, and stream live over SSE; thumbnails serve
      through the image proxy.
  - name: Trading
    description: >-
      The money surface: entries, exits, replaces, cancels, and position/account
      flattening. Every order-placing call uses `clientOrderId` as its
      idempotency key.
  - name: Account
    description: >-
      Reading a connected account. You do not create trading accounts here: a
      trader connects their own broker account (or creates a free demo account)
      in the app, and firms create evaluation accounts through the Partner API
      (Firm accounts → Create evaluation accounts) or register venue accounts
      through Connect (Create an account registration). Account state and the
      durable ledgers: balances, positions, working orders, fills, P&L history,
      and the live account stream.
  - name: Connect
    description: >-
      trdrs Connect account registration, for partner firms. Register an account
      you issued on your own venue — a pending account registration — with the
      trader’s sign-in email, optionally the venue account id and the login name
      your venue issued. The trader finds it waiting in the connect flow the
      moment they sign in with that email: the connect step is pre-filled with
      everything except the credential, which the trader always enters
      themselves. A registration never transmits a password and never grants
      access to anything before the trader’s own login succeeds. These routes
      answer a partner-scoped key only; a firm API key or a user session gets
      401. Registrations expire after 30 days; re-registering the same email +
      account refreshes the expiry instead of duplicating. The end-to-end flow
      guide is **[Quick Start](/docs/guides/quick-start)**.
  - name: Firm accounts
    description: >-
      Evaluation accounts your firm issues on the trdrs venue, through your
      partner key — the other half of account setup. Connect registrations hand
      off accounts that exist on your venue; these routes create and manage
      accounts on ours: the trader trades them on trdrs, and your firm owns the
      lifecycle. Every route is scoped to accounts your firm created through
      this API — an account the same trader opened themselves is invisible and
      untouchable here, by construction. Creation is batched with per-item
      results, and every write carries your own `referenceId`, so a crashed
      pipeline retries safely. Served when the deployment runs the prop engine;
      without it, every route in this group answers `404`.
  - name: Webhooks
    description: >-
      The outbound event bus: register an https endpoint and the platform pushes
      events to it instead of your back office polling us. Every delivery is
      signed (`trdrs-signature: t=<unix>,v1=<hmac-sha256>` over
      `${t}.${rawBody}`) so you can prove it came from us and is fresh, and
      every delivery is durable — a failed attempt is retried with backoff for
      about nine hours and the whole log is readable, so an endpoint that was
      down is a delay rather than a lost event. Serves brokers and prop firms
      alike: the account-registration (`registration.*`) events fire wherever
      Connect does, and the account events fire where the prop engine runs.
  - name: Challenges
    description: >-
      The prop evaluation surface: challenge programs and a trader’s own
      enrollments. **Preview: the one group on this page outside the
      additive-only guarantee** (the pre-contract v1 scaffold; the Phase-1
      rebuild will change these shapes; see Stability). **Cookie-authenticated,
      not key-authenticated**, and served only when the engine runs with
      `CHALLENGES_ENABLED`; without that flag the bundle is absent and every
      route below returns `404`. The firm-console/admin half of this surface is
      deliberately not documented here. It is back office, not licensed surface.
paths:
  /api/market/config:
    get:
      tags:
        - Market data
      summary: Get market-data limits
      description: >-
        Returns the timeframe format, symbol caps, and rate limits. Fetch before
        your first data call: it answers the question the other routes cannot —
        which timeframes are legal, and how large an ask will be honoured.


        `timeframes.units` is the format itself, each unit with its inclusive
        count ceiling, so `1..maxCount` of any listed unit is accepted. The
        token is `<N><unit>`, which means custom values like `45s`, `90m`,
        `250t` and `3mo` are legal even though no preset lists them; validate
        against `units` and you reach the same verdict the engine does, without
        a round trip. `timeframes.presets` is the standard menu a client
        renders: a suggestion, never the boundary.


        `nominalSeconds` is exact for the fixed-duration units and a coarse
        nominal for `t` (~1 minute) and `mo` (~30 days); it bounds ranges and
        orders menus, and is never a promise about bar spacing. `limits.maxBars`
        is both the `countBack` ceiling and the plain window’s width cap on
        `/api/market/history`. `assetClasses` lists what the catalog can
        actually answer for on this deployment, so a filter you offer always has
        rows behind it.
      responses:
        '200':
          description: The feed capability declaration (MarketConfigResponse)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MarketConfigResponse'
      security:
        - tenantKey: []
      x-codeSamples:
        - lang: javascript
          label: TypeScript
          source: |-
            const res = await fetch('https://app.trdrs.co/api/market/config', {
              headers: { Authorization: `Bearer ${process.env.TRDRS_API_KEY}` },
            })
            const data = await res.json()
        - lang: shell
          label: cURL
          source: |-
            curl 'https://app.trdrs.co/api/market/config' \
              -H "Authorization: Bearer $TRDRS_API_KEY"
components:
  schemas:
    MarketConfigResponse:
      type: object
      properties:
        timeframes:
          type: object
          properties:
            units:
              type: array
              items:
                type: object
                properties:
                  unit:
                    type: string
                    enum:
                      - t
                      - s
                      - m
                      - h
                      - d
                      - w
                      - mo
                    description: tick / second / minute / hour / day / week / month
                  maxCount:
                    type: integer
                    description: >-
                      Inclusive: `1..maxCount` parses; above it fails closed
                      with 400
                  nominalSeconds:
                    type: integer
                    description: Nominal seconds per bar. Exact except for `t` and `mo`
                required:
                  - unit
                  - maxCount
                  - nominalSeconds
            presets:
              type: array
              items:
                type: string
              description: >-
                The standard menu: a suggested UI list, not the limit of what is
                accepted
          required:
            - units
            - presets
        limits:
          type: object
          properties:
            maxBars:
              type: integer
              description: '`countBack` ceiling, and the plain window width cap in bars'
            maxSymbolsPerPage:
              type: integer
              description: >-
                `limit` ceiling on symbol search. A larger ask is clamped, not
                refused
            maxQuoteSymbols:
              type: integer
              description: Symbol count ceiling on the quotes route
          required:
            - maxBars
            - maxSymbolsPerPage
            - maxQuoteSymbols
        assetClasses:
          type: array
          items:
            type: string
          description: The classes this deployment’s catalog serves
      required:
        - timeframes
        - limits
        - assetClasses
      example:
        timeframes:
          units:
            - unit: t
              maxCount: 1000
              nominalSeconds: 60
            - unit: s
              maxCount: 3600
              nominalSeconds: 1
            - unit: m
              maxCount: 1440
              nominalSeconds: 60
            - unit: h
              maxCount: 168
              nominalSeconds: 3600
            - unit: d
              maxCount: 365
              nominalSeconds: 86400
            - unit: w
              maxCount: 52
              nominalSeconds: 604800
            - unit: mo
              maxCount: 120
              nominalSeconds: 2592000
          presets:
            - 1s
            - 5s
            - 15s
            - 30s
            - 1m
            - 3m
            - 5m
            - 15m
            - 30m
            - 1h
            - 2h
            - 4h
            - 1d
            - 1w
        limits:
          maxBars: 5000
          maxSymbolsPerPage: 100
          maxQuoteSymbols: 50
        assetClasses:
          - futures
          - crypto
  securitySchemes:
    tenantKey:
      type: http
      scheme: bearer
      description: >-
        Your firm’s API key (the API calls this the `tenant` key; `trdrs_sk_…`),
        server-to-server only.

````