> ## 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 the venue risk book

> Preview: served on the sandbox to every venue; production availability is arranged when a venue qualifies. Trading API keys and Partner keys do not authorize these routes. Requires account:read through a verified operator session; the hedging section additionally needs hedge:read and otherwise reads unavailable. Every paper-book customer account the venue issued, up to 500, is read inside one repeatable-read transaction, so totals, exposure, positions and working orders describe one instant (asOf). Totals are stated only when every included account answered in one currency; a total a missing mark would change is null, never partial. Notional is quantity times a mark no older than markPolicy.maxAgeMs times the contract multiplier, in the account currency. Provider-held customer accounts keep their book at the provider and are listed under scope.excluded. Hedge targets are the hedge engine's own figures at their calculatedAt and are listed beside the customer exposure for the identical instrument id, never netted into it. The history aggregates the equity samples written once per minute per account.



## OpenAPI

````yaml /partner-platform/openapi.json get /api/operator/venues/{venueId}/risk
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: Venue platform preview
    description: >-
      The venue routes, in preview: a venue’s providers, instruments,
      conditions, groups, routes, stages, level 2, keys, accounts, usage,
      balance receipts and webhooks. Served on the sandbox to every venue;
      production availability is arranged when a venue qualifies. Every route
      documented here under /api/partner/ takes a Venue key and is also served
      under /api/operator/ to a verified owner session, by the same router with
      a different credential: a browser never holds a Venue key, so the back
      office reaches the identical checks that way. Additive-only from here; the
      Legacy Partner API routes remain unchanged.
  - name: Market data
    description: >-
      Symbol search and resolution, OHLCV history, quote snapshots, the server
      clock, and the live bar stream. Crypto rides each provider’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 Trading 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 routes: 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 account at a provider (or opens their own Demo
      on the paper book) in the app, and a venue issues accounts on the paper
      book (Venue platform → Issue an account into a group; the Legacy Partner
      API’s Create evaluation accounts does the same) or pre-registers accounts
      at a provider through Connect (Pre-register a trader’s account). Account
      state and the durable ledgers: balances, positions, working orders, fills,
      P&L history, and the live account stream.
  - name: Connect
    description: >-
      Connect is the account picker a trader opens, in our app or embedded on a
      firm’s site: the built-in providers, plus every listed venue. These three
      routes are how a firm PRE-FILLS it. You tell us 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 has not been used. Pre-registrations
      expire after 30 days; repeating one refreshes it. These routes take the
      Partner key and are Connect’s own; they are not part of the Legacy Partner
      API. The end-to-end flow is **[Quick Start](/docs/guides/quick-start)**.
  - name: Firm accounts (legacy)
    description: >-
      Legacy Partner API. Every route in this group has a venue twin under
      `/api/partner/venues/{venueId}/accounts…`, reached with a Venue key and a
      named scope, and new integrations use those; this group stays for firms
      that predate venues, and the same operation runs behind both. Evaluation
      accounts your firm issues on the paper book, through your Partner key.
      Connect pre-registers accounts that exist at a provider; these routes
      create and manage accounts on the paper book: 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: Billing
    description: >-
      Legacy Partner API, per firm. What your firm is billed for in a month,
      computed from the execution ledger, and the accounts behind the number.
      The venue platform will carry per-venue usage; until it does these two
      routes answer the Partner key.
  - name: Webhooks
    description: >-
      Legacy Partner API, being replaced by venue-scoped events, which are not
      built yet; this is the one job a venue-only backend still needs a Partner
      key for, and nothing here is removed until they are. 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 every venue alike: the account-registration
      (`registration.*`) events fire wherever Connect does, and the account
      events fire where the prop engine runs.
  - name: Challenges
    description: >-
      Legacy Partner API, being replaced by stage rules on the venue, which
      carry the firm’s half of this; the trader’s enroll flow has not moved yet.
      The prop evaluation routes: 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 admin half of this is deliberately not
      documented here. It is platform administration, not licensed API.
