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

# Read risk across the venue's accounts

> Reads every customer account the venue issued on the paper book, up to 500, as one snapshot at a single instant, `asOf`: totals, exposure by instrument, positions, working orders, per-account state and equity history. Use it as your risk desk. Each position is valued at the price and contract size the account's own risk valuation uses, and is unmarked until that valuation covers it; the hedging section also needs `hedge:read`, and reads as unavailable without it. Required scope: `account:read`. Preview: served on the sandbox to every venue, and production availability is arranged when a venue qualifies. Trading API keys and Partner keys do not authorize these routes.



## OpenAPI

````yaml /api/openapi.json get /api/partner/venues/{venueId}/risk
openapi: 3.1.0
info:
  title: trdrs Engine API
  version: 1.1.0
  description: >-
    ## API Reference


    Every route the trdrs engine serves, with what to send and what comes back.
    It covers market

    data and news, trading and account state for a trader's own software,
    Connect pre-registration,

    the venue routes a prop firm or brokerage runs its accounts through, and the
    Legacy Partner API.


    Start with the Quickstart for your first call. The API standards hold the
    rules every route

    shares: keys, errors, rate limits, idempotency, paging and streaming.
servers:
  - url: https://app.trdrs.co
    description: Production
  - url: /
    description: This engine
security: []
tags:
  - name: Venue platform preview
    description: >-
      Run your venue: its providers, instruments, conditions, groups, routes,
      stages, venue rules, keys, accounts, usage, balance receipts and webhooks.
      These routes are in preview. They are served on the sandbox to every
      venue, and production access is arranged when a venue qualifies. Every
      route here under `/api/partner/` takes a Venue key. The back office
      reaches the same routes under `/api/operator/` with a verified owner’s
      session, because a browser never holds a Venue key, and both run the same
      checks. Changes to these routes are additive only from here on, and the
      Legacy Partner API routes stay as they are.
  - name: Market data
    description: >-
      Search and look up symbols, read price history and quotes, check the
      server clock, and stream live bars. Crypto prices come from each
      provider’s public feed. Futures prices are licensed to each user and
      stream from your own login at a provider that carries them, so without one
      connected, a futures request answers 503 `feed_requires_connection`.
  - name: News
    description: >-
      Market news and the economic calendar, from licensed and open sources,
      tagged with futures roots as they arrive. The content is the same for
      everyone, and these routes admit the same callers as market data: a
      licensed origin, a session or a Trading API key. Page headlines by publish
      time, filter them by instrument root, and stream them live over
      server-sent events. Thumbnails come through the image route.
  - name: Trading
    description: >-
      Place, change and cancel orders, set a position’s exits, and close or
      flatten positions. Every call that places an order takes a `clientOrderId`
      as its idempotency key.
  - name: Account
    description: >-
      Read an account a trader can trade: its balance, positions, working
      orders, fills, profit and loss history, and the live account stream. You
      don’t create accounts here. A trader connects their own account at a
      provider, or opens their own Demo on the paper book, in the trdrs app. A
      venue issues accounts on the paper book with Issue an account into a
      group, and a firm pre-registers accounts at a provider through Connect
      with Pre-register a trader’s account.
  - name: Connect
    description: >-
      Connect is the account picker a trader opens, in the trdrs app or embedded
      on a firm’s site. It lists the built-in providers and every listed venue.
      The pre-registration routes let a firm fill it in ahead of time. You tell
      trdrs that a trader has an account at a built-in provider: their sign-in
      email, and optionally the account number and login name. When that trader
      signs in, Connect shows the account ready to link, and they sign in to the
      provider themselves, once. Nothing here sends a password or grants access
      before the trader’s own login succeeds. You can list who you
      pre-registered and who has linked, and cancel a pre-registration that
      hasn’t been used. A pre-registration expires after 30 days, and sending it
      again refreshes it. These routes take the Partner key. They belong to
      Connect, not to the Legacy Partner API. The whole flow is in the **[Quick
      Start](/docs/guides/quick-start)**.
  - name: Firm accounts (legacy)
    description: >-
      Legacy Partner API. Each route here has a venue twin under
      `/api/partner/venues/{venueId}/accounts…`, which takes a Venue key and a
      named scope, and new integrations use those. This group stays for firms
      that predate venues, and both run the same operation. These routes issue
      and manage evaluation accounts on the paper book with your Partner key:
      the trader trades them on trdrs, and your firm owns their lifecycle. Every
      route sees only the accounts your firm created through this API, so an
      account the same trader opened themselves is invisible here. Creation is
      batched with a result per item, and every write carries your own
      `referenceId`, so a pipeline that crashes can retry safely. These routes
      are served where the engine runs prop evaluations. Elsewhere, every route
      in this group answers `404`.
  - name: Billing
    description: >-
      Legacy Partner API, per firm. What your firm is billed for in a month,
      counted from its fills, and the accounts behind the number. The venue
      routes Read the venue’s metered usage for a month and Read the accounts
      behind the venue’s usage replace these, which still take the Partner key.
  - name: Webhooks
    description: >-
      Legacy Partner API. The venue routes Register a webhook, List the venue’s
      webhooks and Read a webhook’s delivery log replace these, with a Venue
      key, and an endpoint registered either way receives the same events.
      Register an https endpoint, and trdrs pushes events to it, so your back
      office doesn’t have to poll. Every delivery is signed (`trdrs-signature:
      t=<unix>,v1=<hmac-sha256>` over `${t}.${rawBody}`), so you can prove it
      came from trdrs and is fresh. Every delivery is also durable: a failed
      attempt is retried with backoff for about nine hours, and the whole log is
      readable, so an endpoint that was down gets its events late rather than
      never. The pre-registration events (`registration.*`) fire wherever
      Connect runs, and the account events fire where the engine runs prop
      evaluations.
  - name: Challenges
    description: >-
      Legacy Partner API. Stage policies on a venue replace the firm’s half of
      this, and the trader’s enrollment flow has not moved yet. These routes
      list evaluation programs and a trader’s own enrollments. **Preview: the
      one group in this reference outside the additive-only guarantee.** Their
      shapes will change when challenges are rebuilt; see Stability. **They take
      a signed-in session, not a key**, and are served only where the engine
      runs with `CHALLENGES_ENABLED`. Without it, the routes don’t exist and
      every one answers `404`. The administration half isn’t documented here,
      because it is trdrs’s own tooling, not part of the API.
