> ## 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 symbol details

> Returns one symbol's display identity, price format, and session model. Fetch once per instrument and cache for the session: tick size, price precision, contract multiplier, session class, and the served holiday calendar all live here, so charts and tickets format prices without hardcoding exchange conventions. Resolution is metadata-only and answers even when no feed is configured for the symbol. A spread expression (see the history route) resolves under type `spread` with no tick and no quote surface; a string that matches a catalog symbol exactly is always that symbol, never arithmetic.



## OpenAPI

````yaml /partner-platform/openapi.json get /api/market/symbol-info
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/symbol-info:
    get:
      tags:
        - Market data
      summary: Get symbol details
      description: >-
        Returns one symbol's display identity, price format, and session model.
        Fetch once per instrument and cache for the session: tick size, price
        precision, contract multiplier, session class, and the served holiday
        calendar all live here, so charts and tickets format prices without
        hardcoding exchange conventions. Resolution is metadata-only and answers
        even when no feed is configured for the symbol. A spread expression (see
        the history route) resolves under type `spread` with no tick and no
        quote surface; a string that matches a catalog symbol exactly is always
        that symbol, never arithmetic.
      parameters:
        - name: symbol
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: >-
            SymbolInfoResponse. Metadata-only: a known symbol with no configured
            feed still resolves (provider null).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SymbolInfoResponse'
        '404':
          description: Unknown symbol (a data answer, not a failure)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - tenantKey: []
      x-codeSamples:
        - lang: javascript
          label: TypeScript
          source: >-
            const res = await
            fetch('https://app.trdrs.co/api/market/symbol-info?symbol=ESU6', {
              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/symbol-info?symbol=ESU6' \
              -H "Authorization: Bearer $TRDRS_API_KEY"
components:
  schemas:
    SymbolInfoResponse:
      type: object
      properties:
        symbol:
          type: string
        name:
          type: string
          description: The short display identity
        ticker:
          type: string
          description: >-
            The canonical symbol id to resolve and subscribe with on every later
            call
        description:
          type: string
          description: The long human description
        exchange:
          type: string
        listedExchange:
          type: string
          description: The venue that lists the symbol
        type:
          type: string
        supportedResolutions:
          type: array
          items:
            type: string
          description: >-
            The wire timeframe tokens this symbol's feed serves. Empty means the
            feed serves any token the timeframe format published by
            /api/market/config admits, which is what an unconstrained feed
            declares rather than a finite list that would promise less than it
            serves.
        timezone:
          type: string
          description: IANA zone of the exchange session, e.g. America/Chicago
        session:
          type: string
          description: >-
            Exchange-local session string in HHMM-HHMM, carrying a trading-day
            suffix (1 is Sunday through 7 is Saturday) where the session opens
            on the previous calendar day, and the literal 24x7 for a market that
            never closes.
        sessionHolidays:
          type: string
          description: >-
            Comma-separated YYYYMMDD full closures, in date order. Present
            exactly where sessionCalendar is.
        corrections:
          type: string
          description: >-
            Trading days whose session differs from the weekly one, as
            semicolon-separated session:dates entries. The session is written in
            the same format as the session property, without a trading-day
            suffix (a start later than its end opens on the previous calendar
            day, and a span that runs to midnight closes at 0000); the dates are
            a comma-separated ordered YYYYMMDD list. Full closures are never
            listed here; they ride sessionHolidays. Present exactly where the
            served calendar holds a shortened trading day.
          example: 1700-1200:20261126;1700-1215:20261127,20261224
        subsessions:
          type: array
          items:
            $ref: '#/components/schemas/Subsession'
          description: >-
            The named sessions of a market whose exchange keeps extended hours:
            regular, extended, premarket and postmarket. For an equity the
            regular entry states the same hours as the session property and the
            extended spans exist nowhere else on the wire; for a future the
            extended entry states the same hours as the session property and the
            regular entry states the regular trading hours inside it. Pre-market
            and post-market status and extended-hours shading read from here.
            Present for equity and futures; absent for fx, crypto and spreads,
            whose one session has no named spans.
          example:
            - id: regular
              session: 0930-1600
              sessionCorrections: 0930-1300:20261127,20261224
            - id: extended
              session: 0400-2000
              sessionCorrections: 0400-1700:20261127,20261224
            - id: premarket
              session: 0400-0930
            - id: postmarket
              session: 1600-2000
              sessionCorrections: 1300-1700:20261127,20261224
        dataStatus:
          type: string
          enum:
            - streaming
            - endofday
            - delayed_streaming
          description: >-
            How live the data is for this caller: streaming when something feeds
            the symbol, endofday when nothing does
        currencyCode:
          type: string
          description: >-
            Quote currency: ISO 4217 for a money-quoted market, or the venue's
            declared quote asset for a stablecoin-margined perp. Absent when the
            instrument domain declares none.
        unitId:
          type: string
          description: The unit a non-currency symbol is quoted in
        volumePrecision:
          type: number
          description: >-
            Decimal places for a volume value: 0 for a whole-unit market, the
            venue's declared size step otherwise
        format:
          $ref: '#/components/schemas/PriceFormat'
        provider:
          type:
            - string
            - 'null'
          enum:
            - pyth
            - rithmic
            - null
        via:
          type:
            - string
            - 'null'
        tick:
          type:
            - number
            - 'null'
        quotes:
          type: boolean
          description: Whether the serving feed exposes a real L1 quote surface
        sessionClass:
          type: string
          enum:
            - equity
            - futures
            - fx
            - crypto
          description: The trading-session model the symbol follows (served, never guessed)
        sessionCalendar:
          type: object
          description: >-
            The served holiday calendar for the session model (futures and
            equity; absent for fx/crypto). Dates are exchange-local YYYY-MM-DD;
            an empty segment list is a full closure; absent dates follow weekday
            rules. The platform maintains this annually server-side, so clients
            never ship their own calendar updates.
          properties:
            holidays:
              type: object
              additionalProperties:
                type: array
                items:
                  $ref: '#/components/schemas/SessionSegment'
            coverageThrough:
              type: string
              description: Last exchange-local date the table covers (YYYY-MM-DD)
          required:
            - holidays
            - coverageThrough
        multiplier:
          type:
            - number
            - 'null'
          description: >-
            Dollar value of a 1.0 move per unit; null when unknown, never a
            guess
      required:
        - symbol
        - name
        - ticker
        - description
        - exchange
        - listedExchange
        - type
        - supportedResolutions
        - timezone
        - session
        - dataStatus
        - volumePrecision
        - format
        - provider
        - via
        - tick
        - quotes
        - sessionClass
        - multiplier
      example:
        symbol: ESU6
        name: E-mini S&P 500 Sep 2026
        ticker: ESU6
        description: E-mini S&P 500 Sep 2026
        exchange: CME
        listedExchange: CME
        type: futures
        supportedResolutions: []
        timezone: America/Chicago
        session: 1700-1600:23456
        sessionHolidays: 20261225,20270101
        corrections: 1700-1200:20261126;1700-1215:20261127,20261224
        subsessions:
          - id: regular
            session: 0830-1515:23456
            sessionCorrections: 0830-1200:20261126;0830-1215:20261127,20261224
          - id: extended
            session: 1700-1600:23456
            sessionCorrections: 1700-1200:20261126;1700-1215:20261127,20261224
          - id: premarket
            session: 1700-0830:23456
          - id: postmarket
            session: 1515-1600:23456
        dataStatus: streaming
        currencyCode: USD
        volumePrecision: 0
        format:
          pricescale: 100
          minmov: 25
        provider: rithmic
        via: null
        tick: 0.25
        quotes: true
        sessionClass: futures
        sessionCalendar:
          holidays:
            '2026-12-25': []
          coverageThrough: '2027-06-30'
        multiplier: 50
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
      required:
        - error
      example:
        error: invalid_instrument
    Subsession:
      type: object
      properties:
        id:
          type: string
          enum:
            - regular
            - extended
            - premarket
            - postmarket
          description: >-
            regular is the exchange regular hours; premarket and postmarket are
            the extended spans before and after them; extended is the whole span
            from the pre-market open to the post-market close. The session
            property equals regular for an exchange whose session is its regular
            hours (NYSE) and equals extended for an exchange whose one
            continuous session contains them (CME Globex).
        session:
          type: string
          description: >-
            The subsession hours, in the same format as the session property,
            with the session property's trading-day suffix
          example: 0400-0930
        description:
          type: string
          description: >-
            A display label a third-party feed may state. Not served by this
            engine: labels come from the client catalog, keyed by id.
        sessionCorrections:
          type: string
          description: >-
            Trading days that shorten this subsession, in the same format as the
            corrections property. Present exactly where the served calendar
            shortens this subsession. A subsession a corrected day drops
            entirely (the Globex closing hour on an early close) has no entry,
            because the format states shorter hours and not none: on any date a
            subsession is bounded by that date's extended entry.
          example: 1300-1700:20261127,20261224
      required:
        - id
        - session
    PriceFormat:
      type: object
      description: >-
        How the symbol's prices are written, derived exactly from its declared
        tick and quotation convention and never from the magnitude of a price.
        pricescale is price units per whole unit (100 writes cents, 100000
        writes pipettes, 32 writes thirty-seconds) and alone sets the width of
        the decimal column; minmov is the smallest move in those units; minmove2
        divides one minmov step again for a fraction-of-a-fraction market;
        fractional writes the sub-unit part as a counted fraction;
        variableTickSize carries a tick ladder for a symbol that declares one.
      properties:
        pricescale:
          type: number
        minmov:
          type: number
        minmove2:
          type: number
          description: >-
            Further division of one minmov step: 2 is halves of a thirty-second,
            4 is quarters
        fractional:
          type: boolean
          description: Write the sub-unit part as a counted fraction, e.g. 119'16
        variableTickSize:
          type: string
          description: >-
            Ordered tick ladder: alternating tick and exclusive upper bound,
            ending with the tick that applies above the last bound
      required:
        - pricescale
        - minmov
    SessionSegment:
      type: object
      properties:
        start:
          type: number
          description: Minutes from exchange-local midnight
        end:
          type: number
          description: End minute, exclusive (1440 = next midnight)
        session:
          type: string
          enum:
            - pre
            - open
            - eth
            - after
      required:
        - start
        - end
        - session
  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.

````