paths:
  /api/operator/venues/{venueId}/risk:
    get:
      tags:
        - Venue platform preview
      summary: Read the venue risk book
      description: >-
        Preview: served on the sandbox to every venue; production availability
        is arranged when a venue qualifies. Trading API keys and Partner keys do
        not authorize these routes. Requires account:read through a verified
        operator session; the hedging section additionally needs hedge:read and
        otherwise reads unavailable. Every paper-book customer account the venue
        issued, up to 500, is read inside one repeatable-read transaction, so
        totals, exposure, positions and working orders describe one instant
        (asOf). Totals are stated only when every included account answered in
        one currency; a total a missing mark would change is null, never
        partial. Notional is quantity times a mark no older than
        markPolicy.maxAgeMs times the contract multiplier, in the account
        currency. Provider-held customer accounts keep their book at the
        provider and are listed under scope.excluded. Hedge targets are the
        hedge engine's own figures at their calculatedAt and are listed beside
        the customer exposure for the identical instrument id, never netted into
        it. The history aggregates the equity samples written once per minute
        per account.
      parameters:
        - name: venueId
          in: path
          required: true
          schema:
            type: string
            format: uuid
        - name: timeZone
          in: query
          required: false
          schema:
            type: string
        - name: rolloverHour
          in: query
          required: false
          schema:
            type: integer
            minimum: 0
            maximum: 23
        - name: historyWindow
          in: query
          required: false
          schema:
            type: integer
            minimum: 60
            maximum: 10080
            default: 1440
          description: Minutes of history to return.
        - name: historyInterval
          in: query
          required: false
          schema:
            type: integer
            enum:
              - 1
              - 5
              - 15
              - 60
            default: 5
          description: >-
            Minutes between points; window divided by interval may not exceed
            1000.
      responses:
        '200':
          description: 'Scoped result. Cache-Control: no-store.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VenueRiskResponse'
        '400':
          description: Invalid input, cursor or required request/version header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Required credential missing or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: >-
            Verified identity, current owner membership or required scope
            missing.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Disabled feature, unavailable resource or wrong venue/environment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Changed idempotent request or stale version.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '413':
          description: Request exceeds the bounded body size.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '415':
          description: JSON body required.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Service or credential vault unavailable; no success is implied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - sessionCookie: []
      x-codeSamples:
        - lang: javascript
          label: TypeScript
          source: >-
            // First-party cookie auth: this runs in a signed-in trdrs session,
            not under an API key.

            const res = await
            fetch('https://app.trdrs.co/api/operator/venues/{venueId}/risk', {
              credentials: 'include',
            })

            const data = await res.json()
        - lang: shell
          label: cURL
          source: |-
            curl 'https://app.trdrs.co/api/operator/venues/{venueId}/risk' \
              -b "session=$TRDRS_SESSION"
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
            markPolicy:
              type: object
              additionalProperties: false
              properties:
                maxAgeMs:
                  type: integer
                notional:
                  const: quantity_times_mark_times_multiplier
                valuationCurrency:
                  const: account_currency
              required:
                - maxAgeMs
                - notional
                - valuationCurrency
            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
            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: >-
                            Exact base-ten decimal string, at most 18 fractional
                            digits. No exponent notation or binary
                            floating-point conversion.
                        targetQuantity:
                          type: string
                          description: >-
                            Exact base-ten decimal string, at most 18 fractional
                            digits. No exponent notation or binary
                            floating-point conversion.
                        confirmedQuantity:
                          type: string
                          description: >-
                            Exact base-ten decimal string, at most 18 fractional
                            digits. No exponent notation or binary
                            floating-point conversion.
                        pendingQuantity:
                          type: string
                          description: >-
                            Exact base-ten decimal string, at most 18 fractional
                            digits. No exponent notation or binary
                            floating-point conversion.
                        residualQuantity:
                          type: string
                          description: >-
                            Exact base-ten decimal string, at most 18 fractional
                            digits. No exponent notation or binary
                            floating-point conversion.
                        markPrice:
                          type: string
                          description: >-
                            Exact base-ten decimal string, at most 18 fractional
                            digits. No exponent notation or binary
                            floating-point conversion.
                        calculatedAt:
                          type: string
                          format: date-time
                      required:
                        - groupId
                        - instrumentId
                        - sourceQuantity
                        - targetQuantity
                        - confirmedQuantity
                        - pendingQuantity
                        - residualQuantity
                        - markPrice
                        - calculatedAt
                required:
                  - instrument
                  - mark
                  - multiplier
                  - long
                  - short
                  - net
                  - gross
                  - accounts
                  - longNotional
                  - shortNotional
                  - netNotional
                  - grossNotional
                  - unrealizedPnl
                  - dataStatus
                  - hedges
            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
                  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
                  - 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
                  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
                  - 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: >-
                              Exact base-ten decimal string, at most 18
                              fractional digits. No exponent notation or binary
                              floating-point conversion.
                          targetQuantity:
                            type: string
                            description: >-
                              Exact base-ten decimal string, at most 18
                              fractional digits. No exponent notation or binary
                              floating-point conversion.
                          confirmedQuantity:
                            type: string
                            description: >-
                              Exact base-ten decimal string, at most 18
                              fractional digits. No exponent notation or binary
                              floating-point conversion.
                          pendingQuantity:
                            type: string
                            description: >-
                              Exact base-ten decimal string, at most 18
                              fractional digits. No exponent notation or binary
                              floating-point conversion.
                          residualQuantity:
                            type: string
                            description: >-
                              Exact base-ten decimal string, at most 18
                              fractional digits. No exponent notation or binary
                              floating-point conversion.
                          markPrice:
                            type: string
                            description: >-
                              Exact base-ten decimal string, at most 18
                              fractional digits. No exponent notation or binary
                              floating-point conversion.
                          calculatedAt:
                            type: string
                            format: date-time
                        required:
                          - groupId
                          - instrumentId
                          - sourceQuantity
                          - targetQuantity
                          - confirmedQuantity
                          - pendingQuantity
                          - residualQuantity
                          - markPrice
                          - calculatedAt
                    policies:
                      type: array
                      items:
                        type: object
                        additionalProperties: false
                        properties:
                          id:
                            type: string
                            format: uuid
                          groupId:
                            type: string
                          name:
                            type: string
                          ratio:
                            type: string
                            description: >-
                              Exact base-ten decimal string, at most 18
                              fractional digits. No exponent notation or binary
                              floating-point conversion.
                          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: >-
                basis minute_bucket_samples. state unavailable carries 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 that minute was sampled in the bucket exactly once; otherwise
                balance and equity are null and reason names why
                (accounts_not_sampled, reset_in_bucket, equity_unmarked). skewMs
                is the spread 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
              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
      properties:
        error:
          type: string
      required:
        - error
      example:
        error: invalid_instrument
  securitySchemes:
    sessionCookie:
      type: apiKey
      in: cookie
      name: session
      description: >-
        The signed session cookie of a logged-in trdrs user. First-party/browser
        only; an API key cannot reach a route secured this way.

````