paths:
  /api/partner/venues/{venueId}/risk:
    get:
      tags:
        - Venue platform preview
      summary: Read risk across the venue's accounts
      description: >-
        Reads every customer account the venue issued on the paper book, up to
        500, as one snapshot at a single instant, `asOf`: totals, exposure by
        instrument, positions, working orders, per-account state and equity
        history. Use it as your risk desk. Each position is valued at the price
        and contract size the account's own risk valuation uses, and is unmarked
        until that valuation covers it; the hedging section also needs
        `hedge:read`, and reads as unavailable without it. Required scope:
        `account:read`. Preview: served on the sandbox to every venue, and
        production availability is arranged when a venue qualifies. Trading API
        keys and Partner keys do not authorize these routes.
      parameters:
        - name: venueId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: historyWindow
          in: query
          required: false
          schema:
            type: integer
            minimum: 60
            maximum: 10080
            default: 1440
          description: >-
            How many minutes of history to return, from 60 to 10,080. The
            default is 1,440, one day.
        - name: historyInterval
          in: query
          required: false
          schema:
            type: integer
            enum:
              - 1
              - 5
              - 15
              - 60
            default: 5
          description: >-
            Minutes between history points: 1, 5, 15 or 60. The default is 5.
            The window divided by the interval can't exceed 1,000 points.
      responses:
        '200':
          description: >-
            Success. The response is sent with `Cache-Control: no-store`, so
            don't cache it.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VenueRiskResponse'
        '400':
          description: >-
            The request is malformed: invalid JSON or input, a bad cursor, or a
            missing `Idempotency-Key` or `If-Match` header. When one value is
            refused, `field` names it where the check can say which.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: >-
            The Venue key or the session is missing, malformed, revoked or
            expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            The credential is valid but can't do this: the key lacks the scope
            or its creator is no longer an owner, the email isn't verified, a
            reader tried to write, or the request came from an origin that isn't
            trusted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: >-
            The venue, account or resource doesn't exist in this environment, or
            isn't yours to see.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: >-
            The request conflicts with what is stored: the `Idempotency-Key` was
            used with a different body, or the version you sent is stale. The
            `error` code names the conflict.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '413':
          description: The body is larger than this route accepts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '415':
          description: 'Send the body as JSON, with `Content-Type: application/json`.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: >-
            trdrs can't complete the request right now, because a part of the
            venue platform or its credential store is unavailable. Don't assume
            a write happened: retry it with the same `Idempotency-Key`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - venueOperatorKey: []
      x-codeSamples:
        - lang: javascript
          label: TypeScript
          source: >-
            const res = await
            fetch('https://app.trdrs.co/api/partner/venues/{venueId}/risk', {
              headers: { Authorization: `Bearer ${process.env.TRDRS_VENUE_KEY}` },
            })

            const data = await res.json()
        - lang: shell
          label: cURL
          source: |-
            curl 'https://app.trdrs.co/api/partner/venues/{venueId}/risk' \
              -H "Authorization: Bearer $TRDRS_VENUE_KEY"
components:
  schemas:
    VenueRiskResponse:
      type: object
      additionalProperties: false
      properties:
        risk:
          type: object
          additionalProperties: false
          properties:
            venueId:
              type: string
              format: uuid
            environment:
              type: string
              enum:
                - sandbox
                - production
            asOf:
              type: string
              format: date-time
            snapshot:
              type: object
              additionalProperties: false
              properties:
                basis:
                  const: single_transaction
                isolation:
                  const: repeatable_read
              required:
                - basis
                - isolation
            currency:
              type:
                - string
                - 'null'
            currencies:
              type: array
              items:
                type: string
            scope:
              type: object
              additionalProperties: false
              properties:
                listed:
                  type: integer
                included:
                  type: integer
                excluded:
                  type: array
                  items:
                    type: object
                    additionalProperties: false
                    properties:
                      accountId:
                        type: string
                      reason:
                        type: string
                        enum:
                          - provider_book_not_synchronized
                          - account_unreadable
                    required:
                      - accountId
                      - reason
                limit:
                  const: 500
                limitExceeded:
                  type: boolean
              required:
                - listed
                - included
                - excluded
                - limit
                - limitExceeded
              description: >-
                Which accounts the read covers, at most 500. An account held at
                a provider keeps its positions there and is listed under
                `excluded`, as is one that couldn't be read.
            markPolicy:
              type: object
              additionalProperties: false
              properties:
                maxAgeMs:
                  type: integer
                notional:
                  const: quantity_times_mark_times_multiplier
                valuationCurrency:
                  const: account_currency
              required:
                - maxAgeMs
                - notional
                - valuationCurrency
              description: >-
                How positions are valued: notional is quantity times a mark no
                older than `maxAgeMs` times the contract multiplier, in the
                account currency.
            totals:
              type: object
              additionalProperties: false
              properties:
                balance:
                  type:
                    - number
                    - 'null'
                equity:
                  type:
                    - number
                    - 'null'
                unrealizedPnl:
                  type:
                    - number
                    - 'null'
                grossRealizedPnl:
                  type:
                    - number
                    - 'null'
                fees:
                  type:
                    - number
                    - 'null'
                netTradingPnl:
                  type:
                    - number
                    - 'null'
                balanceAdjustments:
                  type:
                    - number
                    - 'null'
              required:
                - balance
                - equity
                - unrealizedPnl
                - grossRealizedPnl
                - fees
                - netTradingPnl
                - balanceAdjustments
              description: >-
                Sums across the included accounts, stated only when every one of
                them answered in one currency. A sum a missing mark would change
                is null, never partial. Money is exact and stated once at the
                currency's precision, rounded half to even: cents for US
                dollars, six decimals for USDC.
            counts:
              type: object
              additionalProperties: false
              properties:
                openPositions:
                  type: integer
                workingOrders:
                  type: integer
                accountsWithPositions:
                  type: integer
                halted:
                  type: integer
                breaches:
                  type: integer
                incompleteAccounts:
                  type: integer
                unmarkedPositions:
                  type: integer
              required:
                - openPositions
                - workingOrders
                - accountsWithPositions
                - halted
                - breaches
                - incompleteAccounts
                - unmarkedPositions
            grossNotional:
              type:
                - number
                - 'null'
            exposure:
              type: array
              items:
                type: object
                additionalProperties: false
                properties:
                  instrument:
                    type: string
                  mark:
                    type:
                      - number
                      - 'null'
                  multiplier:
                    type:
                      - number
                      - 'null'
                  long:
                    type: number
                  short:
                    type: number
                  net:
                    type: number
                  gross:
                    type: number
                  accounts:
                    type: integer
                  longNotional:
                    type:
                      - number
                      - 'null'
                  shortNotional:
                    type:
                      - number
                      - 'null'
                  netNotional:
                    type:
                      - number
                      - 'null'
                  grossNotional:
                    type:
                      - number
                      - 'null'
                  unrealizedPnl:
                    type:
                      - number
                      - 'null'
                  dataStatus:
                    type: string
                    enum:
                      - marked
                      - no_fresh_mark
                      - unknown_instrument
                  hedges:
                    type: array
                    items:
                      type: object
                      additionalProperties: false
                      properties:
                        groupId:
                          type: string
                        instrumentId:
                          type: string
                        sourceQuantity:
                          type: string
                          description: >-
                            An exact decimal string, such as `"12.5"`, with at
                            most 18 digits after the point and no exponent.
                        targetQuantity:
                          type: string
                          description: >-
                            An exact decimal string, such as `"12.5"`, with at
                            most 18 digits after the point and no exponent.
                        confirmedQuantity:
                          type: string
                          description: >-
                            An exact decimal string, such as `"12.5"`, with at
                            most 18 digits after the point and no exponent.
                        pendingQuantity:
                          type: string
                          description: >-
                            An exact decimal string, such as `"12.5"`, with at
                            most 18 digits after the point and no exponent.
                        residualQuantity:
                          type: string
                          description: >-
                            An exact decimal string, such as `"12.5"`, with at
                            most 18 digits after the point and no exponent.
                        markPrice:
                          type: string
                          description: >-
                            An exact decimal string, such as `"12.5"`, with at
                            most 18 digits after the point and no exponent.
                        calculatedAt:
                          type: string
                          format: date-time
                      required:
                        - groupId
                        - instrumentId
                        - sourceQuantity
                        - targetQuantity
                        - confirmedQuantity
                        - pendingQuantity
                        - residualQuantity
                        - markPrice
                        - calculatedAt
                      description: >-
                        A hedge target as the hedge calculation stated it at
                        `calculatedAt`. It is listed beside the customer
                        exposure in the same instrument and never netted into
                        it.
                required:
                  - instrument
                  - mark
                  - multiplier
                  - long
                  - short
                  - net
                  - gross
                  - accounts
                  - longNotional
                  - shortNotional
                  - netNotional
                  - grossNotional
                  - unrealizedPnl
                  - dataStatus
                  - hedges
              description: >-
                Customer exposure by instrument. Its money is null when the
                included accounts hold more than one currency.
            positions:
              type: array
              items:
                type: object
                additionalProperties: false
                properties:
                  accountId:
                    type: string
                  accountNumber:
                    type: string
                  email:
                    type:
                      - string
                      - 'null'
                  groupId:
                    type:
                      - string
                      - 'null'
                  instrument:
                    type: string
                  positionId:
                    type:
                      - string
                      - 'null'
                  side:
                    type: string
                    enum:
                      - long
                      - short
                  quantity:
                    type: number
                  averagePrice:
                    type: number
                  mark:
                    type:
                      - number
                      - 'null'
                  multiplier:
                    type:
                      - number
                      - 'null'
                  notional:
                    type:
                      - number
                      - 'null'
                  unrealizedPnl:
                    type:
                      - number
                      - 'null'
                  realizedPnl:
                    type: number
                  dataStatus:
                    type: string
                    enum:
                      - marked
                      - no_fresh_mark
                      - unknown_instrument
                required:
                  - accountId
                  - accountNumber
                  - email
                  - groupId
                  - instrument
                  - positionId
                  - side
                  - quantity
                  - averagePrice
                  - mark
                  - multiplier
                  - notional
                  - unrealizedPnl
                  - realizedPnl
                  - dataStatus
            orders:
              type: array
              items:
                type: object
                additionalProperties: false
                properties:
                  accountId:
                    type: string
                  accountNumber:
                    type: string
                  instrument:
                    type: string
                  side:
                    type: string
                    enum:
                      - buy
                      - sell
                  quantity:
                    type: number
                  orderType:
                    type: string
                  limitPrice:
                    type:
                      - number
                      - 'null'
                  stopPrice:
                    type:
                      - number
                      - 'null'
                  reduceOnly:
                    type: boolean
                required:
                  - accountId
                  - accountNumber
                  - instrument
                  - side
                  - quantity
                  - orderType
                  - limitPrice
                  - stopPrice
                  - reduceOnly
            accounts:
              type: array
              items:
                type: object
                additionalProperties: false
                properties:
                  accountId:
                    type: string
                  accountNumber:
                    type: string
                  email:
                    type:
                      - string
                      - 'null'
                  groupId:
                    type:
                      - string
                      - 'null'
                  status:
                    type:
                      - string
                      - 'null'
                  currency:
                    type: string
                  positionModel:
                    type: string
                    enum:
                      - net
                      - independent_tickets
                  balance:
                    type: number
                  equity:
                    type:
                      - number
                      - 'null'
                  unrealizedPnl:
                    type:
                      - number
                      - 'null'
                  netTradingPnl:
                    type: number
                  fees:
                    type: number
                  positions:
                    type: integer
                  orders:
                    type: integer
                  halted:
                    type: boolean
                  breaches:
                    type: integer
                  complete:
                    type: boolean
                  reasons:
                    type: array
                    items:
                      type: string
                required:
                  - accountId
                  - accountNumber
                  - email
                  - groupId
                  - status
                  - currency
                  - positionModel
                  - balance
                  - equity
                  - unrealizedPnl
                  - netTradingPnl
                  - fees
                  - positions
                  - orders
                  - halted
                  - breaches
                  - complete
                  - reasons
            hedging:
              oneOf:
                - type: object
                  additionalProperties: false
                  properties:
                    state:
                      const: unavailable
                    reason:
                      type: string
                      enum:
                        - hedging_not_configured
                        - hedge_read_not_permitted
                  required:
                    - state
                    - reason
                - type: object
                  additionalProperties: false
                  properties:
                    state:
                      const: reported
                    targets:
                      type: array
                      items:
                        type: object
                        additionalProperties: false
                        properties:
                          groupId:
                            type: string
                          instrumentId:
                            type: string
                          sourceQuantity:
                            type: string
                            description: >-
                              An exact decimal string, such as `"12.5"`, with at
                              most 18 digits after the point and no exponent.
                          targetQuantity:
                            type: string
                            description: >-
                              An exact decimal string, such as `"12.5"`, with at
                              most 18 digits after the point and no exponent.
                          confirmedQuantity:
                            type: string
                            description: >-
                              An exact decimal string, such as `"12.5"`, with at
                              most 18 digits after the point and no exponent.
                          pendingQuantity:
                            type: string
                            description: >-
                              An exact decimal string, such as `"12.5"`, with at
                              most 18 digits after the point and no exponent.
                          residualQuantity:
                            type: string
                            description: >-
                              An exact decimal string, such as `"12.5"`, with at
                              most 18 digits after the point and no exponent.
                          markPrice:
                            type: string
                            description: >-
                              An exact decimal string, such as `"12.5"`, with at
                              most 18 digits after the point and no exponent.
                          calculatedAt:
                            type: string
                            format: date-time
                        required:
                          - groupId
                          - instrumentId
                          - sourceQuantity
                          - targetQuantity
                          - confirmedQuantity
                          - pendingQuantity
                          - residualQuantity
                          - markPrice
                          - calculatedAt
                        description: >-
                          A hedge target as the hedge calculation stated it at
                          `calculatedAt`. It is listed beside the customer
                          exposure in the same instrument and never netted into
                          it.
                    policies:
                      type: array
                      items:
                        type: object
                        additionalProperties: false
                        properties:
                          id:
                            type: string
                            format: uuid
                          groupId:
                            type: string
                          name:
                            type: string
                          ratio:
                            type: string
                            description: >-
                              An exact decimal string, such as `"12.5"`, with at
                              most 18 digits after the point and no exponent.
                          state:
                            type:
                              - string
                              - 'null'
                            enum:
                              - active
                              - paused
                              - stopped
                              - null
                        required:
                          - id
                          - groupId
                          - name
                          - ratio
                          - state
                    openIncidents:
                      type: array
                      items:
                        type: object
                        additionalProperties: false
                        properties:
                          id:
                            type: string
                            format: uuid
                          groupId:
                            type: string
                          instrumentId:
                            type: string
                          reason:
                            type: string
                          openedAt:
                            type: string
                            format: date-time
                        required:
                          - id
                          - groupId
                          - instrumentId
                          - reason
                          - openedAt
                    intents:
                      type: object
                      additionalProperties: false
                      properties:
                        total:
                          type: integer
                        unresolved:
                          type: integer
                        prepared:
                          type: integer
                      required:
                        - total
                        - unresolved
                        - prepared
                    metrics:
                      type: object
                  required:
                    - state
                    - targets
                    - policies
                    - openIncidents
                    - intents
                    - metrics
            history:
              type: object
              description: >-
                Equity history, built from the samples written once a minute for
                each account and grouped into buckets (`basis`
                `minute_bucket_samples`). A `state` of `unavailable` carries a
                `reason`, `scope_not_totalable` or `no_samples_in_window`, and
                no points. A point is complete only when every account in scope
                that existed by then was sampled in its bucket exactly once;
                otherwise its balance and equity are null and `reason` says why
                (`accounts_not_sampled`, `reset_in_bucket` or
                `equity_unmarked`). `skewMs` is the time between the first and
                last sample in the bucket.
            completeness:
              type: object
              additionalProperties: false
              properties:
                complete:
                  type: boolean
                reasons:
                  type: array
                  items:
                    type: string
                    enum:
                      - account_limit_exceeded
                      - accounts_excluded
                      - mixed_currency
                      - account_data_incomplete
                      - mark_unavailable
              required:
                - complete
                - reasons
          required:
            - venueId
            - environment
            - asOf
            - snapshot
            - currency
            - currencies
            - scope
            - markPolicy
            - totals
            - counts
            - grossNotional
            - exposure
            - positions
            - orders
            - accounts
            - hedging
            - history
            - completeness
      required:
        - risk
      example:
        risk:
          venueId: 00000000-0000-0000-0000-000000000001
          environment: sandbox
          asOf: '2026-09-14T12:00:00.000Z'
          snapshot:
            basis: single_transaction
            isolation: repeatable_read
          currency: USD
          currencies:
            - USD
          scope:
            listed: 2
            included: 2
            excluded: []
            limit: 500
            limitExceeded: false
          markPolicy:
            maxAgeMs: 10000
            notional: quantity_times_mark_times_multiplier
            valuationCurrency: account_currency
          totals:
            balance: 99997
            equity: 101497
            unrealizedPnl: 1500
            grossRealizedPnl: 0
            fees: 3
            netTradingPnl: -3
            balanceAdjustments: 0
          counts:
            openPositions: 2
            workingOrders: 0
            accountsWithPositions: 2
            halted: 0
            breaches: 0
            incompleteAccounts: 0
            unmarkedPositions: 0
          grossNotional: 903000
          exposure:
            - instrument: ES
              mark: 6020
              multiplier: 50
              long: 2
              short: 1
              net: 1
              gross: 3
              accounts: 2
              longNotional: 602000
              shortNotional: 301000
              netNotional: 301000
              grossNotional: 903000
              unrealizedPnl: 1500
              dataStatus: marked
              hedges: []
          positions:
            - accountId: acct:EVAL-7C21A9
              accountNumber: EVAL-7C21A9
              email: trader@example.com
              groupId: desk-a
              instrument: ES
              positionId: null
              side: long
              quantity: 2
              averagePrice: 6000
              mark: 6020
              multiplier: 50
              notional: 602000
              unrealizedPnl: 2000
              realizedPnl: 0
              dataStatus: marked
          orders: []
          accounts: []
          hedging:
            state: unavailable
            reason: hedging_not_configured
          history:
            basis: minute_bucket_samples
            intervalMinutes: 5
            windowMinutes: 1440
            since: '2026-09-14T12:00:00.000Z'
            until: '2026-09-14T12:00:00.000Z'
            state: unavailable
            reason: no_samples_in_window
            points: []
          completeness:
            complete: true
            reasons: []
    ErrorResponse:
      type: object
      description: >-
        The body of every error response. It always carries `error`, an English
        sentence you can show. A refused trading request also carries `code`,
        one of the refusal codes, and `params`, the details of that refusal.
        Translate by `code` and `params`, and show a generic message for a code
        you don't recognize. Other errors may carry a `code` of their own.
      properties:
        error:
          type: string
          description: What went wrong, as an English sentence.
        code:
          type: string
          description: >-
            A stable machine code. On a refused trading request, it is one of
            the refusal codes.
        params:
          type: object
          description: >-
            The details of the refusal named by `code`, on a refused trading
            request.
      required:
        - error
      example:
        error: invalid_instrument
  securitySchemes:
    venueOperatorKey:
      type: http
      scheme: bearer
      description: >-
        The Venue key (`trdrs_vk_sandbox_…` or `trdrs_vk_production_…`), in
        preview. It belongs to one venue in one environment and carries the
        scopes it was created with. The venue's verified owner creates it while
        signed in, and it works only on the `/api/partner/venues/{venueId}`
        routes. A `trdrs_sk_…` key can't be used in its place. It never lets you
        act as a trader, sign in or manage keys. Keep it on your server.

````