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

# List trades

> The one trade history. Projections: scope=workspace (default) reads the workspace's taker orders and venue trades; a caller not allowed to view the workspace's compliance records reads only their own, whatever the scope. scope=mine reads the caller's own (a member session only). scope=umbrella reads a broker's clients' orders with each client category's field visibility (a member session allowed to view client compliance records). perspective=maker reads an LP workspace's fills with pseudonymised counterparties (a member session allowed to view settlements); with settlementStage or minAgeSeconds, its unsettled orders by stage (a member session allowed to view bilateral documents). The default perspective is taker in every workspace. Every row carries tradeId, kind (order or venueTrade) and projection. Page with limit and cursor; format=csv returns the same filtered rows. Required API-key scope: `trades_read`; CSV is a member session only.



## OpenAPI

````yaml api-reference/openapi.json GET /api/v1/workspaces/{workspaceId}/trades
openapi: 3.1.0
info:
  description: >-
    TetraFi is an API for institutional trading across on-chain and off-chain
    venues: discover assets, request quotes, place an order by quote id and read
    its status. API keys sign every request.


    Asset-pair quotes: every tagged union is tagged by `kind`; only the outcome
    of `/prices` rows and `sources[]` entries is tagged by `status`.
  title: TetraFi API
  version: 1.0.0-beta.1
servers:
  - description: Production. Uses real assets and venue accounts.
    url: https://api.tetrafi.io
  - description: >-
      Shared development sandbox backed by the dev testnet chain registry. Use
      testnet assets and your workspace's sandbox/testnet venue accounts; makers
      are not simulated. Credentials and workspaces are environment-specific.
    url: https://api-dev.tetrafi.io
security:
  - api_key: []
tags:
  - description: >-
      Exchange service-account credentials for a token, and read the credential
      you are calling with: its identity, scopes and rate limits.
    name: auth
  - description: >-
      Discover the assets, chains and venues you can trade, and read or stream
      their indicative prices.
    name: trading
  - description: >-
      Request firm or indicative quotes for an asset pair from every eligible
      venue, requote one, and read a quote request again.
    name: quotes
  - description: >-
      Place an order from a quote you hold, follow its status, and cancel it
      before it is sent to a venue.
    name: orders
  - description: >-
      Your trade history: every order and venue trade, with its settlement and
      settlement obligations.
    name: trades
  - description: >-
      Your venue accounts' settlement windows, obligations, movements and
      schedules, and the plan of what is due across them.
    name: settlements
  - description: Balances across the workspace's wallets and venue accounts.
    name: treasury
  - description: >-
      One venue account's balances, deposit instructions and history, credit and
      ledger.
    name: venue-accounts
  - description: >-
      The workspace's venue accounts, with where their funds are held and each
      venue's key state.
    name: venue-enablements
  - description: >-
      Register endpoints for signed event deliveries, rotate their secrets, send
      test deliveries and read the delivery log.
    name: webhooks
  - description: >-
      The workspace's verification state, the capabilities it allows, and its
      fee schedule.
    name: workspaces
  - description: >-
      Read up to 20 resources in one request, each answered exactly as its own
      GET.
    name: batch
paths:
  /api/v1/workspaces/{workspaceId}/trades:
    get:
      tags:
        - trades
      summary: List trades
      description: >-
        The one trade history. Projections: scope=workspace (default) reads the
        workspace's taker orders and venue trades; a caller not allowed to view
        the workspace's compliance records reads only their own, whatever the
        scope. scope=mine reads the caller's own (a member session only).
        scope=umbrella reads a broker's clients' orders with each client
        category's field visibility (a member session allowed to view client
        compliance records). perspective=maker reads an LP workspace's fills
        with pseudonymised counterparties (a member session allowed to view
        settlements); with settlementStage or minAgeSeconds, its unsettled
        orders by stage (a member session allowed to view bilateral documents).
        The default perspective is taker in every workspace. Every row carries
        tradeId, kind (order or venueTrade) and projection. Page with limit and
        cursor; format=csv returns the same filtered rows. Required API-key
        scope: `trades_read`; CSV is a member session only.
      operationId: list_workspace_trades
      parameters:
        - $ref: '#/components/parameters/WorkspaceId'
        - description: Workspace ID
          in: path
          name: workspaceId
          required: true
          schema:
            type: string
        - description: >-
            mine, workspace or umbrella. Default: workspace. umbrella needs a
            broker

            workspace and permission to view its clients' compliance records;
            mine needs a

            member session.
          in: query
          name: scope
          required: false
          schema:
            $ref: '#/components/schemas/TradeScope'
        - description: >-
            taker (default, in every workspace) or maker. maker needs an LP
            workspace and

            permission to view settlements.
          in: query
          name: perspective
          required: false
          schema:
            $ref: '#/components/schemas/TradePerspective'
        - description: >-
            all, order or venueTrade. Default: all for taker and umbrella; for
            maker the

            fills default (on-chain orders); umbrella has orders only.
          in: query
          name: kind
          required: false
          schema:
            $ref: '#/components/schemas/TradeKindFilter'
        - description: Settlement status filter, as the projection names it.
          in: query
          name: status
          required: false
          schema:
            type: string
        - description: >-
            Counterparty: the LP's catalogue venue id, the row's `lpVenueId`
            (taker; a venue

            trade matches its execution type's venue) or an LP workspace UUID
            (orders only), the client workspace (umbrella) or the

            taker (maker).
          in: query
          name: counterpartyId
          required: false
          schema:
            type: string
        - description: >-
            Exact execution-type identity: the maker of an order (taker), or one
            of the LP's own venues (maker).
          in: query
          name: venueId
          required: false
          schema:
            type: string
        - description: >-
            The member or client who placed the order: member (taker), user id
            (umbrella),

            entity (maker).
          in: query
          name: client
          required: false
          schema:
            type: string
        - description: Settlement stage of an unsettled order (maker only).
          in: query
          name: settlementStage
          required: false
          schema:
            type: string
        - description: >-
            Only orders at least this many seconds old (maker only, with
            settlementStage).
          in: query
          name: minAgeSeconds
          required: false
          schema:
            format: int64
            type: integer
        - description: 'Placed at or after this RFC 3339 instant (umbrella: a UTC midnight).'
          in: query
          name: from
          required: false
          schema:
            format: date-time
            type: string
        - description: >-
            Placed at or before this RFC 3339 instant (umbrella: a UTC
            midnight).
          in: query
          name: to
          required: false
          schema:
            format: date-time
            type: string
        - description: Page size; the projection's own bounds apply (default 25).
          in: query
          name: limit
          required: false
          schema:
            format: int32
            minimum: 0
            type: integer
        - description: The nextCursor of the previous page.
          in: query
          name: cursor
          required: false
          schema:
            type: string
        - description: >-
            json (default) or csv. csv returns the projection's export of the
            same filters.
          in: query
          name: format
          required: false
          schema:
            $ref: '#/components/schemas/TradesFormat'
        - description: >-
            Taker: comma-separated lifecycle buckets (inProgress, completed,
            failed, refunded, unknown). Maker: the fills lifecycle filter
          in: query
          name: lifecycle
          required: false
          schema:
            type: string
        - description: 'Taker: taker, support, counterparty or none'
          in: query
          name: nextActor
          required: false
          schema:
            type: string
        - description: 'Taker: either side''s display asset symbol (case-insensitive)'
          in: query
          name: asset
          required: false
          schema:
            type: string
        - description: Corridor (source-dest)
          in: query
          name: corridor
          required: false
          schema:
            type: string
        - description: 'Taker: linked wallet id'
          in: query
          name: walletId
          required: false
          schema:
            type: string
        - description: 'Taker: wallet address (custody vault or linked wallet)'
          in: query
          name: address
          required: false
          schema:
            type: string
        - description: 'The row''s routingPath type: direct or via_broker'
          in: query
          name: routingPath
          required: false
          schema:
            type: string
        - description: Minimum USD notional
          in: query
          name: amountMin
          required: false
          schema:
            format: double
            type: number
        - description: Maximum USD notional
          in: query
          name: amountMax
          required: false
          schema:
            format: double
            type: number
        - description: >-
            field (ascending) or -field (descending). Every projection:
            createdAt. Taker: amountUsd, status, corridor, counterparty, member
            (workspace scope), orderId, settlementSpeedMs. Umbrella: amountUsd.
            Maker: status, orderId. A cursor pages only the order it was
            returned for
          in: query
          name: sort
          required: false
          schema:
            type: string
        - description: >-
            Comma-separated top-level fields of each row to return; tradeId,
            kind, projection, id and status are always kept. JSON only
          in: query
          name: fields
          required: false
          schema:
            type: string
        - description: >-
            Related objects to expand into `included`, comma-separated:
            `settlement`, each listed trade's settlement by `tradeId`, as `GET
            …/trades/{tradeId}/settlement` answers this caller in the row's
            perspective, or null with that read's refusal. Unknown relation 400
            `INCLUDE_UNKNOWN`, malformed or repeated 400 `INCLUDE_INVALID`; not
            on a signed API-key request or with format=csv
          in: query
          name: include
          required: false
          schema:
            type: string
        - description: 'Taker: only orders whose nextAction is present'
          in: query
          name: actionRequired
          required: false
          schema:
            type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TradeList'
            text/csv:
              schema:
                type: string
          description: >-
            One page of trades; with format=csv, the projection's CSV of the
            same filters
          headers:
            Deprecation:
              description: >-
                Present when this operation is deprecated: an RFC 9745
                structured date, for example @1792443399. Absence makes no
                deprecation claim.
              schema:
                type: string
            Link:
              description: >-
                When deprecation applies, links to the deprecation notice with
                rel=deprecation; other link relations may also be sent.
              schema:
                type: string
            RateLimit:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.1 structured
                dictionary, for example `limit=100, remaining=41, reset=19`.
                Remaining is the admitted decision's headroom; reset is whole
                seconds until quota next becomes available, not an epoch or a
                promise of a full burst refill. On a limiter's 429 remaining is
                0 and reset equals Retry-After. Accepted key, route and
                per-address policies are compared by lowest remaining, then
                longest reset. A venue refusal without a known quota makes no
                rate-limit header claim.
              schema:
                type: string
            RateLimit-Policy:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.5: quota and
                window in seconds, for example `100;w=60`. Sent on every status
                when a finite limiter counted the request. The applicable policy
                closest to exhaustion is reported (section 3.2): lowest
                remaining, then longest reset. On a limiter's 429 this is
                exactly the policy that refused; if a venue discloses no quota,
                the headers are absent.
              schema:
                type: string
            Sunset:
              description: >-
                Present when retirement is scheduled: the HTTP-date after which
                this version may stop being served (RFC 8594).
              schema:
                type: string
            x-request-id:
              description: >-
                The request's id: the caller's valid `X-Request-Id`, or a
                generated UUID v4. Quote it when asking for support.
              schema:
                type: string
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            INVALID_REQUEST naming the parameter in field: an unknown parameter
            or value, a filter the projection cannot apply, a cursor from
            another list, or two names for one filter. VALIDATION_ERROR: a
            malformed filter
          headers:
            Deprecation:
              description: >-
                Present when this operation is deprecated: an RFC 9745
                structured date, for example @1792443399. Absence makes no
                deprecation claim.
              schema:
                type: string
            Link:
              description: >-
                When deprecation applies, links to the deprecation notice with
                rel=deprecation; other link relations may also be sent.
              schema:
                type: string
            RateLimit:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.1 structured
                dictionary, for example `limit=100, remaining=41, reset=19`.
                Remaining is the admitted decision's headroom; reset is whole
                seconds until quota next becomes available, not an epoch or a
                promise of a full burst refill. On a limiter's 429 remaining is
                0 and reset equals Retry-After. Accepted key, route and
                per-address policies are compared by lowest remaining, then
                longest reset. A venue refusal without a known quota makes no
                rate-limit header claim.
              schema:
                type: string
            RateLimit-Policy:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.5: quota and
                window in seconds, for example `100;w=60`. Sent on every status
                when a finite limiter counted the request. The applicable policy
                closest to exhaustion is reported (section 3.2): lowest
                remaining, then longest reset. On a limiter's 429 this is
                exactly the policy that refused; if a venue discloses no quota,
                the headers are absent.
              schema:
                type: string
            Sunset:
              description: >-
                Present when retirement is scheduled: the HTTP-date after which
                this version may stop being served (RFC 8594).
              schema:
                type: string
            x-request-id:
              description: >-
                The request's id: the caller's valid `X-Request-Id`, or a
                generated UUID v4. Quote it when asking for support.
              schema:
                type: string
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Authentication is missing or invalid.
          headers:
            Deprecation:
              description: >-
                Present when this operation is deprecated: an RFC 9745
                structured date, for example @1792443399. Absence makes no
                deprecation claim.
              schema:
                type: string
            Link:
              description: >-
                When deprecation applies, links to the deprecation notice with
                rel=deprecation; other link relations may also be sent.
              schema:
                type: string
            Sunset:
              description: >-
                Present when retirement is scheduled: the HTTP-date after which
                this version may stop being served (RFC 8594).
              schema:
                type: string
            WWW-Authenticate:
              description: >-
                Always sent on 401: `api_key, Bearer`, naming the `api_key`
                security scheme (X-API-Key and its HMAC request-signing
                contract) and the `bearer_auth` security scheme's HTTP scheme
                (Bearer). A presented bearer token adds `error="invalid_token"`
                to the Bearer challenge (RFC 6750 section 3).
              schema:
                type: string
            x-request-id:
              description: >-
                The request's id: the caller's valid `X-Request-Id`, or a
                generated UUID v4. Quote it when asking for support.
              schema:
                type: string
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            scope=mine with an API key; umbrella without permission to view the
            broker's client compliance records; maker outside an LP workspace or
            without permission to view settlements; the umbrella or maker
            projection with an API key (JWT_REQUIRED); an API key without
            trades_read
          headers:
            Deprecation:
              description: >-
                Present when this operation is deprecated: an RFC 9745
                structured date, for example @1792443399. Absence makes no
                deprecation claim.
              schema:
                type: string
            Link:
              description: >-
                When deprecation applies, links to the deprecation notice with
                rel=deprecation; other link relations may also be sent.
              schema:
                type: string
            RateLimit:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.1 structured
                dictionary, for example `limit=100, remaining=41, reset=19`.
                Remaining is the admitted decision's headroom; reset is whole
                seconds until quota next becomes available, not an epoch or a
                promise of a full burst refill. On a limiter's 429 remaining is
                0 and reset equals Retry-After. Accepted key, route and
                per-address policies are compared by lowest remaining, then
                longest reset. A venue refusal without a known quota makes no
                rate-limit header claim.
              schema:
                type: string
            RateLimit-Policy:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.5: quota and
                window in seconds, for example `100;w=60`. Sent on every status
                when a finite limiter counted the request. The applicable policy
                closest to exhaustion is reported (section 3.2): lowest
                remaining, then longest reset. On a limiter's 429 this is
                exactly the policy that refused; if a venue discloses no quota,
                the headers are absent.
              schema:
                type: string
            Sunset:
              description: >-
                Present when retirement is scheduled: the HTTP-date after which
                this version may stop being served (RFC 8594).
              schema:
                type: string
            x-request-id:
              description: >-
                The request's id: the caller's valid `X-Request-Id`, or a
                generated UUID v4. Quote it when asking for support.
              schema:
                type: string
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            WORKSPACE_NOT_FOUND: the path names a workspace other than the
            caller's
          headers:
            Deprecation:
              description: >-
                Present when this operation is deprecated: an RFC 9745
                structured date, for example @1792443399. Absence makes no
                deprecation claim.
              schema:
                type: string
            Link:
              description: >-
                When deprecation applies, links to the deprecation notice with
                rel=deprecation; other link relations may also be sent.
              schema:
                type: string
            RateLimit:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.1 structured
                dictionary, for example `limit=100, remaining=41, reset=19`.
                Remaining is the admitted decision's headroom; reset is whole
                seconds until quota next becomes available, not an epoch or a
                promise of a full burst refill. On a limiter's 429 remaining is
                0 and reset equals Retry-After. Accepted key, route and
                per-address policies are compared by lowest remaining, then
                longest reset. A venue refusal without a known quota makes no
                rate-limit header claim.
              schema:
                type: string
            RateLimit-Policy:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.5: quota and
                window in seconds, for example `100;w=60`. Sent on every status
                when a finite limiter counted the request. The applicable policy
                closest to exhaustion is reported (section 3.2): lowest
                remaining, then longest reset. On a limiter's 429 this is
                exactly the policy that refused; if a venue discloses no quota,
                the headers are absent.
              schema:
                type: string
            Sunset:
              description: >-
                Present when retirement is scheduled: the HTTP-date after which
                this version may stop being served (RFC 8594).
              schema:
                type: string
            x-request-id:
              description: >-
                The request's id: the caller's valid `X-Request-Id`, or a
                generated UUID v4. Quote it when asking for support.
              schema:
                type: string
        '408':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: The request timed out before a response was ready.
          headers:
            Deprecation:
              description: >-
                Present when this operation is deprecated: an RFC 9745
                structured date, for example @1792443399. Absence makes no
                deprecation claim.
              schema:
                type: string
            Link:
              description: >-
                When deprecation applies, links to the deprecation notice with
                rel=deprecation; other link relations may also be sent.
              schema:
                type: string
            RateLimit:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.1 structured
                dictionary, for example `limit=100, remaining=41, reset=19`.
                Remaining is the admitted decision's headroom; reset is whole
                seconds until quota next becomes available, not an epoch or a
                promise of a full burst refill. On a limiter's 429 remaining is
                0 and reset equals Retry-After. Accepted key, route and
                per-address policies are compared by lowest remaining, then
                longest reset. A venue refusal without a known quota makes no
                rate-limit header claim.
              schema:
                type: string
            RateLimit-Policy:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.5: quota and
                window in seconds, for example `100;w=60`. Sent on every status
                when a finite limiter counted the request. The applicable policy
                closest to exhaustion is reported (section 3.2): lowest
                remaining, then longest reset. On a limiter's 429 this is
                exactly the policy that refused; if a venue discloses no quota,
                the headers are absent.
              schema:
                type: string
            Sunset:
              description: >-
                Present when retirement is scheduled: the HTTP-date after which
                this version may stop being served (RFC 8594).
              schema:
                type: string
            x-request-id:
              description: >-
                The request's id: the caller's valid `X-Request-Id`, or a
                generated UUID v4. Quote it when asking for support.
              schema:
                type: string
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            Too many requests. Wait the number of seconds in `Retry-After`
            before retrying.
          headers:
            Deprecation:
              description: >-
                Present when this operation is deprecated: an RFC 9745
                structured date, for example @1792443399. Absence makes no
                deprecation claim.
              schema:
                type: string
            Link:
              description: >-
                When deprecation applies, links to the deprecation notice with
                rel=deprecation; other link relations may also be sent.
              schema:
                type: string
            RateLimit:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.1 structured
                dictionary, for example `limit=100, remaining=41, reset=19`.
                Remaining is the admitted decision's headroom; reset is whole
                seconds until quota next becomes available, not an epoch or a
                promise of a full burst refill. On a limiter's 429 remaining is
                0 and reset equals Retry-After. Accepted key, route and
                per-address policies are compared by lowest remaining, then
                longest reset. A venue refusal without a known quota makes no
                rate-limit header claim.
              schema:
                type: string
            RateLimit-Policy:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.5: quota and
                window in seconds, for example `100;w=60`. Sent on every status
                when a finite limiter counted the request. The applicable policy
                closest to exhaustion is reported (section 3.2): lowest
                remaining, then longest reset. On a limiter's 429 this is
                exactly the policy that refused; if a venue discloses no quota,
                the headers are absent.
              schema:
                type: string
            Retry-After:
              description: >-
                Whole seconds to wait before retrying. Always sent on 429; sent
                on 503 when the wait is known. `details.retryAfter` carries the
                same wait as an ISO 8601 duration.
              schema:
                minimum: 0
                type: integer
            Sunset:
              description: >-
                Present when retirement is scheduled: the HTTP-date after which
                this version may stop being served (RFC 8594).
              schema:
                type: string
            x-request-id:
              description: >-
                The request's id: the caller's valid `X-Request-Id`, or a
                generated UUID v4. Quote it when asking for support.
              schema:
                type: string
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Something went wrong on our side.
          headers:
            Deprecation:
              description: >-
                Present when this operation is deprecated: an RFC 9745
                structured date, for example @1792443399. Absence makes no
                deprecation claim.
              schema:
                type: string
            Link:
              description: >-
                When deprecation applies, links to the deprecation notice with
                rel=deprecation; other link relations may also be sent.
              schema:
                type: string
            RateLimit:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.1 structured
                dictionary, for example `limit=100, remaining=41, reset=19`.
                Remaining is the admitted decision's headroom; reset is whole
                seconds until quota next becomes available, not an epoch or a
                promise of a full burst refill. On a limiter's 429 remaining is
                0 and reset equals Retry-After. Accepted key, route and
                per-address policies are compared by lowest remaining, then
                longest reset. A venue refusal without a known quota makes no
                rate-limit header claim.
              schema:
                type: string
            RateLimit-Policy:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.5: quota and
                window in seconds, for example `100;w=60`. Sent on every status
                when a finite limiter counted the request. The applicable policy
                closest to exhaustion is reported (section 3.2): lowest
                remaining, then longest reset. On a limiter's 429 this is
                exactly the policy that refused; if a venue discloses no quota,
                the headers are absent.
              schema:
                type: string
            Sunset:
              description: >-
                Present when retirement is scheduled: the HTTP-date after which
                this version may stop being served (RFC 8594).
              schema:
                type: string
            x-request-id:
              description: >-
                The request's id: the caller's valid `X-Request-Id`, or a
                generated UUID v4. Quote it when asking for support.
              schema:
                type: string
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            TRADE_PROJECTION_UNAVAILABLE: the projection's owner is not
            installed on this stack
          headers:
            Deprecation:
              description: >-
                Present when this operation is deprecated: an RFC 9745
                structured date, for example @1792443399. Absence makes no
                deprecation claim.
              schema:
                type: string
            Link:
              description: >-
                When deprecation applies, links to the deprecation notice with
                rel=deprecation; other link relations may also be sent.
              schema:
                type: string
            RateLimit:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.1 structured
                dictionary, for example `limit=100, remaining=41, reset=19`.
                Remaining is the admitted decision's headroom; reset is whole
                seconds until quota next becomes available, not an epoch or a
                promise of a full burst refill. On a limiter's 429 remaining is
                0 and reset equals Retry-After. Accepted key, route and
                per-address policies are compared by lowest remaining, then
                longest reset. A venue refusal without a known quota makes no
                rate-limit header claim.
              schema:
                type: string
            RateLimit-Policy:
              description: >-
                draft-ietf-httpapi-ratelimit-headers-07 section 3.5: quota and
                window in seconds, for example `100;w=60`. Sent on every status
                when a finite limiter counted the request. The applicable policy
                closest to exhaustion is reported (section 3.2): lowest
                remaining, then longest reset. On a limiter's 429 this is
                exactly the policy that refused; if a venue discloses no quota,
                the headers are absent.
              schema:
                type: string
            Retry-After:
              description: >-
                Whole seconds to wait before retrying. Always sent on 429; sent
                on 503 when the wait is known. `details.retryAfter` carries the
                same wait as an ISO 8601 duration.
              schema:
                minimum: 0
                type: integer
            Sunset:
              description: >-
                Present when retirement is scheduled: the HTTP-date after which
                this version may stop being served (RFC 8594).
              schema:
                type: string
            x-request-id:
              description: >-
                The request's id: the caller's valid `X-Request-Id`, or a
                generated UUID v4. Quote it when asking for support.
              schema:
                type: string
      security:
        - bearer_auth:
            - trades_read
        - api_key:
            - trades_read
components:
  parameters:
    WorkspaceId:
      description: >-
        The workspace the request acts in. An API key bound to a workspace
        implies it: omit the header, or send that same id (another id answers
        403 WORKSPACE_SCOPE_MISMATCH). A member session must send it (400
        MISSING_WORKSPACE without it).
      in: header
      name: X-Workspace-Id
      required: false
      schema:
        format: uuid
        type: string
  schemas:
    TradeScope:
      description: Whose rows the list reads.
      enum:
        - mine
        - workspace
        - umbrella
      type: string
    TradePerspective:
      description: Which side of the trade the workspace was on.
      enum:
        - taker
        - maker
      type: string
    TradeKindFilter:
      description: Explicit population selection, not an unsupported-filter exclusion.
      enum:
        - all
        - order
        - venueTrade
      type: string
    TradesFormat:
      description: The representation of the list.
      enum:
        - json
        - csv
      type: string
    TradeList:
      description: One page of the trade history.
      properties:
        coverage:
          description: >-
            Taker projections: kinds whose rows could not be read; the list
            shows the rest.
          items:
            $ref: '#/components/schemas/TradeKindCoverage'
          type: array
        excludedKinds:
          description: >-
            Taker projections: kinds a filter or sort left out, each with the
            parameter it could not apply.
          items:
            $ref: '#/components/schemas/TradeKindExclusion'
          type: array
        included:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/IncludedRelations'
              description: >-
                With `include`: each relation's object per listed trade, keyed
                by `tradeId`, as that

                relation's own GET answers this caller, or null with its
                refusal.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        items:
          items:
            $ref: '#/components/schemas/TradeRecord'
          type: array
        latestTradeAt:
          description: >-
            Newest `createdAt` the caller may see in this projection, ignoring
            every filter.
          format: date-time
          type:
            - string
            - 'null'
        limit:
          description: The page size applied.
          format: int32
          minimum: 0
          type: integer
        makerContext:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/MakerListContext'
              description: >-
                Maker projections only: what the fills or settlement-queue read
                returned about

                the page beyond its rows, unchanged. Absent for every taker
                projection.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        nextCursor:
          description: Pass as `cursor` for the next page; null on the last page.
          type:
            - string
            - 'null'
        scope:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeListScope'
              description: >-
                Taker projections: whose orders the list holds (every workspace
                order, or the caller's own).
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        total:
          description: Rows matching the filters in this projection.
          format: int64
          minimum: 0
          type: integer
      required:
        - items
        - total
        - limit
      type: object
    ApiError:
      description: >-
        The shared refusal body of every integrator operation, including
        edge-layer errors.

        `error` is an open, stable machine-readable code; `docUrl` links to its
        documentation and

        `retryable` says whether an unchanged request may succeed later.
        `message` is for people,

        not matching. `timestamp` is RFC 3339 UTC; optional `requestId` mirrors
        `X-Request-Id`.

        Optional `next` describes recovery and `details` carries code-specific
        information.

        Handle known codes and fall back on the HTTP status for unknown ones.
      properties:
        details:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/ApiErrorDetails'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        docUrl:
          description: Stable documentation for this refusal code.
          type: string
        error:
          description: The machine-readable code, for example `QUOTE_EXPIRED`.
          type: string
        message:
          description: What happened, in words a person can read. Not for matching.
          type: string
        next:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/QuoteNextAction'
              description: >-
                The way forward, when there is one (for example `requote` on an
                expired quote).
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        requestId:
          description: >-
            The request's id, the value the `X-Request-Id` response header
            carries. Quote it when

            asking for support.
          type:
            - string
            - 'null'
        retryable:
          description: >-
            Whether an unchanged request may succeed later, from the error
            catalogue.
          type: boolean
        timestamp:
          description: When the refusal was made, as an RFC 3339 UTC timestamp.
          format: date-time
          type: string
      required:
        - error
        - docUrl
        - retryable
        - message
        - timestamp
      type: object
    TradeKindCoverage:
      description: >-
        A kind whose rows could not be read: the list is partial, never silently
        shorter.
      properties:
        kind:
          $ref: '#/components/schemas/TradeKind'
        state:
          $ref: '#/components/schemas/TradeCoverageState'
      required:
        - kind
        - state
      type: object
    TradeKindExclusion:
      description: >-
        A kind left out of the list because a filter or sort cannot apply to it,
        and which.
      properties:
        filter:
          description: >-
            The query parameter that kind cannot honour (`corridor`, `sortBy`,
            ...).
          type: string
        kind:
          $ref: '#/components/schemas/TradeKind'
      required:
        - kind
        - filter
      type: object
    IncludedRelations:
      additionalProperties:
        additionalProperties:
          $ref: '#/components/schemas/IncludedEntry'
        propertyNames:
          type: string
        type: object
      description: >-
        Relation name -> referenced id -> entry. Only the relations the request
        named appear, each

        with one entry per distinct id the response references through it.
      propertyNames:
        type: string
      type: object
    TradeRecord:
      allOf:
        - description: New values may be added; treat unknown values as other.
          discriminator:
            mapping:
              mine: '#/components/schemas/TradeRecord/allOf/0/oneOf/0'
              workspace: '#/components/schemas/TradeRecord/allOf/0/oneOf/1'
            propertyName: projection
          oneOf:
            - allOf:
                - properties:
                    projection:
                      description: New values may be added; treat unknown values as other.
                      enum:
                        - mine
                      type: string
                      x-extensible-enum: true
                  required:
                    - projection
                  type: object
                - description: New values may be added; treat unknown values as other.
                  discriminator:
                    mapping:
                      order: >-
                        #/components/schemas/TradeRecord/allOf/0/oneOf/0/allOf/1/oneOf/0
                      venueTrade: >-
                        #/components/schemas/TradeRecord/allOf/0/oneOf/0/allOf/1/oneOf/1
                    propertyName: kind
                  oneOf:
                    - allOf:
                        - properties:
                            kind:
                              description: >-
                                New values may be added; treat unknown values as
                                other.
                              enum:
                                - order
                              type: string
                              x-extensible-enum: true
                          required:
                            - kind
                          type: object
                        - $ref: '#/components/schemas/CompanyTradeListItem'
                    - allOf:
                        - properties:
                            kind:
                              description: >-
                                New values may be added; treat unknown values as
                                other.
                              enum:
                                - venueTrade
                              type: string
                              x-extensible-enum: true
                          required:
                            - kind
                          type: object
                        - $ref: '#/components/schemas/CompanyVenueTradeListItem'
                  x-extensible-enum: true
            - allOf:
                - properties:
                    projection:
                      description: New values may be added; treat unknown values as other.
                      enum:
                        - workspace
                      type: string
                      x-extensible-enum: true
                  required:
                    - projection
                  type: object
                - description: New values may be added; treat unknown values as other.
                  discriminator:
                    mapping:
                      order: >-
                        #/components/schemas/TradeRecord/allOf/0/oneOf/1/allOf/1/oneOf/0
                      venueTrade: >-
                        #/components/schemas/TradeRecord/allOf/0/oneOf/1/allOf/1/oneOf/1
                    propertyName: kind
                  oneOf:
                    - allOf:
                        - properties:
                            kind:
                              description: >-
                                New values may be added; treat unknown values as
                                other.
                              enum:
                                - order
                              type: string
                              x-extensible-enum: true
                          required:
                            - kind
                          type: object
                        - $ref: '#/components/schemas/CompanyTradeListItem'
                    - allOf:
                        - properties:
                            kind:
                              description: >-
                                New values may be added; treat unknown values as
                                other.
                              enum:
                                - venueTrade
                              type: string
                              x-extensible-enum: true
                          required:
                            - kind
                          type: object
                        - $ref: '#/components/schemas/CompanyVenueTradeListItem'
                  x-extensible-enum: true
          x-extensible-enum: true
        - properties:
            kind:
              $ref: '#/components/schemas/TradeKind'
            projection:
              $ref: '#/components/schemas/TradeProjection'
            tradeId:
              type: string
          required:
            - tradeId
            - kind
            - projection
          type: object
      description: >-
        One taker trade with tradeId, kind and projection, and the fields of its
        order or venue trade. Session-only maker, settlement and umbrella
        projections are not available to a programmatic credential.
    MakerListContext:
      description: >-
        The maker read's own page context: the fills list's (perspective=maker)
        or the

        settlement queue's (perspective=maker with settlementStage or
        minAgeSeconds).


        New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          fills: '#/components/schemas/MakerListContext/oneOf/0'
          settlement: '#/components/schemas/MakerListContext/oneOf/1'
        propertyName: kind
      oneOf:
        - allOf:
            - $ref: '#/components/schemas/MakerFillsContext'
            - properties:
                kind:
                  description: New values may be added; treat unknown values as other.
                  enum:
                    - fills
                  type: string
                  x-extensible-enum: true
              required:
                - kind
              type: object
        - allOf:
            - $ref: '#/components/schemas/MakerSettlementContext'
            - properties:
                kind:
                  description: New values may be added; treat unknown values as other.
                  enum:
                    - settlement
                  type: string
                  x-extensible-enum: true
              required:
                - kind
              type: object
      x-extensible-enum: true
    TradeListScope:
      description: |-
        The order visibility scope used for the trade list.

        New values may be added; treat unknown values as other.
      enum:
        - workspace
        - own
      type: string
      x-extensible-enum: true
    ApiErrorDetails:
      additionalProperties:
        description: >-
          Any further detail the code carries (for example `stepUpSubject`,
          `balanceShortfall`,

          `minimumAmount`), each named in camelCase.
      description: >-
        The code's detail. Each field is present only on the codes named beside
        it; other codes may

        carry further fields, named in camelCase, which a client may ignore.
      properties:
        capabilityBlockers:
          description: >-
            `CAPABILITY_BLOCKED` and the other capability refusals: what blocks
            the workspace.
          items:
            $ref: '#/components/schemas/CapabilityBlocker'
          type:
            - array
            - 'null'
        conflicts:
          description: '`REQUOTE_FIELDS_CONFLICT`: the fields that cannot go with `requote`.'
          items:
            type: string
          type:
            - array
            - 'null'
        consentedWindow:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/SettlementWindowTerms'
              description: >-
                `SETTLEMENT_WINDOW_CHANGED`: the settlement window the order
                consented to (the quoted

                window, or the one its `settlementWindowId` named), which is no
                longer the one assigned.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        currentWindow:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/SettlementWindowTerms'
              description: >-
                `SETTLEMENT_WINDOW_CHANGED`: the settlement window the server
                assigns the trade now.

                Send the same quote again with `settlementWindowId` set to
                `details.currentWindow.windowId`

                to consent to it.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        field:
          description: >-
            `INVALID_REQUEST`: the path of a missing required, unknown, mistyped
            or out-of-range

            field (for example `buy` or `sell.asset`), never the parser's
            message or input value.
          type:
            - string
            - 'null'
        reason:
          anyOf:
            - $ref: '#/components/schemas/SourceReason'
            - type: 'null'
          description: >-
            A machine-readable reason token the refusing step gave.


            Known source reason tokens (not all apply to every status):
            `clockUnavailable`, `assetUnsupported`, `referenceUndeclarable`,
            `referenceNotAdmitted`, `referenceStale`, `referenceDepth`,
            `marketDataUnavailable`, `calibrationUnavailable`,
            `livePriceUnavailable`, `lpQuoteUnavailable`,
            `platformJurisdictionCountryRequired`,
            `platformJurisdictionUnavailable`, `platformJurisdictionBlocked`,
            `venueJurisdictionExcluded`, `workspaceJurisdictionRequired`,
            `jurisdictionRegionRequired`, `jurisdictionUnavailable`,
            `venueKeyRefusedLikelyIpAllowlist`,
            `venueWithdrawalDestinationNotWhitelisted`,
            `adapterPayloadSerializationFailed`,
            `basicVenueAccountsUnavailable`, `billingPaymentOverdue`,
            `walletNotOnChain`, `ccxtVenueRequiresCexLane`,
            `executionStageDisabled`, `jurisdictionUnproven`,
            `onboardedVenuesUnavailable`, `onchainAccountDefaultWalletRequired`,
            `onchainAccountDefaultWalletUnavailable`,
            `onchainAccountWalletRequired`, `onchainAssetDecimalsMismatch`,
            `onchainAssetIdentityMismatch`, `onchainAssetUnmapped`,
            `onchainAssetVariantFiltered`, `onchainWalletUnavailable`,
            `onchainCatalogueUnavailable`, `onchainDeliverToNotReceivingWallet`,
            `onchainDeliverToUnverified`, `onchainMarketsUnavailable`,
            `onchainMarketCatalogUnreadable`, `onchainMarketChainRequired`,
            `onchainMarketVariantRequired`, `onchainMarketTokenRequired`,
            `onchainSiteChainUnreadable`, `onchainWalletChainUnreadable`,
            `onchainWalletInactive`, `onchainWalletNotLinked`,
            `onchainWalletNotUsable`, `onchainWalletPickAmbiguous`,
            `onchainWalletWrongNetwork`, `signerLacksRight`,
            `signerUnavailable`, `signingGrantAmbiguous`, `signingGrantExpired`,
            `nativeGrantExpiryReapprovalRequired`, `nativeBalanceUnavailable`,
            `solanaFinalityUnavailable`, `tronSolidBlockUnavailable`,
            `signingGrantPolicyUnreadable`, `signingGrantPolicyChecking`,
            `signingGrantRequired`, `signingGrantTokenNotKept`,
            `signingGrantTokenNotPayable`, `solverChainUnready`,
            `walletChainMismatch`, `walletNotUsableByYou`,
            `walletNotVerifiedForAce`, `walletNotWhitelisted`,
            `withdrawalChainUnsupported`, `accountFeeUnavailable`,
            `comparisonCostsUnavailable`, `connectionListingUnavailable`,
            `feeUnverified`, `noPool`, `noPrice`, `noSize`, `notFilled`,
            `notYetPublished`, `priceArithmetic`, `priceSourceNone`,
            `referenceMidUnavailable`, `settlementPrecisionUnavailable`,
            `accountSetupIncomplete`, `admissionUnavailable`,
            `advancedAccountEligibilityUnavailable`,
            `advancedAccountStateInconsistent`, `advancedConnectionDisabled`,
            `advancedConnectionNotConfigured`, `advancedConnectionPaused`,
            `advancedSettlementNeedsVerification`, `advancedModeDisabled`,
            `advancedNotAvailableForAccount`, `advancedNotEnabledForAccount`,
            `allowanceUnavailable`, `acrossCapacityExceeded`,
            `relayCapacityExceeded`, `acrossChainNotCarried`,
            `cctpChainNotCarried`, `cctpWalletRequired`, `acrossWalletRequired`,
            `walletBrowserSigningEvmOnly`, `relayChainNotCarried`,
            `apiKeyAdvancedWalletUnsupported`,
            `apiKeyOrganisationWalletScopeRequired`, `grantCapExceeded`,
            `amountAboveMaximum`, `amountBelowMinimum`, `belowVenueMinimum`,
            `amountUnreadable`, `amountsUnreadable`, `askFirst`,
            `authorityUnavailable`, `automationNeverAsks`,
            `availabilityUnreadable`, `backgroundNeverAsks`,
            `balanceUnreadable`, `defaultsUnavailable`, `walletHasNoAddress`,
            `walletUnavailable`, `bondAmountUnreadable`, `bondAssetUnreadable`,
            `catalogueUnavailable`, `chainFamilyUnknown`, `chainUnrecorded`,
            `clientSessionRequired`, `clockUnreadable`, `comingSoon`,
            `connectionChanged`, `connectionRevoked`, `corridorInvalid`,
            `credential`, `deadlineExceeded`, `defaultsLoading`,
            `deliverToCalldataUnsupported`, `deliverToTagUnsupported`,
            `deliverToNotPermitted`, `deliverToUnreadable`,
            `tradingPermissionRequired`, `directPatienceHarvest`,
            `economicallyInferior`, `exactAmountConflictsWithCard`,
            `exactAmountConflictsWithQuote`, `exactOutputDeliveryUnsupported`,
            `exactOutputEstimateUnavailable`, `exactRouteHypothesisUnavailable`,
            `expiredOnArrival`, `expiryUnknown`, `feeUnreadable`, `filteredOut`,
            `firmAskRefused`, `firmAskFundsTimedOut`,
            `firmAskPreparationTimedOut`, `quotePreparationFailed`,
            `firmAskAdmissionTimedOut`, `seliniFirmAskMarketsTimedOut`,
            `seliniFirmAskHandoffTimedOut`, `seliniFirmAskBeforePostTimedOut`,
            `seliniFirmAskValidationTimedOut`, `seliniFirmAskResponseTimedOut`,
            `seliniFirmAskTransportFailure`, `rfqQuoteRefusedQuoteNotAvailable`,
            `rfqQuoteRefusedQuotingDisabled`,
            `rfqQuoteRefusedClientRfqNotConfigured`,
            `rfqQuoteRefusedClientProfileNotLoaded`,
            `rfqQuoteRefusedMarketDisabled`, `rfqQuoteRefusedInvalidQuantity`,
            `rfqQuoteRefusedInvalidSide`, `rfqQuoteRefusedInvalidCurrency`,
            `rfqQuoteRefusedPricePrecisionError`, `rfqQuoteRefusedRfqError`,
            `rfqQuoteRefused`, `venueOutcomeIndeterminate`,
            `venueBodyUnreadable`, `venueResponseUnmapped`, `venueRateLimited`,
            `venueQuoteAdmissionExpired`, `placementSignedPastDeadline`,
            `quoteIdentityConflict`, `symbolUnsupported`,
            `marketSymbolAmbiguous`, `firmAskPrincipalRequired`,
            `indicativeRequested`, `freshnessUnknown`, `fundingWindow`,
            `insufficientLiquidity`, `venueRelationship`,
            `venueRelationshipUnavailable`, `lpUnknown`, `mfaEnrolmentRequired`,
            `mfaRequired`, `minimumUnverified`, `mixedNetworks`,
            `netReceivedUnavailable`, `networkUnrecorded`, `noAddress`,
            `noCard`, `noFetcher`, `noInventory`, `noLaneForPair`, `noLegs`,
            `noOnChainCorridor`, `noPlannedVenue`, `noQuote`, `noRpc`,
            `notConnected`, `notEligible`, `notExecutable`,
            `orderPayloadMissing`, `outsideTopComposites`, `pairUnmapped`,
            `sellChainInvalid`, `permissionsUnreadable`,
            `placeOrderNotPermitted`, `prefundingMarkerUnreadable`,
            `prefundingRequired`, `indicative`, `priceOnRequest`,
            `priceOutOfRange`, `priceProtectionInvalid`, `pricingBookOnly`,
            `productNotQuoted`, `protocolChainMissing`,
            `providerFeeTreatmentUnknown`, `providerSiteUnrecorded`,
            `quoteIdUnissuable`, `quoteNotHeld`, `buyChainInvalid`,
            `buyAmountUnsupported`, `exactOutputDebitUnavailable`,
            `pairNotServed`, `accountFundingReadUnverified`,
            `quoteReconfirmationRequired`, `quoteRejected`,
            `keyrockSecurityCatalogueUnavailable`,
            `venueAnsweredAfterQuoteWindow`, `venueQuoteIntentMismatch`,
            `payExactUnsupported`, `receiveWalletNotServed`,
            `referenceMidUnreadable`, `referencePriceUnavailable`,
            `registryUnavailable`, `releaseRecheckUnavailable`,
            `requestUnbuildable`, `routeLegChainUnknown`, `routeLegUnnamed`,
            `routeLegUnplanned`, `routeUnavailable`, `secondFactorUnreadable`,
            `shortfallUnmeasured`, `shortfallUnreadable`, `singleChainVenue`,
            `siteChainUnreadable`, `sizeNotEligible`, `submitOrderBlocked`,
            `takerOnboardingIncomplete`, `tierNotQuoted`, `tradePaused`,
            `venueConnectionStorageUnavailable`, `venueDataStale`,
            `venueDeclined`, `venueNotConnected`, `venueNotEnabledForWorkspace`,
            `venueNotListed`, `venueTradeKeyUnavailable`,
            `venueTradeScopeRequired`, `venueTradeUnreadable`,
            `venueUnavailable`, `walletRefused`, `withdrawalFeeUnread`,
            `acrossRoutedViaCctp`, `apiKeyOrganisationWalletNotAllowlisted`,
            `balanceAvailabilityUnconfirmed`, `bankDestinationUnavailable`,
            `bebopJamKeyNotEnabled`, `bebopJamQuoteDeclined`,
            `bebopTokenUnavailable`, `relayCurrencyUnsupported`,
            `relaySwapImpactTooHigh`, `tetrafiSolverCallbackNotAuthorized`,
            `tradingLinkSnapshotChanged`, `tradingLinkSnapshotUnavailable`,
            `uniswapChainReadUnavailable`, `uniswapInsufficientDepth`,
            `uniswapQuoteUnreadable`, `uniswapUnwrapAboveDailyCap`,
            `uniswapUnwrapAboveTradeCap`, `uniswapRouteNotGranted`,
            `venueNotEnabled`, `askLimitReached`, `balanceMeaningUnconfirmed`,
            `bebopQuorumWalletTooSlow`, `bebopWalletQuorumUnreadable`,
            `bebopBrowserWalletUnsupported`, `connectionNotConfigured`,
            `deliveryAccountNetworkUnavailable`, `deliveryAccountUnavailable`,
            `destinationCannotSendOnChain`, `dexReferencePriceUnavailable`,
            `firmQuoteLimited`, `fundingAccountNetworkUnavailable`,
            `fundingAccountUnavailable`, `insufficientDepth`,
            `missingPermission`, `needsNativeGas`, `needsWallet`, `notPriced`,
            `payInTermsUnavailable`, `pilotTradeCapExceeded`,
            `pilotMinimumAboveTradeCap`, `platformFeeRateUnavailable`,
            `pricingBookPairUnserved`, `settlementDeclarationUnavailable`,
            `settlementNotAvailable`, `timedOut`, `timedOutBeforeSend`,
            `tradingSourceNetworkUnavailable`, `tradingSourceNotLinked`,
            `venueEnablementRechecking`, `venueEnablementUnavailable`,
            `venueListingTimedOut`, `venuePoliciesUnavailable`,
            `multiliquidPaused`, `multiliquidAssetNotAccepted`,
            `walletNotAllowlistedForAsset`, `walletBlacklisted`,
            `multiliquidPriceInvalid`, `multiliquidStablePriceOutOfBand`,
            `multiliquidInsufficientLiquidity`,
            `multiliquidProviderPrefundUnavailable`,
            `multiliquidDailyLimitReached`, `eligibilityUnverifiable`,
            `multiliquidInsufficientBalance`,
            `multiliquidWalletFundsInsufficient`,
            `multiliquidInsufficientAllowance`, `walletTokenAccountFrozen`,
            `multiliquidAmountInTooHigh`, `multiliquidAmountOutTooLow`,
            `multiliquidInsufficientLpFeeBalance`,
            `multiliquidTransferFeeNotSupported`,
            `multiliquidParticipantUnavailable`, `multiliquidChainNotSupported`,
            `multiliquidObservationWalletUnavailable`,
            `privyMultiliquidArrayPinsUnsupported`, `cctpDestinationNotGranted`,
            `signingGrantNativeOnly`, `quoteRejectedInsufficientBalance`,
            `walletGateUnreadable`, `policyBlocked`,
            `treasuryPolicyApprovalRequired`, `destinationTagRequired`,
            `destinationTagMismatch`, `destinationTagInvalid`,
            `acrossBasicLaneNotEnabled`, `creditReadUnavailable`,
            `exactOutputFirmAskUnsupported`, `grantEndsBeforeVenueFunding`,
            `jurisdictionNotServed`, `pairUnsupported`,
            `requesterJurisdictionUnknown`, `venueAccountHasNoKey`,
            `venueAssessmentRequired`, `venueConnectionInvalid`,
            `venueReenableRequiresNewCredentials`, `venueTradingPaused`,
            `balanceNotObserved`, `notPermitted`, `balanceNotPermitted`,
            `gasUnchecked`, `catalogueWaitStateUnavailable`,
            `cctpRouteUpgrading`, `creditOnly`, `dexReferencePriceMissing`,
            `quoteAuthorityUnavailable`, `venueRoutingOff`,
            `venueRoutingStateUnavailable`, `indicativeUnavailable`,
            `marketUnavailable`, `noReferenceMid`,
            `observationBindingUnavailable`, `quoteIdUnavailable`, `stalePrice`.


            New values may be added; treat unknown values as other.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        remediation:
          description: A machine-readable recovery hint the refusing step gave.
          type:
            - string
            - 'null'
        retryAfter:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/IsoDuration'
              description: >-
                Every `429`, and a `503` that knows: when to try again, as an
                ISO 8601 duration. The

                `Retry-After` header carries the same wait in whole seconds.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        value:
          description: >-
            `UNKNOWN_ASSET`, `UNKNOWN_CHAIN`, `UNKNOWN_VENUE`, `INVALID_AMOUNT`:
            the value refused;

            `ASSET_NOT_ON_CHAIN`: the pinned chain the Asset is not on.
          type:
            - string
            - 'null'
      type: object
    QuoteNextAction:
      description: |-
        The one action the caller takes next; later legs run
        under the order.

        New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          contact: '#/components/schemas/QuoteNextAction/oneOf/8'
          fund: '#/components/schemas/QuoteNextAction/oneOf/4'
          order: '#/components/schemas/QuoteNextAction/oneOf/0'
          preflight: '#/components/schemas/QuoteNextAction/oneOf/1'
          requote: '#/components/schemas/QuoteNextAction/oneOf/5'
          search: '#/components/schemas/QuoteNextAction/oneOf/6'
          sign: '#/components/schemas/QuoteNextAction/oneOf/3'
          transact: '#/components/schemas/QuoteNextAction/oneOf/2'
          wait: '#/components/schemas/QuoteNextAction/oneOf/7'
        propertyName: kind
      oneOf:
        - description: '`POST /orders {quoteId}`.'
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - order
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - description: >-
            This quote requires Advanced wallet preparation, which is not
            available to integrators at launch. Do not submit this quote; select
            an orderable Basic quote.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - preflight
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - description: Send these transactions, then order.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - transact
              type: string
              x-extensible-enum: true
            transactions:
              items:
                $ref: '#/components/schemas/TakerTransaction'
              type: array
          required:
            - transactions
            - kind
          type: object
        - description: Sign this EIP-712 document, then order.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - sign
              type: string
              x-extensible-enum: true
            typedData: {}
          required:
            - typedData
            - kind
          type: object
        - description: >-
            Fund, then requote. `null` instructions when they could not be read;
            no order is

            accepted while short either way.
          properties:
            instructions:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/FundInstructions'
              x-undiscriminated-union-reason: >-
                Nullable value: JSON null has no properties and cannot carry a
                discriminator.
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - fund
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - description: >-
            Ask the venue again, with these funding or delivery selections
            filled.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - requote
              type: string
              x-extensible-enum: true
            needs:
              items:
                $ref: '#/components/schemas/RequoteNeed'
              type: array
          required:
            - needs
            - kind
          type: object
        - description: >-
            Search again: `POST /quotes` with a pair body. The quote is past its
            requote window,

            so `{requote: quoteId}` can no longer refresh it.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - search
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - description: >-
            The venue outcome is being reconciled. Read this same order again
            after

            the given ISO 8601 duration; never submit a replacement order.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - wait
              type: string
              x-extensible-enum: true
            retryAfter:
              $ref: '#/components/schemas/IsoDuration'
          required:
            - retryAfter
            - kind
          type: object
        - description: Contact support with this non-secret order reference.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - contact
              type: string
              x-extensible-enum: true
            reference:
              type: string
          required:
            - reference
            - kind
          type: object
      x-extensible-enum: true
    TradeKind:
      description: |-
        The kinds the one trade history lists.

        New values may be added; treat unknown values as other.
      enum:
        - order
        - venueTrade
      type: string
      x-extensible-enum: true
    TradeCoverageState:
      description: New values may be added; treat unknown values as other.
      enum:
        - unavailable
      type: string
      x-extensible-enum: true
    IncludedEntry:
      description: >-
        One referenced object: `value` when its own GET answered 200, else
        `null` with `reason`.
      properties:
        reason:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/IncludedReason'
              description: >-
                Why `value` is `null`: the related GET's refusal. Absent when
                `value` is present.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        value:
          description: >-
            The related object as its own GET returns it to this caller; `null`
            with `reason` otherwise.
          type:
            - object
            - 'null'
      required:
        - value
      type: object
    CompanyTradeListItem:
      description: A single trade in the paginated list view.
      properties:
        actionRequired:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeActionRequired'
              description: >-
                Set when the order is waiting on a person rather than on a chain
                or a solver:

                a composite parked until its taker re-quotes and signs the next
                leg. Its coarse

                `status` still reads `executing`, identical to a leg in flight,
                so this is the

                only list field that tells the two apart. Absent for every other
                order.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        amountUsd:
          description: >-
            Absent when the order recorded no USD notional; never 0 for an
            unknown amount.
          type:
            - string
            - 'null'
        apiKey:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeApiKey'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        channel:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/OrderChannel'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        createdAt:
          format: date-time
          type: string
        custodyVaultAddress:
          description: >-
            Custody vault address when the order settled through a custody
            vault.

            Absent for self-custody orders.
          type:
            - string
            - 'null'
        deferredSettlement:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DeferredSettlementInfo'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        deliveredBuyProvenance:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DeliveredBuyProvenance'
              description: >-
                Provenance of the delivered buy amount behind `slippage_bps`:
                `"measured"`

                vs `"quoted"` (carried forward unmeasured). See the detail
                section.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        executionPrice:
          $ref: '#/components/schemas/ExecutionPriceDisplay'
        failureReason:
          description: >-
            Why the order failed or was refunded, as the detail's
            `settlement.failureReason`

            reports it: absent while the order has no recorded failure.
          type:
            - string
            - 'null'
        lifecycleStatus:
          $ref: '#/components/schemas/TradeLifecycleStatus'
        linkedWalletId:
          description: >-
            Account-linked wallet id that placed the trade, for per-wallet
            filtering

            and display. Absent for router-executed or unattributed orders that
            carry

            no linked wallet.
          type:
            - string
            - 'null'
        lpName:
          type: string
        lpSource:
          type: string
        lpVenueId:
          description: >-
            The catalogue Venue id of the order's LP (`keyrock`, `circle-cctp`;
            a routed

            order's first leg), so a client draws the LP's logo by identity
            rather than by

            `lp_name`. Absent when no catalogue Venue declares that LP.
          type:
            - string
            - 'null'
        makerAttribution:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeMakerAttribution'
              description: >-
                The order's recorded maker, absent if no execution type was
                recorded.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        nextAction:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/NextAction'
              description: >-
                The typed form of `actionRequired`: the same decision the order
                page reads

                (`OrderResponse.nextAction`), computed by the same backend
                owner. Clients switch on

                its `kind`; `actionRequired` stays for older clients and is
                derived from it.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        nextActor:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/NextActor'
              description: 'Who acts next: the same decision the order read carries.'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        orderId:
          type: string
        orderKind:
          description: >-
            Canonical route-aware order kind (`cctp-v0` / `composite-v0` /
            `fx-v0` / …)

            for list clients + API-key parity with the detail. Absent for
            non-route

            orders, where `orderType` suffices.
          type:
            - string
            - 'null'
        route:
          $ref: '#/components/schemas/TradeRouteDisplay'
        routingPath:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/RoutingPath'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        routingPathLabel:
          type: string
        settlementSpeedMs:
          format: int64
          minimum: 0
          type:
            - integer
            - 'null'
        settlementStatus:
          type: string
        slippageBps:
          format: int64
          type:
            - integer
            - 'null'
        status:
          $ref: '#/components/schemas/TradeHistoryStatus'
          description: |-
            Canonical user-facing order lifecycle status from `orders.status`.
            `settlement_status` remains the coarse analytics bucket.
        submittedByYou:
          description: >-
            The caller submitted this order: the same rule as the order read's

            `viewer.submittedByYou` (the linked wallet's user or the order's
            user is the caller).

            Always false for an API-key caller.
          type: boolean
      required:
        - orderId
        - createdAt
        - submittedByYou
        - route
        - lpName
        - lpSource
        - routingPathLabel
        - status
        - settlementStatus
        - lifecycleStatus
        - executionPrice
      type: object
    CompanyVenueTradeListItem:
      description: A venue trade in the one trade history.
      properties:
        amountUsd:
          description: >-
            A reference USD value of what the trade sells, by the same price
            service that values an

            order row's `amountUsd`, at the price when read. `amountUsdBasis`
            says which amount it

            values. Absent when the asset has no reference price or the price
            read failed; never 0

            for an unknown value.
          type:
            - string
            - 'null'
        amountUsdBasis:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueTradeAmountBasis'
              description: >-
                `executed` (what the venue debited, on a fill) or `requested`
                (the most the trade

                could spend, otherwise). Present exactly when `amountUsd` is.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        apiKey:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeApiKey'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        buy:
          $ref: '#/components/schemas/VenueTradeHistoryLeg'
          description: >-
            What the trade buys: its asset and, when recorded, the least it must
            receive from its consented bounds.
        connectionId:
          type: string
        createdAt:
          format: date-time
          type: string
        debitExpirySignature:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DebitExpirySignatureStatus'
              description: >-
                For an expired debit proof, whether wallet records contain a
                typed signature:

                `recorded` or `unconfirmed`. Absent when the retained steps
                cannot establish either.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        executionPrice:
          description: >-
            Legacy confirmed output per input (buy asset / sell asset), computed
            with Decimal;

            null when unread. executionPriceUnit states its unit; prefer
            statedExecutionPrice for display.
          type:
            - string
            - 'null'
        executionPriceUnit:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueTradePriceUnit'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        executionStatus:
          $ref: '#/components/schemas/VenueTradeExecutionStatus'
        executionTypeId:
          description: The execution type (compiled spec id), not the catalogue Venue.
          type: string
        feesPaid:
          description: >-
            What a confirmed same-asset fill (a bridge) cost the taker: spent
            minus

            received, the venue's protocol and forwarding fees, in the sell
            asset. Absent unless confirmed and positive.
          type:
            - string
            - 'null'
        financials:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueTradeFinancials'
              description: >-
                The trade's recorded money terms and payment legs, from the same
                records as the order read; history never re-derives a fee or
                minimum.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        inputSpent:
          description: What the venue debited and credited, once its outcome is recorded.
          type:
            - string
            - 'null'
        lifecycleStatus:
          $ref: '#/components/schemas/TradeLifecycleStatus'
          description: >-
            The same lifecycle shape an order row carries; `needsReview` is not
            final.
        notSentCause:
          description: >-
            The stable code behind `notSentReason`, the same value the
            venue-trade detail's

            `notSentCause` carries (for example `WALLET_NONCE_PENDING`). A code
            this version does not

            know is still named. Absent when no cause was retained.
          type:
            - string
            - 'null'
        notSentReason:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueTradeNotSentReason'
              description: >-
                Why a `not_sent` outcome was not sent, as the dispatch's
                `notSentReason`.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        operationId:
          type: string
        outcomeCode:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueTradeOutcomeCode'
              description: >-
                Why the trade ended as it did, as its dispatch records it (the
                order page's

                `dispatch.outcomeCode`): the history row names a no-fill's
                reason from it.

                Absent until an outcome is recorded.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        outputReceived:
          type:
            - string
            - 'null'
        pair:
          description: >-
            The recorded market pair; absent stays absent, never inferred from
            asset order.
          type:
            - string
            - 'null'
        placedBy:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueTradePlacedBy'
              description: >-
                Who placed the trade: the API key by label, else the member
                where this reader may see their name. Absent otherwise.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        providerSite:
          type: string
        sell:
          $ref: '#/components/schemas/VenueTradeHistoryLeg'
          description: >-
            What the trade sells: its asset and, when recorded, the most it may
            spend from its consented bounds.
        settlement:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/QuotedSettlement'
              description: >-
                How and when the trade settles, as recorded before it was sent:
                the same block the order

                read returns as `settlement` (method, timing and, for a delayed
                trade, its window with

                `settlesBy` and `paymentDeadlineAt`). Absent on a trade recorded
                without it.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        settlementCarriedInto:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeSettlementCarriedWindow'
              description: >-
                The later window the trade's amounts were netted into, as the
                order read's

                `settlementCarriedInto`. Absent when nothing was netted.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        settlementState:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeSettlementState'
              description: >-
                Where the filled trade's settlement stands; the same value as
                the order read's

                `settlementState`. Absent before the fill and without recorded
                terms.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        settlementStatement:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeSettlementStatement'
              description: >-
                Whether the statement of the window the trade settles in is out,
                as the order read's

                `settlementStatement`. Absent with `settlementState` and without
                a window.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        statedExecutionPrice:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueTradeStatedPrice'
              description: >-
                QuoteCurrencyPriority market convention, with explicit
                base/quote and fallback basis.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        submittedByYou:
          type: boolean
        tetrafiFee:
          description: >-
            Gross TetraFi fee (list rate, before incentives) from the Basic
            billing ledger, in tetrafiFeeAsset; absent until accrued.
          type:
            - string
            - 'null'
        tetrafiFeeAsset:
          type:
            - string
            - 'null'
        transferMode:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/BridgeTransferMode'
              description: >-
                CCTP's selected finality tier, as the order read's
                `operation.onChain.transferMode`: the

                bound selection, never re-derived. A CCTP trade without it is
                Standard (historical and

                omitted selections); absent on every other venue.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        uncertainCode:
          description: >-
            The dispatch's first unknown-outcome failure: a closed code, never a
            provider body.

            A later terminal outcome takes precedence over this retained
            diagnostic.
          type:
            - string
            - 'null'
        venueAccountName:
          description: >-
            The workspace's venue account it went through, titled by its
            catalogue Venue

            ("Keyrock account"), never by the execution type ("Keyrock OTC"); an
            on-chain venue is

            never an account and reads as itself ("Circle StableFX").
          type: string
        venueName:
          description: The venue's name, for display.
          type: string
      required:
        - connectionId
        - operationId
        - executionTypeId
        - venueName
        - venueAccountName
        - providerSite
        - createdAt
        - submittedByYou
        - sell
        - buy
        - executionStatus
        - lifecycleStatus
      type: object
    TradeProjection:
      description: >-
        Which view of trades answers the request: the caller's own, the
        workspace's,

        a broker's umbrella, an LP's fills, or an LP's unsettled orders.


        New values may be added; treat unknown values as other.
      enum:
        - mine
        - workspace
        - umbrella
        - maker
        - settlement
      type: string
      x-extensible-enum: true
    MakerFillsContext:
      description: The fills list's context, field for field as the fills read returns it.
      properties:
        accountSummary:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueFillSummary'
              description: >-
                Venue-account totals, when the read asked for them
                (flow=venue_account&includeAccountSummary=true).
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        ownedSolvers:
          description: The solvers this LP workspace owns.
          items:
            $ref: '#/components/schemas/OwnedSolverIdentity'
          type: array
        selectedAccountFilter:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueFillFilter'
              description: >-
                The venue-account filter the read applied, when one was
                requested.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        selectedBrokerId:
          description: The broker filter the read applied.
          type:
            - string
            - 'null'
        selectedCohort:
          description: The cohort filter the read applied.
          type:
            - string
            - 'null'
        selectedRiskScope:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/RecordedRiskTradeScope'
              description: >-
                The recorded risk scope the read applied, when one was
                requested.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        selectedSolverId:
          description: The solver the fills were read for.
          type:
            - string
            - 'null'
      required:
        - ownedSolvers
        - selectedSolverId
        - selectedBrokerId
        - selectedCohort
      type: object
    MakerSettlementContext:
      description: >-
        The settlement queue's context, field for field as the queue read
        returns it.
      properties:
        asOf:
          description: When the queue snapshot was read.
          format: date-time
          type: string
        maxOffset:
          description: >-
            Beyond this bound the operator must narrow stage, corridor or
            connection.
          format: int32
          minimum: 0
          type: integer
        offset:
          description: The page's offset.
          format: int32
          minimum: 0
          type: integer
      required:
        - asOf
        - offset
        - maxOffset
      type: object
    CapabilityBlocker:
      description: One reason a capability is blocked, plus the step that unlocks it.
      properties:
        code:
          $ref: '#/components/schemas/CapabilityBlockerCode'
        currentlyDue:
          description: |-
            Requirement keys still due, such as `kyb_review`, `actor_kyc` or
            `permission:place_order`. Empty when nothing specific is due.
          items:
            type: string
          type: array
        estimate:
          $ref: '#/components/schemas/CapabilityUnlockEstimate'
        message:
          type: string
        unlockStep:
          $ref: '#/components/schemas/CapabilityUnlockStep'
          description: >-
            Stable key of the step that unlocks this blocker. The UI maps it to
            a

            route or dialog.
      required:
        - code
        - message
        - unlockStep
        - estimate
      type: object
    SettlementWindowTerms:
      description: >-
        The account schedule's window a delayed trade settles in, fixed when the
        quote was

        made and recorded unchanged on the executed trade. A `clock` window
        carries `settlesBy`,

        the occurrence's confirmed completion; an `onAgreement` window (an
        LP-issued statement with

        no completion term) carries none. A window whose completion is pending
        on any other

        schedule is never emitted.
      properties:
        assumedBoundary:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/AssumedWindowBoundary'
              description: >-
                Present when the window's boundary comes from an assumed
                schedule term rather than the

                LP's confirmation: every surface shows the window as assumed
                until the LP confirms it.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        cadence:
          $ref: '#/components/schemas/SettlementCadence'
        cutoffAt:
          format: date-time
          type:
            - string
            - 'null'
        paymentDeadlineAt:
          description: >-
            The occurrence's payment deadline from its schedule terms: what a
            credit trade's debt is

            paid by. Absent while the schedule has not confirmed it; never
            derived from `settlesBy`.
          format: date-time
          type:
            - string
            - 'null'
        scheduleId:
          type: string
        scheduleLabel:
          description: >-
            The published schedule version's display name (e.g. "EU"), so a
            quote card or Review

            names the window without a settlement read permission.
          type: string
        scheduleVersion:
          format: int64
          type: integer
        settlementBasis:
          $ref: '#/components/schemas/WindowSettlementBasis'
        settlesBy:
          format: date-time
          type:
            - string
            - 'null'
        snapshotAt:
          format: date-time
          type: string
        statementIssuer:
          description: >-
            The LP whose statement settles an `onAgreement` window ("Keyrock");
            absent on a clock window.
          type:
            - string
            - 'null'
        windowId:
          format: uuid
          type: string
      required:
        - windowId
        - scheduleId
        - scheduleVersion
        - scheduleLabel
        - cadence
        - snapshotAt
      type: object
    SourceReason:
      description: >-
        Known source reason tokens (not all apply to every status):
        `clockUnavailable`, `assetUnsupported`, `referenceUndeclarable`,
        `referenceNotAdmitted`, `referenceStale`, `referenceDepth`,
        `marketDataUnavailable`, `calibrationUnavailable`,
        `livePriceUnavailable`, `lpQuoteUnavailable`,
        `platformJurisdictionCountryRequired`,
        `platformJurisdictionUnavailable`, `platformJurisdictionBlocked`,
        `venueJurisdictionExcluded`, `workspaceJurisdictionRequired`,
        `jurisdictionRegionRequired`, `jurisdictionUnavailable`,
        `venueKeyRefusedLikelyIpAllowlist`,
        `venueWithdrawalDestinationNotWhitelisted`,
        `adapterPayloadSerializationFailed`, `basicVenueAccountsUnavailable`,
        `billingPaymentOverdue`, `walletNotOnChain`, `ccxtVenueRequiresCexLane`,
        `executionStageDisabled`, `jurisdictionUnproven`,
        `onboardedVenuesUnavailable`, `onchainAccountDefaultWalletRequired`,
        `onchainAccountDefaultWalletUnavailable`,
        `onchainAccountWalletRequired`, `onchainAssetDecimalsMismatch`,
        `onchainAssetIdentityMismatch`, `onchainAssetUnmapped`,
        `onchainAssetVariantFiltered`, `onchainWalletUnavailable`,
        `onchainCatalogueUnavailable`, `onchainDeliverToNotReceivingWallet`,
        `onchainDeliverToUnverified`, `onchainMarketsUnavailable`,
        `onchainMarketCatalogUnreadable`, `onchainMarketChainRequired`,
        `onchainMarketVariantRequired`, `onchainMarketTokenRequired`,
        `onchainSiteChainUnreadable`, `onchainWalletChainUnreadable`,
        `onchainWalletInactive`, `onchainWalletNotLinked`,
        `onchainWalletNotUsable`, `onchainWalletPickAmbiguous`,
        `onchainWalletWrongNetwork`, `signerLacksRight`, `signerUnavailable`,
        `signingGrantAmbiguous`, `signingGrantExpired`,
        `nativeGrantExpiryReapprovalRequired`, `nativeBalanceUnavailable`,
        `solanaFinalityUnavailable`, `tronSolidBlockUnavailable`,
        `signingGrantPolicyUnreadable`, `signingGrantPolicyChecking`,
        `signingGrantRequired`, `signingGrantTokenNotKept`,
        `signingGrantTokenNotPayable`, `solverChainUnready`,
        `walletChainMismatch`, `walletNotUsableByYou`,
        `walletNotVerifiedForAce`, `walletNotWhitelisted`,
        `withdrawalChainUnsupported`, `accountFeeUnavailable`,
        `comparisonCostsUnavailable`, `connectionListingUnavailable`,
        `feeUnverified`, `noPool`, `noPrice`, `noSize`, `notFilled`,
        `notYetPublished`, `priceArithmetic`, `priceSourceNone`,
        `referenceMidUnavailable`, `settlementPrecisionUnavailable`,
        `accountSetupIncomplete`, `admissionUnavailable`,
        `advancedAccountEligibilityUnavailable`,
        `advancedAccountStateInconsistent`, `advancedConnectionDisabled`,
        `advancedConnectionNotConfigured`, `advancedConnectionPaused`,
        `advancedSettlementNeedsVerification`, `advancedModeDisabled`,
        `advancedNotAvailableForAccount`, `advancedNotEnabledForAccount`,
        `allowanceUnavailable`, `acrossCapacityExceeded`,
        `relayCapacityExceeded`, `acrossChainNotCarried`, `cctpChainNotCarried`,
        `cctpWalletRequired`, `acrossWalletRequired`,
        `walletBrowserSigningEvmOnly`, `relayChainNotCarried`,
        `apiKeyAdvancedWalletUnsupported`,
        `apiKeyOrganisationWalletScopeRequired`, `grantCapExceeded`,
        `amountAboveMaximum`, `amountBelowMinimum`, `belowVenueMinimum`,
        `amountUnreadable`, `amountsUnreadable`, `askFirst`,
        `authorityUnavailable`, `automationNeverAsks`, `availabilityUnreadable`,
        `backgroundNeverAsks`, `balanceUnreadable`, `defaultsUnavailable`,
        `walletHasNoAddress`, `walletUnavailable`, `bondAmountUnreadable`,
        `bondAssetUnreadable`, `catalogueUnavailable`, `chainFamilyUnknown`,
        `chainUnrecorded`, `clientSessionRequired`, `clockUnreadable`,
        `comingSoon`, `connectionChanged`, `connectionRevoked`,
        `corridorInvalid`, `credential`, `deadlineExceeded`, `defaultsLoading`,
        `deliverToCalldataUnsupported`, `deliverToTagUnsupported`,
        `deliverToNotPermitted`, `deliverToUnreadable`,
        `tradingPermissionRequired`, `directPatienceHarvest`,
        `economicallyInferior`, `exactAmountConflictsWithCard`,
        `exactAmountConflictsWithQuote`, `exactOutputDeliveryUnsupported`,
        `exactOutputEstimateUnavailable`, `exactRouteHypothesisUnavailable`,
        `expiredOnArrival`, `expiryUnknown`, `feeUnreadable`, `filteredOut`,
        `firmAskRefused`, `firmAskFundsTimedOut`, `firmAskPreparationTimedOut`,
        `quotePreparationFailed`, `firmAskAdmissionTimedOut`,
        `seliniFirmAskMarketsTimedOut`, `seliniFirmAskHandoffTimedOut`,
        `seliniFirmAskBeforePostTimedOut`, `seliniFirmAskValidationTimedOut`,
        `seliniFirmAskResponseTimedOut`, `seliniFirmAskTransportFailure`,
        `rfqQuoteRefusedQuoteNotAvailable`, `rfqQuoteRefusedQuotingDisabled`,
        `rfqQuoteRefusedClientRfqNotConfigured`,
        `rfqQuoteRefusedClientProfileNotLoaded`,
        `rfqQuoteRefusedMarketDisabled`, `rfqQuoteRefusedInvalidQuantity`,
        `rfqQuoteRefusedInvalidSide`, `rfqQuoteRefusedInvalidCurrency`,
        `rfqQuoteRefusedPricePrecisionError`, `rfqQuoteRefusedRfqError`,
        `rfqQuoteRefused`, `venueOutcomeIndeterminate`, `venueBodyUnreadable`,
        `venueResponseUnmapped`, `venueRateLimited`,
        `venueQuoteAdmissionExpired`, `placementSignedPastDeadline`,
        `quoteIdentityConflict`, `symbolUnsupported`, `marketSymbolAmbiguous`,
        `firmAskPrincipalRequired`, `indicativeRequested`, `freshnessUnknown`,
        `fundingWindow`, `insufficientLiquidity`, `venueRelationship`,
        `venueRelationshipUnavailable`, `lpUnknown`, `mfaEnrolmentRequired`,
        `mfaRequired`, `minimumUnverified`, `mixedNetworks`,
        `netReceivedUnavailable`, `networkUnrecorded`, `noAddress`, `noCard`,
        `noFetcher`, `noInventory`, `noLaneForPair`, `noLegs`,
        `noOnChainCorridor`, `noPlannedVenue`, `noQuote`, `noRpc`,
        `notConnected`, `notEligible`, `notExecutable`, `orderPayloadMissing`,
        `outsideTopComposites`, `pairUnmapped`, `sellChainInvalid`,
        `permissionsUnreadable`, `placeOrderNotPermitted`,
        `prefundingMarkerUnreadable`, `prefundingRequired`, `indicative`,
        `priceOnRequest`, `priceOutOfRange`, `priceProtectionInvalid`,
        `pricingBookOnly`, `productNotQuoted`, `protocolChainMissing`,
        `providerFeeTreatmentUnknown`, `providerSiteUnrecorded`,
        `quoteIdUnissuable`, `quoteNotHeld`, `buyChainInvalid`,
        `buyAmountUnsupported`, `exactOutputDebitUnavailable`, `pairNotServed`,
        `accountFundingReadUnverified`, `quoteReconfirmationRequired`,
        `quoteRejected`, `keyrockSecurityCatalogueUnavailable`,
        `venueAnsweredAfterQuoteWindow`, `venueQuoteIntentMismatch`,
        `payExactUnsupported`, `receiveWalletNotServed`,
        `referenceMidUnreadable`, `referencePriceUnavailable`,
        `registryUnavailable`, `releaseRecheckUnavailable`,
        `requestUnbuildable`, `routeLegChainUnknown`, `routeLegUnnamed`,
        `routeLegUnplanned`, `routeUnavailable`, `secondFactorUnreadable`,
        `shortfallUnmeasured`, `shortfallUnreadable`, `singleChainVenue`,
        `siteChainUnreadable`, `sizeNotEligible`, `submitOrderBlocked`,
        `takerOnboardingIncomplete`, `tierNotQuoted`, `tradePaused`,
        `venueConnectionStorageUnavailable`, `venueDataStale`, `venueDeclined`,
        `venueNotConnected`, `venueNotEnabledForWorkspace`, `venueNotListed`,
        `venueTradeKeyUnavailable`, `venueTradeScopeRequired`,
        `venueTradeUnreadable`, `venueUnavailable`, `walletRefused`,
        `withdrawalFeeUnread`, `acrossRoutedViaCctp`,
        `apiKeyOrganisationWalletNotAllowlisted`,
        `balanceAvailabilityUnconfirmed`, `bankDestinationUnavailable`,
        `bebopJamKeyNotEnabled`, `bebopJamQuoteDeclined`,
        `bebopTokenUnavailable`, `relayCurrencyUnsupported`,
        `relaySwapImpactTooHigh`, `tetrafiSolverCallbackNotAuthorized`,
        `tradingLinkSnapshotChanged`, `tradingLinkSnapshotUnavailable`,
        `uniswapChainReadUnavailable`, `uniswapInsufficientDepth`,
        `uniswapQuoteUnreadable`, `uniswapUnwrapAboveDailyCap`,
        `uniswapUnwrapAboveTradeCap`, `uniswapRouteNotGranted`,
        `venueNotEnabled`, `askLimitReached`, `balanceMeaningUnconfirmed`,
        `bebopQuorumWalletTooSlow`, `bebopWalletQuorumUnreadable`,
        `bebopBrowserWalletUnsupported`, `connectionNotConfigured`,
        `deliveryAccountNetworkUnavailable`, `deliveryAccountUnavailable`,
        `destinationCannotSendOnChain`, `dexReferencePriceUnavailable`,
        `firmQuoteLimited`, `fundingAccountNetworkUnavailable`,
        `fundingAccountUnavailable`, `insufficientDepth`, `missingPermission`,
        `needsNativeGas`, `needsWallet`, `notPriced`, `payInTermsUnavailable`,
        `pilotTradeCapExceeded`, `pilotMinimumAboveTradeCap`,
        `platformFeeRateUnavailable`, `pricingBookPairUnserved`,
        `settlementDeclarationUnavailable`, `settlementNotAvailable`,
        `timedOut`, `timedOutBeforeSend`, `tradingSourceNetworkUnavailable`,
        `tradingSourceNotLinked`, `venueEnablementRechecking`,
        `venueEnablementUnavailable`, `venueListingTimedOut`,
        `venuePoliciesUnavailable`, `multiliquidPaused`,
        `multiliquidAssetNotAccepted`, `walletNotAllowlistedForAsset`,
        `walletBlacklisted`, `multiliquidPriceInvalid`,
        `multiliquidStablePriceOutOfBand`, `multiliquidInsufficientLiquidity`,
        `multiliquidProviderPrefundUnavailable`, `multiliquidDailyLimitReached`,
        `eligibilityUnverifiable`, `multiliquidInsufficientBalance`,
        `multiliquidWalletFundsInsufficient`,
        `multiliquidInsufficientAllowance`, `walletTokenAccountFrozen`,
        `multiliquidAmountInTooHigh`, `multiliquidAmountOutTooLow`,
        `multiliquidInsufficientLpFeeBalance`,
        `multiliquidTransferFeeNotSupported`,
        `multiliquidParticipantUnavailable`, `multiliquidChainNotSupported`,
        `multiliquidObservationWalletUnavailable`,
        `privyMultiliquidArrayPinsUnsupported`, `cctpDestinationNotGranted`,
        `signingGrantNativeOnly`, `quoteRejectedInsufficientBalance`,
        `walletGateUnreadable`, `policyBlocked`,
        `treasuryPolicyApprovalRequired`, `destinationTagRequired`,
        `destinationTagMismatch`, `destinationTagInvalid`,
        `acrossBasicLaneNotEnabled`, `creditReadUnavailable`,
        `exactOutputFirmAskUnsupported`, `grantEndsBeforeVenueFunding`,
        `jurisdictionNotServed`, `pairUnsupported`,
        `requesterJurisdictionUnknown`, `venueAccountHasNoKey`,
        `venueAssessmentRequired`, `venueConnectionInvalid`,
        `venueReenableRequiresNewCredentials`, `venueTradingPaused`,
        `balanceNotObserved`, `notPermitted`, `balanceNotPermitted`,
        `gasUnchecked`, `catalogueWaitStateUnavailable`, `cctpRouteUpgrading`,
        `creditOnly`, `dexReferencePriceMissing`, `quoteAuthorityUnavailable`,
        `venueRoutingOff`, `venueRoutingStateUnavailable`,
        `indicativeUnavailable`, `marketUnavailable`, `noReferenceMid`,
        `observationBindingUnavailable`, `quoteIdUnavailable`, `stalePrice`.


        New values may be added; treat unknown values as other.
      enum:
        - clockUnavailable
        - assetUnsupported
        - referenceUndeclarable
        - referenceNotAdmitted
        - referenceStale
        - referenceDepth
        - marketDataUnavailable
        - calibrationUnavailable
        - livePriceUnavailable
        - lpQuoteUnavailable
        - platformJurisdictionCountryRequired
        - platformJurisdictionUnavailable
        - platformJurisdictionBlocked
        - venueJurisdictionExcluded
        - workspaceJurisdictionRequired
        - jurisdictionRegionRequired
        - jurisdictionUnavailable
        - venueKeyRefusedLikelyIpAllowlist
        - venueWithdrawalDestinationNotWhitelisted
        - adapterPayloadSerializationFailed
        - basicVenueAccountsUnavailable
        - billingPaymentOverdue
        - walletNotOnChain
        - ccxtVenueRequiresCexLane
        - executionStageDisabled
        - jurisdictionUnproven
        - onboardedVenuesUnavailable
        - onchainAccountDefaultWalletRequired
        - onchainAccountDefaultWalletUnavailable
        - onchainAccountWalletRequired
        - onchainAssetDecimalsMismatch
        - onchainAssetIdentityMismatch
        - onchainAssetUnmapped
        - onchainAssetVariantFiltered
        - onchainWalletUnavailable
        - onchainCatalogueUnavailable
        - onchainDeliverToNotReceivingWallet
        - onchainDeliverToUnverified
        - onchainMarketsUnavailable
        - onchainMarketCatalogUnreadable
        - onchainMarketChainRequired
        - onchainMarketVariantRequired
        - onchainMarketTokenRequired
        - onchainSiteChainUnreadable
        - onchainWalletChainUnreadable
        - onchainWalletInactive
        - onchainWalletNotLinked
        - onchainWalletNotUsable
        - onchainWalletPickAmbiguous
        - onchainWalletWrongNetwork
        - signerLacksRight
        - signerUnavailable
        - signingGrantAmbiguous
        - signingGrantExpired
        - nativeGrantExpiryReapprovalRequired
        - nativeBalanceUnavailable
        - solanaFinalityUnavailable
        - tronSolidBlockUnavailable
        - signingGrantPolicyUnreadable
        - signingGrantPolicyChecking
        - signingGrantRequired
        - signingGrantTokenNotKept
        - signingGrantTokenNotPayable
        - solverChainUnready
        - walletChainMismatch
        - walletNotUsableByYou
        - walletNotVerifiedForAce
        - walletNotWhitelisted
        - withdrawalChainUnsupported
        - accountFeeUnavailable
        - comparisonCostsUnavailable
        - connectionListingUnavailable
        - feeUnverified
        - noPool
        - noPrice
        - noSize
        - notFilled
        - notYetPublished
        - priceArithmetic
        - priceSourceNone
        - referenceMidUnavailable
        - settlementPrecisionUnavailable
        - accountSetupIncomplete
        - admissionUnavailable
        - advancedAccountEligibilityUnavailable
        - advancedAccountStateInconsistent
        - advancedConnectionDisabled
        - advancedConnectionNotConfigured
        - advancedConnectionPaused
        - advancedSettlementNeedsVerification
        - advancedModeDisabled
        - advancedNotAvailableForAccount
        - advancedNotEnabledForAccount
        - allowanceUnavailable
        - acrossCapacityExceeded
        - relayCapacityExceeded
        - acrossChainNotCarried
        - cctpChainNotCarried
        - cctpWalletRequired
        - acrossWalletRequired
        - walletBrowserSigningEvmOnly
        - relayChainNotCarried
        - apiKeyAdvancedWalletUnsupported
        - apiKeyOrganisationWalletScopeRequired
        - grantCapExceeded
        - amountAboveMaximum
        - amountBelowMinimum
        - belowVenueMinimum
        - amountUnreadable
        - amountsUnreadable
        - askFirst
        - authorityUnavailable
        - automationNeverAsks
        - availabilityUnreadable
        - backgroundNeverAsks
        - balanceUnreadable
        - defaultsUnavailable
        - walletHasNoAddress
        - walletUnavailable
        - bondAmountUnreadable
        - bondAssetUnreadable
        - catalogueUnavailable
        - chainFamilyUnknown
        - chainUnrecorded
        - clientSessionRequired
        - clockUnreadable
        - comingSoon
        - connectionChanged
        - connectionRevoked
        - corridorInvalid
        - credential
        - deadlineExceeded
        - defaultsLoading
        - deliverToCalldataUnsupported
        - deliverToTagUnsupported
        - deliverToNotPermitted
        - deliverToUnreadable
        - tradingPermissionRequired
        - directPatienceHarvest
        - economicallyInferior
        - exactAmountConflictsWithCard
        - exactAmountConflictsWithQuote
        - exactOutputDeliveryUnsupported
        - exactOutputEstimateUnavailable
        - exactRouteHypothesisUnavailable
        - expiredOnArrival
        - expiryUnknown
        - feeUnreadable
        - filteredOut
        - firmAskRefused
        - firmAskFundsTimedOut
        - firmAskPreparationTimedOut
        - quotePreparationFailed
        - firmAskAdmissionTimedOut
        - seliniFirmAskMarketsTimedOut
        - seliniFirmAskHandoffTimedOut
        - seliniFirmAskBeforePostTimedOut
        - seliniFirmAskValidationTimedOut
        - seliniFirmAskResponseTimedOut
        - seliniFirmAskTransportFailure
        - rfqQuoteRefusedQuoteNotAvailable
        - rfqQuoteRefusedQuotingDisabled
        - rfqQuoteRefusedClientRfqNotConfigured
        - rfqQuoteRefusedClientProfileNotLoaded
        - rfqQuoteRefusedMarketDisabled
        - rfqQuoteRefusedInvalidQuantity
        - rfqQuoteRefusedInvalidSide
        - rfqQuoteRefusedInvalidCurrency
        - rfqQuoteRefusedPricePrecisionError
        - rfqQuoteRefusedRfqError
        - rfqQuoteRefused
        - venueOutcomeIndeterminate
        - venueBodyUnreadable
        - venueResponseUnmapped
        - venueRateLimited
        - venueQuoteAdmissionExpired
        - placementSignedPastDeadline
        - quoteIdentityConflict
        - symbolUnsupported
        - marketSymbolAmbiguous
        - firmAskPrincipalRequired
        - indicativeRequested
        - freshnessUnknown
        - fundingWindow
        - insufficientLiquidity
        - venueRelationship
        - venueRelationshipUnavailable
        - lpUnknown
        - mfaEnrolmentRequired
        - mfaRequired
        - minimumUnverified
        - mixedNetworks
        - netReceivedUnavailable
        - networkUnrecorded
        - noAddress
        - noCard
        - noFetcher
        - noInventory
        - noLaneForPair
        - noLegs
        - noOnChainCorridor
        - noPlannedVenue
        - noQuote
        - noRpc
        - notConnected
        - notEligible
        - notExecutable
        - orderPayloadMissing
        - outsideTopComposites
        - pairUnmapped
        - sellChainInvalid
        - permissionsUnreadable
        - placeOrderNotPermitted
        - prefundingMarkerUnreadable
        - prefundingRequired
        - indicative
        - priceOnRequest
        - priceOutOfRange
        - priceProtectionInvalid
        - pricingBookOnly
        - productNotQuoted
        - protocolChainMissing
        - providerFeeTreatmentUnknown
        - providerSiteUnrecorded
        - quoteIdUnissuable
        - quoteNotHeld
        - buyChainInvalid
        - buyAmountUnsupported
        - exactOutputDebitUnavailable
        - pairNotServed
        - accountFundingReadUnverified
        - quoteReconfirmationRequired
        - quoteRejected
        - keyrockSecurityCatalogueUnavailable
        - venueAnsweredAfterQuoteWindow
        - venueQuoteIntentMismatch
        - payExactUnsupported
        - receiveWalletNotServed
        - referenceMidUnreadable
        - referencePriceUnavailable
        - registryUnavailable
        - releaseRecheckUnavailable
        - requestUnbuildable
        - routeLegChainUnknown
        - routeLegUnnamed
        - routeLegUnplanned
        - routeUnavailable
        - secondFactorUnreadable
        - shortfallUnmeasured
        - shortfallUnreadable
        - singleChainVenue
        - siteChainUnreadable
        - sizeNotEligible
        - submitOrderBlocked
        - takerOnboardingIncomplete
        - tierNotQuoted
        - tradePaused
        - venueConnectionStorageUnavailable
        - venueDataStale
        - venueDeclined
        - venueNotConnected
        - venueNotEnabledForWorkspace
        - venueNotListed
        - venueTradeKeyUnavailable
        - venueTradeScopeRequired
        - venueTradeUnreadable
        - venueUnavailable
        - walletRefused
        - withdrawalFeeUnread
        - acrossRoutedViaCctp
        - apiKeyOrganisationWalletNotAllowlisted
        - balanceAvailabilityUnconfirmed
        - bankDestinationUnavailable
        - bebopJamKeyNotEnabled
        - bebopJamQuoteDeclined
        - bebopTokenUnavailable
        - relayCurrencyUnsupported
        - relaySwapImpactTooHigh
        - tetrafiSolverCallbackNotAuthorized
        - tradingLinkSnapshotChanged
        - tradingLinkSnapshotUnavailable
        - uniswapChainReadUnavailable
        - uniswapInsufficientDepth
        - uniswapQuoteUnreadable
        - uniswapUnwrapAboveDailyCap
        - uniswapUnwrapAboveTradeCap
        - uniswapRouteNotGranted
        - venueNotEnabled
        - askLimitReached
        - balanceMeaningUnconfirmed
        - bebopQuorumWalletTooSlow
        - bebopWalletQuorumUnreadable
        - bebopBrowserWalletUnsupported
        - connectionNotConfigured
        - deliveryAccountNetworkUnavailable
        - deliveryAccountUnavailable
        - destinationCannotSendOnChain
        - dexReferencePriceUnavailable
        - firmQuoteLimited
        - fundingAccountNetworkUnavailable
        - fundingAccountUnavailable
        - insufficientDepth
        - missingPermission
        - needsNativeGas
        - needsWallet
        - notPriced
        - payInTermsUnavailable
        - pilotTradeCapExceeded
        - pilotMinimumAboveTradeCap
        - platformFeeRateUnavailable
        - pricingBookPairUnserved
        - settlementDeclarationUnavailable
        - settlementNotAvailable
        - timedOut
        - timedOutBeforeSend
        - tradingSourceNetworkUnavailable
        - tradingSourceNotLinked
        - venueEnablementRechecking
        - venueEnablementUnavailable
        - venueListingTimedOut
        - venuePoliciesUnavailable
        - multiliquidPaused
        - multiliquidAssetNotAccepted
        - walletNotAllowlistedForAsset
        - walletBlacklisted
        - multiliquidPriceInvalid
        - multiliquidStablePriceOutOfBand
        - multiliquidInsufficientLiquidity
        - multiliquidProviderPrefundUnavailable
        - multiliquidDailyLimitReached
        - eligibilityUnverifiable
        - multiliquidInsufficientBalance
        - multiliquidWalletFundsInsufficient
        - multiliquidInsufficientAllowance
        - walletTokenAccountFrozen
        - multiliquidAmountInTooHigh
        - multiliquidAmountOutTooLow
        - multiliquidInsufficientLpFeeBalance
        - multiliquidTransferFeeNotSupported
        - multiliquidParticipantUnavailable
        - multiliquidChainNotSupported
        - multiliquidObservationWalletUnavailable
        - privyMultiliquidArrayPinsUnsupported
        - cctpDestinationNotGranted
        - signingGrantNativeOnly
        - quoteRejectedInsufficientBalance
        - walletGateUnreadable
        - policyBlocked
        - treasuryPolicyApprovalRequired
        - destinationTagRequired
        - destinationTagMismatch
        - destinationTagInvalid
        - acrossBasicLaneNotEnabled
        - creditReadUnavailable
        - exactOutputFirmAskUnsupported
        - grantEndsBeforeVenueFunding
        - jurisdictionNotServed
        - pairUnsupported
        - requesterJurisdictionUnknown
        - venueAccountHasNoKey
        - venueAssessmentRequired
        - venueConnectionInvalid
        - venueReenableRequiresNewCredentials
        - venueTradingPaused
        - balanceNotObserved
        - notPermitted
        - balanceNotPermitted
        - gasUnchecked
        - catalogueWaitStateUnavailable
        - cctpRouteUpgrading
        - creditOnly
        - dexReferencePriceMissing
        - quoteAuthorityUnavailable
        - venueRoutingOff
        - venueRoutingStateUnavailable
        - indicativeUnavailable
        - marketUnavailable
        - noReferenceMid
        - observationBindingUnavailable
        - quoteIdUnavailable
        - stalePrice
      type: string
      x-extensible-enum: true
    IsoDuration:
      description: An ISO 8601 duration, e.g. PT3S or PT2M.
      examples:
        - PT120S
      format: duration
      pattern: >-
        ^PT(?:[0-9]+H(?:[0-9]+M)?(?:[0-9]+(?:\.[0-9]{1,3})?S)?|[0-9]+M(?:[0-9]+(?:\.[0-9]{1,3})?S)?|[0-9]+(?:\.[0-9]{1,3})?S)$
      type: string
    TakerTransaction:
      description: One transaction the Taker sends itself (an approval included).
      properties:
        chain:
          $ref: '#/components/schemas/Caip2Chain'
        data:
          description: Hex calldata (`0x…`).
          type: string
        to:
          type: string
        value:
          description: Native value in base units, as a decimal string.
          type: string
      required:
        - chain
        - data
        - to
        - value
      type: object
    FundInstructions:
      description: >-
        What to fund and how. Bank funding carries only a privacy-safe summary
        and a

        non-bearer reference to the separately authorized reveal read.


        New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          bankDeposit: '#/components/schemas/FundInstructions/oneOf/1'
          depositFirstNotOffered: '#/components/schemas/FundInstructions/oneOf/4'
          nativeGas: '#/components/schemas/FundInstructions/oneOf/3'
          venueDeposit: '#/components/schemas/FundInstructions/oneOf/0'
          walletTopUp: '#/components/schemas/FundInstructions/oneOf/2'
        propertyName: kind
      oneOf:
        - properties:
            address:
              type: string
            asset:
              type: string
            chainRef:
              type: string
            expiresAt:
              format: date-time
              type: string
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - venueDeposit
              type: string
              x-extensible-enum: true
            memo:
              type:
                - string
                - 'null'
            networkCode:
              type: string
            networkConfirmed:
              description: >-
                False when the venue reports no network for this address:
                `networkCode`

                is empty and `chainRef` is the caller's selection, which the
                customer

                must confirm with the venue before sending.
              type: boolean
            observedAt:
              format: date-time
              type: string
            tokenContract:
              type: string
          required:
            - asset
            - chainRef
            - networkCode
            - networkConfirmed
            - address
            - tokenContract
            - observedAt
            - expiresAt
            - kind
          type: object
        - description: >-
            The only bank-deposit payload allowed in an asset-pair quote,
            request readback or

            copied durable/evidence body. It carries no receiving coordinates or
            payment memo.

            Fund, then explicitly requote; this summary never authorizes a
            transfer or order.
          properties:
            accountLast4:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/BankAccountSuffix'
                  description: >-
                    An already-qualified masked suffix, not external account
                    ownership proof.
              x-undiscriminated-union-reason: >-
                Nullable value: JSON null has no properties and cannot carry a
                discriminator.
            amount:
              $ref: '#/components/schemas/DecimalAmount'
            bankDisplayName:
              type:
                - string
                - 'null'
            expiresAt:
              description: >-
                UTC ISO instant, or null when expiry is UNKNOWN. Null never
                means no expiry.
              format: date-time
              type:
                - string
                - 'null'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - bankDeposit
              type: string
              x-extensible-enum: true
            revealRef:
              $ref: '#/components/schemas/BankFundingRevealRef'
          required:
            - accountLast4
            - amount
            - bankDisplayName
            - expiresAt
            - kind
            - revealRef
          type: object
        - description: >-
            The quote's own bound pay wallet (an organisation wallet on a Basic
            on-chain

            venue account) holds less than the trade debits: send `amount` of
            `asset` to

            `address` on `chain`, then get a new price. `walletId` is the
            binding target the

            source's `topUp` fix names; `tokenContract` is the registry's
            deployment address

            of `asset` on `chain` (the zero address for the chain's native
            coin).
          properties:
            address:
              type: string
            amount:
              $ref: '#/components/schemas/DecimalAmount'
            asset:
              $ref: '#/components/schemas/AssetId'
            chain:
              $ref: '#/components/schemas/Caip2Chain'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - walletTopUp
              type: string
              x-extensible-enum: true
            tokenContract:
              type: string
            walletId:
              type: string
          required:
            - walletId
            - address
            - chain
            - asset
            - tokenContract
            - amount
            - kind
          type: object
        - description: Native gas for a transaction the Taker sends itself.
          properties:
            amount:
              $ref: '#/components/schemas/DecimalAmount'
            asset:
              $ref: '#/components/schemas/AssetId'
            chain:
              $ref: '#/components/schemas/Caip2Chain'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - nativeGas
              type: string
              x-extensible-enum: true
          required:
            - chain
            - amount
            - asset
            - kind
          type: object
        - description: >-
            A bank-funded venue account is short and deposit first isn't offered
            on it:

            its bank side declares no deposit instructions, or nothing that

            credits a declared deposit. The account is funded from its own
            funding details,

            then the quote is asked again. `amount` is the shortfall in
            `currency`;

            `connectionId` is the venue account to fund; `reason` is the venue's
            declared

            sentence for why ("Keyrock gives no deposit reference for bank
            transfers, so

            TetraFi can't tell your deposit apart"), product copy without a
            final period.
          properties:
            amount:
              $ref: '#/components/schemas/DecimalAmount'
            connectionId:
              type: string
            currency:
              type: string
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - depositFirstNotOffered
              type: string
              x-extensible-enum: true
            reason:
              type: string
          required:
            - connectionId
            - amount
            - currency
            - reason
            - kind
          type: object
      x-extensible-enum: true
    RequoteNeed:
      description: >-
        A funding or delivery selection a requote needs filled. An empty `needs`
        means requote as is.


        New values may be added; treat unknown values as other.
      enum:
        - wallet:evm
        - wallet:solana
        - wallet:tron
        - account
        - bankAccount
        - deliverTo
      type: string
      x-extensible-enum: true
    IncludedReason:
      description: >-
        The refusal the related resource's own GET answered, or a read the
        expansion could not make.
      properties:
        error:
          description: >-
            The stable error code, for example `DESTINATION_NOT_FOUND` or
            `INSUFFICIENT_PERMISSION`.

            An open set: handle unknown codes by `status`.
          type: string
        status:
          description: The HTTP status the related GET answered.
          format: int32
          minimum: 0
          type: integer
      required:
        - error
        - status
      type: object
    TradeActionRequired:
      description: An action a person must take before the order can progress.
      properties:
        code:
          description: >-
            Stable machine code: `AWAITING_TAKER_SIGNATURE`, `PRICE_MOVED`,
            `NEXT_LEG_DID_NOT_RUN`, `FINISH_TRADE`,

            `STOPPED` or `SUPPORT_REVIEW`.
          type: string
        message:
          description: Human-readable explanation of the action.
          type: string
      required:
        - code
        - message
      type: object
    TradeApiKey:
      properties:
        keyId:
          type: string
        name:
          type:
            - string
            - 'null'
      required:
        - keyId
      type: object
    OrderChannel:
      description: New values may be added; treat unknown values as other.
      enum:
        - ui
        - api
        - whitelabel
        - embedded
      type: string
      x-extensible-enum: true
    DeferredSettlementInfo:
      description: >-
        Deferred LP settlement/withdrawal tracking that is separate from the

        order's primary execution status. A deferred order can be `Executed`
        while

        this object still reports a settlement window or withdrawal state.
      properties:
        autoWithdraw:
          type: boolean
        estimatedSettlementAvailableAt:
          format: date-time
          type:
            - string
            - 'null'
        executedAt:
          format: date-time
          type:
            - string
            - 'null'
        settlementWindowHours:
          format: int32
          minimum: 0
          type:
            - integer
            - 'null'
        stage:
          type: string
        withdrawalStatus:
          type:
            - string
            - 'null'
        withdrawalTrackingId:
          type:
            - string
            - 'null'
        withdrawalTxHash:
          type:
            - string
            - 'null'
      required:
        - stage
        - autoWithdraw
      type: object
    DeliveredBuyProvenance:
      description: New values may be added; treat unknown values as other.
      enum:
        - measured
        - quoted
      type: string
      x-extensible-enum: true
    ExecutionPriceDisplay:
      description: User-facing execution price for a read model.
      properties:
        baseSymbol:
          type:
            - string
            - 'null'
        quoteSymbol:
          type:
            - string
            - 'null'
        source:
          $ref: '#/components/schemas/ExecutionPriceSource'
        value:
          type:
            - string
            - 'null'
      required:
        - source
      type: object
    TradeLifecycleStatus:
      properties:
        bucket:
          $ref: '#/components/schemas/TradeLifecycleBucket'
          description: >-
            Which history bucket this lifecycle belongs to: decided by the same
            arm that

            chose `primary`, so a filter on it can never disagree with the
            label.
        execution:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeLifecycleStep'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        flowKind:
          $ref: '#/components/schemas/TradeLifecycleFlowKind'
        isTerminal:
          type: boolean
        primary:
          $ref: '#/components/schemas/TradeLifecycleStep'
        rank:
          format: int32
          minimum: 0
          type: integer
        rawDeferredStatus:
          type:
            - string
            - 'null'
        rawStatus:
          $ref: '#/components/schemas/TradeLifecycleRawStatus'
        settlement:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeLifecycleStep'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        withdrawal:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeLifecycleStep'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
      required:
        - flowKind
        - primary
        - bucket
        - isTerminal
        - rank
        - rawStatus
      type: object
    TradeMakerAttribution:
      description: >-
        The recorded maker of an order; identity only, never operational or
        credential data.
      properties:
        displayName:
          type: string
        executionTypeId:
          type: string
      required:
        - executionTypeId
        - displayName
      type: object
    NextAction:
      description: >-
        What the order needs from its reader next. Absent when nothing is
        needed.


        Each variant is a distinct situation with a distinct remedy; none
        collapses onto

        another, and a state the backend cannot decide yields no action rather
        than a

        `signNextLeg` it cannot back.


        New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          finishTrade: '#/components/schemas/NextAction/oneOf/5'
          payoutFeeRose: '#/components/schemas/NextAction/oneOf/0'
          priceMoved: '#/components/schemas/NextAction/oneOf/3'
          provideDestination: '#/components/schemas/NextAction/oneOf/1'
          retryNextLeg: '#/components/schemas/NextAction/oneOf/4'
          signNextLeg: '#/components/schemas/NextAction/oneOf/2'
          stopped: '#/components/schemas/NextAction/oneOf/6'
          supportReview: '#/components/schemas/NextAction/oneOf/7'
        propertyName: kind
      oneOf:
        - description: The payout remains unsent with its venue-account hold retained.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - payoutFeeRose
              type: string
              x-extensible-enum: true
            legId:
              format: uuid
              type: string
          required:
            - legId
            - kind
          type: object
        - description: >-
            A bound wallet destination is no longer usable. Funds remain at the
            LP.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - provideDestination
              type: string
              x-extensible-enum: true
            legId:
              format: uuid
              type: string
            reason:
              type: string
          required:
            - legId
            - reason
            - kind
          type: object
        - description: >-
            The taker signs the next leg. `legIndex` 0 is an FX-first order that
            has not

            started: its funds are still in the taker's wallet.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - signNextLeg
              type: string
              x-extensible-enum: true
            legIndex:
              format: int32
              minimum: 0
              type: integer
          required:
            - legIndex
            - kind
          type: object
        - description: >-
            The fresh price moved past the tolerance. The taker may accept it
            once.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - priceMoved
              type: string
              x-extensible-enum: true
            offer:
              $ref: '#/components/schemas/ContinuationRepricingOffer'
          required:
            - offer
            - kind
          type: object
        - description: >-
            A leg did not run and the funds came back to the taker: sign it
            again, on the

            same order.
          properties:
            attempt:
              description: The attempt the retry starts (the ended attempts plus one).
              format: int32
              minimum: 0
              type: integer
            fundsAt:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/FundsLocation'
              x-undiscriminated-union-reason: >-
                Nullable value: JSON null has no properties and cannot carry a
                discriminator.
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - retryNextLeg
              type: string
              x-extensible-enum: true
            legIndex:
              format: int32
              minimum: 0
              type: integer
            reason:
              type: string
          required:
            - legIndex
            - attempt
            - reason
            - kind
          type: object
        - description: >-
            The route ended with the funds in the taker's wallet part-way, and
            no re-quote

            owner can resume it: finish the trade from there with a new order.
          properties:
            fundsAt:
              $ref: '#/components/schemas/FundsLocation'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - finishTrade
              type: string
              x-extensible-enum: true
            reason:
              type: string
          required:
            - fundsAt
            - reason
            - kind
          type: object
        - description: The taker stopped waiting, or the wait reached its bound.
          properties:
            fundsAt:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/FundsLocation'
              x-undiscriminated-union-reason: >-
                Nullable value: JSON null has no properties and cannot carry a
                discriminator.
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - stopped
              type: string
              x-extensible-enum: true
            reason:
              $ref: '#/components/schemas/StopReason'
          required:
            - reason
            - kind
          type: object
        - description: An operator must review the order; the taker cannot act on it.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - supportReview
              type: string
              x-extensible-enum: true
            reason:
              type: string
          required:
            - reason
            - kind
          type: object
      x-extensible-enum: true
    NextActor:
      description: >-
        Who must act before the order can progress, shared by the order read and
        list.


        New values may be added; treat unknown values as other.
      enum:
        - taker
        - support
        - counterparty
        - none
      type: string
      x-extensible-enum: true
    TradeRouteDisplay:
      description: The sold and bought sides of a trade for display read models.
      properties:
        buy:
          $ref: '#/components/schemas/AssetAmountDisplay'
          description: What the order buys.
        sell:
          $ref: '#/components/schemas/AssetAmountDisplay'
          description: What the order sells.
      required:
        - sell
        - buy
      type: object
    RoutingPath:
      description: >-
        How an LP is available to a requesting workspace: `{"type": "direct"}`,
        or

        `{"type": "via_broker", "brokerWorkspaceId": "...", "brokerName":
        "..."}`.


        New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          direct: '#/components/schemas/RoutingPath/oneOf/0'
          via_broker: '#/components/schemas/RoutingPath/oneOf/1'
        propertyName: type
      oneOf:
        - description: >-
            LP has a direct bilateral relationship with the requesting
            workspace.
          properties:
            type:
              description: New values may be added; treat unknown values as other.
              enum:
                - direct
              type: string
              x-extensible-enum: true
          required:
            - type
          type: object
        - description: LP available through an affiliated broker.
          properties:
            brokerName:
              type: string
            brokerWorkspaceId:
              format: uuid
              type: string
            type:
              description: New values may be added; treat unknown values as other.
              enum:
                - via_broker
              type: string
              x-extensible-enum: true
          required:
            - brokerWorkspaceId
            - brokerName
            - type
          type: object
      x-extensible-enum: true
    TradeHistoryStatus:
      description: New values may be added; treat unknown values as other.
      enum:
        - created
        - pending
        - executing
        - executed
        - settling
        - settled
        - finalized
        - failed
        - refunded
        - no_fill_confirmed
        - unknown
      type: string
      x-extensible-enum: true
    VenueTradeAmountBasis:
      description: |-
        Which amount a venue trade row's `amountUsd` values.

        New values may be added; treat unknown values as other.
      enum:
        - executed
        - requested
      type: string
      x-extensible-enum: true
    VenueTradeHistoryLeg:
      description: >-
        One leg of a venue trade in the trade history, named sell or buy as in
        POST /quotes. amount is the consented bound in exact decimal units of
        asset (on sell the most spent, on buy the least received); absent when
        not recorded, never zero.
      properties:
        amount:
          description: >-
            The consented bound in exact decimal units of `asset`: on `sell` the
            most the trade may

            spend, on `buy` the least it must receive. Absent when not recorded,
            never `0`.
          type:
            - string
            - 'null'
        asset:
          type: string
      required:
        - asset
      type: object
    DebitExpirySignatureStatus:
      description: New values may be added; treat unknown values as other.
      enum:
        - recorded
        - unconfirmed
      type: string
      x-extensible-enum: true
    VenueTradePriceUnit:
      description: >-
        Unit of a price: `quoteAsset / baseAsset` means one base asset costs
        this many quote assets.
      properties:
        baseAsset:
          type: string
        quoteAsset:
          type: string
      required:
        - baseAsset
        - quoteAsset
      type: object
    VenueTradeExecutionStatus:
      description: >-
        A venue trade's execution status, in camelCase like the order `status`
        (`outcomeUnknown`).


        New values may be added; treat unknown values as other.
      enum:
        - notSubmitted
        - dispatching
        - outcomeUnknown
        - filled
        - unfilled
        - needsReview
      type: string
      x-extensible-enum: true
    VenueTradeFinancials:
      description: >-
        A venue trade's recorded money terms. Each field is a stored fact or
        absent; an absent fact is never zero.
      properties:
        fee:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueTradeFillFee'
              description: The venue's fee as recorded with the fill; absent before a fill.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        legs:
          description: >-
            Its payment legs (bank payout, pay-in, wallet payout), as the order
            page reads them:

            rail, state, payout breakdown and a destination reference, never
            bank coordinates.
          items:
            $ref: '#/components/schemas/TradeLegFacts'
          type: array
        quotedOutput:
          description: The confirmed quote's output, beside what was received.
          type:
            - string
            - 'null'
      type: object
    VenueTradeNotSentReason:
      description: >-
        Why a claimed trade was proven not sent. An unclassified cause is
        NOT_SENT_UNCLASSIFIED, never free text.


        New values may be added; treat unknown values as other.
      enum:
        - QUOTE_RECONFIRMATION_REQUIRED
        - VENUE_ACCEPT_ADMISSION_REFUSED
        - VENUE_SESSION_ACQUIRE_TIMEOUT
        - VENUE_GRID_CHANGED
        - VENUE_GRID_UNREADABLE
        - VENUE_REFUSED_BEFORE_ACCEPTANCE
        - LP_TRADING_REFUSED_UNSENT
        - COMPLIANCE_AUDIT_UNRECORDED
        - ON_CHAIN_UNSENT
        - BOOK_SELL_LIMIT_UNREPRESENTABLE
        - VENUE_DISPATCH_AUTHORITY_UNAVAILABLE
        - BOOK_PLACEMENT_PRICE_UNRECORDED_UNSENT
        - VENUE_ORDER_ABSENT_PAST_HORIZON
        - VENUE_REQUEST_REFUSED_UNSENT
        - NOT_SENT_UNCLASSIFIED
      type: string
      x-extensible-enum: true
    VenueTradeOutcomeCode:
      description: New values may be added; treat unknown values as other.
      enum:
        - confirmed_fill
        - fill_requires_review
        - rfq_closed_no_order
        - confirmed_no_fill
        - adjudicated_not_placed
        - bridge_not_sent_funds_at_source
        - bridge_refunded_to_source
        - debit_authority_expired
        - awaiting_provider_execution
        - not_sent
        - provider_outcome_unknown
      type: string
      x-extensible-enum: true
    VenueTradePlacedBy:
      description: |-
        Who placed a venue trade, as named on its order read and trade history.

        New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          apiKey: '#/components/schemas/VenueTradePlacedBy/oneOf/1'
          member: '#/components/schemas/VenueTradePlacedBy/oneOf/0'
        propertyName: kind
      oneOf:
        - description: A workspace member; `name` is first and last name, else the email.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - member
              type: string
              x-extensible-enum: true
            name:
              type: string
            userId:
              type: string
          required:
            - userId
            - name
            - kind
          type: object
        - description: An API key; `name` is its label, absent when the key has none.
          properties:
            keyId:
              type: string
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - apiKey
              type: string
              x-extensible-enum: true
            name:
              type:
                - string
                - 'null'
          required:
            - keyId
            - kind
          type: object
      x-extensible-enum: true
    QuotedSettlement:
      allOf:
        - $ref: '#/components/schemas/SettlementTerms'
        - properties:
            window:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/SettlementWindowTerms'
              x-undiscriminated-union-reason: >-
                Nullable value: JSON null has no properties and cannot carry a
                discriminator.
          type: object
      description: >-
        A quote's, firm answer's and executed trade's settlement: the venue's
        declared terms and,

        for delayed timing only, the window. `{method, firstLeg?, timing,
        window?}` on the wire.
    TradeSettlementCarriedWindow:
      description: >-
        The later window a delayed trade's amounts were carried into: its window
        obligations were

        netted into that window's cumulative statement rather than paid. The
        trade settles there, by

        `settlesBy` (the window's payment deadline, else its completion; absent
        while unconfirmed).
      properties:
        settlesBy:
          format: date-time
          type:
            - string
            - 'null'
        windowId:
          format: uuid
          type: string
      required:
        - windowId
      type: object
    TradeSettlementState:
      description: >-
        Where an executed trade's settlement stands: the same answer on the
        trade, its order and the

        order's `order.updated` webhook. Absent before the trade fills (except
        `inTransit` and a

        refunded on-chain trade's `failed`), and on a credit venue's trade
        recorded without

        settlement terms. Clients must tolerate values added later.


        New values may be added; treat unknown values as other.
      enum:
        - settled
        - awaitingWindow
        - awaitingPayment
        - partiallySettled
        - overdue
        - disputed
        - failed
        - inTransit
      type: string
      x-extensible-enum: true
    TradeSettlementStatement:
      description: >-
        Whether the statement of the window a delayed trade settles in is out:
        `issued` once the

        window's statement was produced, `failed` when producing it failed for
        good, else `pending`.

        Absent on a trade that settles without a window. Clients must tolerate
        values added later.


        New values may be added; treat unknown values as other.
      enum:
        - pending
        - issued
        - failed
      type: string
      x-extensible-enum: true
    VenueTradeStatedPrice:
      allOf:
        - $ref: '#/components/schemas/VenueTradePriceUnit'
        - properties:
            basis:
              $ref: '#/components/schemas/VenueTradePriceBasis'
            value:
              type: string
          required:
            - value
            - basis
          type: object
      description: >-
        Confirmed quote-asset units per one base asset; not a venue quote or an
        indicative price.
    BridgeTransferMode:
      description: |-
        Bridge speed/finality mode. Fast modes typically cost a higher
        protocol fee and settle in seconds; standard modes wait for hard
        finality. Forwarding fees apply independently to both.

        New values may be added; treat unknown values as other.
      enum:
        - fast
        - standard
      type: string
      x-extensible-enum: true
    VenueFillSummary:
      description: >-
        Exact reported amounts across matched completed requests, not settlement
        or valuation.
      properties:
        amountUnit:
          type: string
        candidateLimit:
          description: >-
            Source requests admitted before the lifecycle filter; an exceeded
            cap refuses the read.
          format: int32
          minimum: 0
          type: integer
        filledRequestCount:
          format: int64
          minimum: 0
          type: integer
        groups:
          items:
            $ref: '#/components/schemas/VenueFillQuantityGroup'
          type: array
        source:
          $ref: '#/components/schemas/FillSource'
      required:
        - source
        - amountUnit
        - candidateLimit
        - filledRequestCount
        - groups
      type: object
    OwnedSolverIdentity:
      description: >-
        Minimal owned identity for historical LP reads. No connection
        configuration,

        credentials, routing grants or counterparty identities are disclosed.
      properties:
        name:
          type:
            - string
            - 'null'
        retiredAt:
          format: date-time
          type:
            - string
            - 'null'
        solverId:
          type: string
        status:
          $ref: '#/components/schemas/SolverStatus'
      required:
        - solverId
        - status
      type: object
    VenueFillFilter:
      description: >-
        Exact recorded account selectors. Null axes remain unrestricted; no
        name,

        case or request-direction normalization changes the selected population.
      properties:
        executionTypeId:
          description: The selected execution type; null for an unrestricted axis.
          type:
            - string
            - 'null'
        inputAsset:
          type:
            - string
            - 'null'
        outputAsset:
          type:
            - string
            - 'null'
        providerSite:
          type:
            - string
            - 'null'
      required:
        - executionTypeId
        - providerSite
        - inputAsset
        - outputAsset
      type: object
    RecordedRiskTradeScope:
      description: >-
        The recorded business population and original rolling Risk window.

        `asOf` keeps the source's RFC 3339 text, including microsecond
        precision.

        It does not record which trades were in the population at that time.
      properties:
        asOf:
          type: string
        counterparty:
          type: string
        windowSeconds:
          format: int64
          type: integer
      required:
        - counterparty
        - asOf
        - windowSeconds
      type: object
    CapabilityBlockerCode:
      description: |-
        Stable machine-readable blocker codes returned by the capability gate.

        New values may be added; treat unknown values as other.
      enum:
        - WORKSPACE_NOT_FOUND
        - WORKSPACE_NOT_ACTIVE
        - WORKSPACE_SUSPENDED
        - PARENT_WORKSPACE_INACTIVE
        - INSUFFICIENT_PERMISSION
        - WORKSPACE_TYPE_UNSUPPORTED
        - BASE_PROFILE_INCOMPLETE
        - BASE_PROFILE_UNREADABLE
        - KYB_NOT_VERIFIED
        - KYC_NOT_VERIFIED
        - SANCTIONS_FLAGGED
        - MEMBER_COMPLIANCE_FROZEN
        - MEMBER_COMPLIANCE_DENIED
        - SCREENING_PENDING
        - SCREENING_UNAVAILABLE
        - GEO_RESTRICTED
        - WALLET_NOT_VERIFIED
        - DIRECT_USER_NOT_FOUND
        - DIRECT_USER_SUSPENDED
        - DIRECT_USER_KYC_NOT_VERIFIED
        - INSUFFICIENT_SCOPE
        - TREASURY_DISABLED
        - NO_USABLE_CREDENTIAL
        - CROSS_OWNER_WRITE_DENIED
        - AGGREGATE_SCOPE_READ_ONLY
        - OWNER_SCOPE_REQUIRED
        - VENUE_OPERATION_UNSUPPORTED
        - TAKER_ONBOARDING_INCOMPLETE
        - TAKER_ADMISSION_UNAVAILABLE
      type: string
      x-extensible-enum: true
    CapabilityUnlockEstimate:
      description: >-
        Coarse time-to-unlock class. The UI owns the copy; figures are
        engineering

        estimates until the KYB queue and Sumsub webhooks supply measured
        values.


        New values may be added; treat unknown values as other.
      enum:
        - minutes
        - formsThenReview
        - adminAction
        - otherParty
        - unknown
        - notUnlockable
      type: string
      x-extensible-enum: true
    CapabilityUnlockStep:
      description: |-
        Stable key for the step that unlocks a blocked capability. The backend
        names the step; the UI owns the step-to-route map. Never a UI route.

        New values may be added; treat unknown values as other.
      enum:
        - finishOnboarding
        - companyDetails
        - kybProfile
        - kycDialog
        - linkWallet
        - askAdmin
        - contactBroker
        - manageDirectUsers
        - manageApiKey
        - connectCustodian
        - switchAccountScope
        - contactSupport
        - awaitScreening
        - none
      type: string
      x-extensible-enum: true
    AssumedWindowBoundary:
      description: >-
        The assumption a window's boundary rests on: the zone whose calendar day
        (or local time)

        the boundary assumes, the decision that set it, and the LP whose answer
        replaces it.
      properties:
        lpName:
          type: string
        source:
          description: >-
            Where the assumed boundary came from, as recorded in the settlement
            schedule; free text.
          type: string
        timeZone:
          type: string
      required:
        - timeZone
        - source
        - lpName
      type: object
    SettlementCadence:
      description: >-
        How often a settlement schedule's windows occur (the schedule owns the
        terms).


        New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          daily: '#/components/schemas/SettlementCadence/oneOf/1'
          intraday: '#/components/schemas/SettlementCadence/oneOf/0'
          multiDay: '#/components/schemas/SettlementCadence/oneOf/2'
        propertyName: kind
      oneOf:
        - properties:
            dayBasis:
              $ref: '#/components/schemas/DayBasis'
            everyHours:
              format: int32
              minimum: 0
              type:
                - integer
                - 'null'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - intraday
              type: string
              x-extensible-enum: true
            localTimes:
              items:
                type: string
              type:
                - array
                - 'null'
          required:
            - dayBasis
            - kind
          type: object
        - properties:
            dayBasis:
              $ref: '#/components/schemas/DayBasis'
            days:
              format: int32
              minimum: 0
              type: integer
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - daily
              type: string
              x-extensible-enum: true
          required:
            - days
            - dayBasis
            - kind
          type: object
        - properties:
            dayBasis:
              $ref: '#/components/schemas/DayBasis'
            days:
              format: int32
              minimum: 0
              type: integer
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - multiDay
              type: string
              x-extensible-enum: true
          required:
            - days
            - dayBasis
            - kind
          type: object
      x-extensible-enum: true
    WindowSettlementBasis:
      description: >-
        What completes a window's settlement. `clock`: the occurrence's
        confirmed completion time

        (`settlesBy`). `onAgreement`: the LP issues the window's statement and
        the trade settles

        once that statement is agreed (Keyrock), so the window states no clock
        time.


        New values may be added; treat unknown values as other.
      enum:
        - clock
        - onAgreement
      type: string
      x-extensible-enum: true
    Caip2Chain:
      description: >-
        A CAIP-2 chain id (`eip155:8453`, `solana:<genesis>`, `tron:shasta`),
        syntax-checked:

        a namespace of 3 to 8 lowercase letters, digits or `-`, and a reference
        of 1 to 32

        letters, digits, `-` or `_`. Compared exactly, as CAIP-2 references are
        case-sensitive.
      example: eip155:8453
      type: string
    BankAccountSuffix:
      description: >-
        An already-qualified masked account suffix of 1 to 4 ASCII
        letters/digits, not external account ownership proof. Never truncate a
        full account number.
      examples:
        - A1b2
      maxLength: 4
      minLength: 1
      pattern: ^[A-Za-z0-9]{1,4}$
      type: string
    DecimalAmount:
      description: >-
        A non-negative decimal string in Asset units (`"10000"`, `"9994.0"`):
        digits with an

        optional fraction, no sign, exponent or leading zero. Never a float and
        never base

        units. A request amount must also be positive (`INVALID_AMOUNT`); a fee
        or a

        known balance may be zero.
      example: '10000'
      type: string
    BankFundingRevealRef:
      description: >-
        Non-bearer lookup metadata for deposit instructions. Possession grants
        no authority. Each reveal requires current wallet-view authority and
        exact account membership; an API key additionally needs treasury_read.
        Missing and foreign accounts share a refusal. Quotes never fetch these
        instructions.
      properties:
        connectionId:
          description: >-
            The native held leg's exact connection id, never a
            first/sole-connection guess.
          type: string
        currency:
          type: string
        providerBankId:
          description: >-
            The provider's linked-bank id when required by that venue; otherwise
            unknown/null.
          type:
            - string
            - 'null'
      required:
        - connectionId
        - currency
        - providerBankId
      type: object
    AssetId:
      description: >-
        A registry Asset id (`USDC`, `USDe`). Matched case-insensitively against
        the catalogue,

        which answers it in the registry's own spelling.
      example: USDC
      type: string
    ExecutionPriceSource:
      description: |-
        Source used for the execution price exposed by read-model APIs.

        New values may be added; treat unknown values as other.
      enum:
        - storedQuotePrice
        - derivedFromAmounts
        - unavailable
      type: string
      x-extensible-enum: true
    TradeLifecycleBucket:
      description: |-
        The history bucket chosen by the server's lifecycle projection.

        New values may be added; treat unknown values as other.
      enum:
        - inProgress
        - completed
        - failed
        - refunded
        - unknown
      type: string
      x-extensible-enum: true
    TradeLifecycleStep:
      description: >-
        A compact backend-owned display status for personal trade/order
        surfaces.


        `orders.settlement_status` remains a coarse analytics bucket; UI should
        use

        this shape for user-facing execution/settlement state.
      properties:
        key:
          $ref: '#/components/schemas/TradeLifecycleStepKey'
        label:
          type: string
        tone:
          type: string
      required:
        - key
        - label
        - tone
      type: object
    TradeLifecycleFlowKind:
      description: New values may be added; treat unknown values as other.
      enum:
        - instant
        - deferredAutoWithdraw
        - deferredManual
        - venueAccount
      type: string
      x-extensible-enum: true
    TradeLifecycleRawStatus:
      description: New values may be added; treat unknown values as other.
      enum:
        - created
        - pending
        - executing
        - executed
        - post_filled
        - settling
        - settled
        - finalized
        - awaiting_lp_settlement
        - pre_claimed
        - failed
        - refunded
        - filled
        - unfilled
        - checking_balance
        - pending_deposit
        - deposit_confirmed
        - quote_requested
        - quote_received
        - accounting_pending
        - accounting_submitted
        - withdrawal_requested
        - pending_withdrawal
        - no_fill_confirmed
        - not_submitted
        - dispatching
        - outcome_unknown
        - needs_review
        - unknown
      type: string
      x-extensible-enum: true
    ContinuationRepricingOffer:
      description: >-
        The fresh price a continuation was refused at, left for the taker to
        accept once.


        Carried by the 409 `QUOTE_PRICE_MOVED` body. It binds one attempt of one
        leg and

        expires; accepting it rebaselines only that attempt.
      properties:
        acceptedAmount:
          description: >-
            The reference the order held the leg to (the price accepted at quote
            time, or a

            re-price accepted earlier in this attempt), in base units.
          type: string
        asset:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/AssetDisplay'
              description: The compared asset, when the order records it.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        attempt:
          description: >-
            The attempt this offer belongs to, numbered as in the order's
            `legAttempts`.
          format: int32
          minimum: 0
          type: integer
        boundAmount:
          description: >-
            The bound the fresh value had to meet: `acceptedAmount` widened by
            the tolerance.
          type: string
        compared:
          $ref: '#/components/schemas/RepricedSide'
        expiresAt:
          description: RFC 3339 UTC time after which the offer can no longer be accepted.
          format: date-time
          type: string
        freshAmount:
          description: The fresh value the venue quoted, in base units.
          type: string
        legIndex:
          format: int32
          minimum: 0
          type: integer
        quoteRef:
          description: Identifies this offer. Accepting it must name this value.
          type: string
      required:
        - legIndex
        - attempt
        - compared
        - acceptedAmount
        - boundAmount
        - freshAmount
        - quoteRef
        - expiresAt
      type: object
    FundsLocation:
      description: >-
        Where a leg's funds are when the leg does not run.


        Tagged on `holder` so later holders (a venue-held balance, for example)
        are additive

        variants rather than a new vocabulary.


        New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          account: '#/components/schemas/FundsLocation/oneOf/6'
          bankRail: '#/components/schemas/FundsLocation/oneOf/5'
          inTransit: '#/components/schemas/FundsLocation/oneOf/4'
          platform: '#/components/schemas/FundsLocation/oneOf/2'
          recipientWallet: '#/components/schemas/FundsLocation/oneOf/1'
          yourVenueBalance: '#/components/schemas/FundsLocation/oneOf/3'
          yourWallet: '#/components/schemas/FundsLocation/oneOf/0'
        propertyName: holder
      oneOf:
        - description: In the taker's own wallet, where they can sign with the funds again.
          properties:
            address:
              description: The wallet, when the order records it.
              type:
                - string
                - 'null'
            funds:
              $ref: '#/components/schemas/AssetAmountDisplay'
            holder:
              description: New values may be added; treat unknown values as other.
              enum:
                - yourWallet
              type: string
              x-extensible-enum: true
          required:
            - funds
            - holder
          type: object
        - description: >-
            In another wallet the route recorded as its recipient, such as the
            end user of a

            broker's order. The taker cannot re-sign with these funds.
          properties:
            address:
              type: string
            funds:
              $ref: '#/components/schemas/AssetAmountDisplay'
            holder:
              description: New values may be added; treat unknown values as other.
              enum:
                - recipientWallet
              type: string
              x-extensible-enum: true
          required:
            - funds
            - address
            - holder
          type: object
        - description: >-
            In a platform contract (a router, an arrival contract or an escrow),
            pending a

            release the platform or an operator performs.
          properties:
            contract:
              type:
                - string
                - 'null'
            funds:
              $ref: '#/components/schemas/AssetAmountDisplay'
            holder:
              description: New values may be added; treat unknown values as other.
              enum:
                - platform
              type: string
              x-extensible-enum: true
          required:
            - funds
            - holder
          type: object
        - description: >-
            In the route's own balance at a CEX venue, on the CEX ledger. Only
            this

            route's trade or its pre-signed payout spends it: the taker retries
            the trade from

            it on the same order, or stops and the payout withdraws it.
          properties:
            funds:
              $ref: '#/components/schemas/AssetAmountDisplay'
              description: The asset and its `available` amount, read from the ledger.
            holder:
              description: New values may be added; treat unknown values as other.
              enum:
                - yourVenueBalance
              type: string
              x-extensible-enum: true
            routeId:
              description: The ledger route the balance is scoped to, `bytes32` hex.
              type: string
            venueId:
              description: The venue's registry id.
              type: string
          required:
            - venueId
            - routeId
            - funds
            - holder
          type: object
        - description: >-
            The native owner accepted the move, but no holder has issued a
            qualified receipt.

            Reported transit is never a destination balance; references stay in
            Money's envelope.
          properties:
            funds:
              $ref: '#/components/schemas/AssetAmountDisplay'
              description: >-
                The asset and amount reported in transit, without a destination
                or native reference.
            holder:
              description: New values may be added; treat unknown values as other.
              enum:
                - inTransit
              type: string
              x-extensible-enum: true
          required:
            - funds
            - holder
          type: object
        - description: >-
            Fiat debited by the venue onto a bank rail, not yet confirmed
            received, including

            overdue or manual-review payouts. References stay in Money's
            evidence envelope.
          properties:
            funds:
              $ref: '#/components/schemas/AssetAmountDisplay'
              description: >-
                The asset and amount on the bank rail, without a destination or
                native reference.
            holder:
              description: New values may be added; treat unknown values as other.
              enum:
                - bankRail
              type: string
              x-extensible-enum: true
          required:
            - funds
            - holder
          type: object
        - description: >-
            In a treasury account the workspace controls that is not
            route-scoped: a custodian

            account or wallet, an organisation wallet, or an ordinary LP/venue
            account. The order's

            own signing wallet stays `yourWallet`; producers choose from the
            order record.
          properties:
            accountId:
              $ref: '#/components/schemas/InventoryAccountId'
              description: >-
                The opaque inventory id, never a native vault, connection or
                venue-account id.
            funds:
              $ref: '#/components/schemas/AssetAmountDisplay'
            holder:
              description: New values may be added; treat unknown values as other.
              enum:
                - account
              type: string
              x-extensible-enum: true
          required:
            - accountId
            - funds
            - holder
          type: object
      x-extensible-enum: true
    StopReason:
      description: |-
        Why a route stopped waiting on its taker.

        New values may be added; treat unknown values as other.
      enum:
        - waitLimitReached
        - stoppedByYou
        - continuationComplianceRefused
      type: string
      x-extensible-enum: true
    AssetAmountDisplay:
      description: Raw and normalized amount for one asset side.
      properties:
        asset:
          $ref: '#/components/schemas/AssetDisplay'
        decimalAmount:
          type:
            - string
            - 'null'
        rawAmount:
          type:
            - string
            - 'null'
        unresolved:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/AmountUnresolved'
              description: Why `decimalAmount` is absent; absent whenever it is present.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
      required:
        - asset
      type: object
    VenueTradeFillFee:
      properties:
        amount:
          description: Exact decimal, present when the venue reported a fee amount.
          type:
            - string
            - 'null'
        asset:
          description: Present exactly when `amount` is.
          type:
            - string
            - 'null'
        basis:
          description: >-
            The venue contract clause, present only when the fee is in the
            price.
          type:
            - string
            - 'null'
        lines:
          description: >-
            Separate native charges, positive for a fee and negative for a
            rebate.

            Outcome amounts already include them in their respective assets.
          items:
            $ref: '#/components/schemas/VenueRfqQuoteFee'
          type:
            - array
            - 'null'
        tradeFeeReport:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueTradeFeeReport'
              description: Present only when the fee is in the price.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        treatment:
          $ref: '#/components/schemas/VenueTradeFeeTreatment'
      required:
        - treatment
      type: object
    TradeLegFacts:
      description: The leg facts an order read carries on `OrderLegInfo.tradeLeg`.
      properties:
        boundLapsesAt:
          description: >-
            Deposit first: the instant the consented bound stops

            authorizing the trade, 3× the deposit's expected arrival in the
            rail's

            business time. Absent on a leg without a deposit-first bound.
          format: date-time
          type:
            - string
            - 'null'
        confirmAgainReason:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeLegConfirmAgainReason'
              description: >-
                Why a deposit-first pay-in in `price_beyond_bound` waits for a
                new consent.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        consentedPayoutFee:
          description: >-
            The exact fee bound recorded by Confirm, derived from immutable
            consent.
          type:
            - string
            - 'null'
        creditedAmount:
          description: The venue-credited amount that funded this pay-in, exact decimal.
          type:
            - string
            - 'null'
        currentPayoutFee:
          description: >-
            The qualified estimate observed when dispatch stopped for a fee
            rise.
          type:
            - string
            - 'null'
        declaredPayoutFee:
          description: >-
            Current qualified withdrawal estimate, returned by prepare in the
            receipt

            asset. An absent estimate never means a zero fee.
          type:
            - string
            - 'null'
        destination:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeLegDestination'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        direction:
          $ref: '#/components/schemas/TradeLegDirection'
        expectedArrivalAt:
          format: date-time
          type:
            - string
            - 'null'
        expectedArrivalSource:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeLegExpectedArrivalSource'
              description: '`provider` or `default`.'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        finality:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeLegFinality'
              description: >-
                Whether a settled payout can still be returned. Absent for an
                unsettled leg or a settled leg without a provider return watch.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        fundingDeadlineAt:
          format: date-time
          type:
            - string
            - 'null'
        fundingModel:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FundingModel'
              description: >-
                A bank leg's funding model, fixed when it was planned. Absent on
                a

                chain leg.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        fundsReceivedAt:
          description: The venue's own credit time of that amount.
          format: date-time
          type:
            - string
            - 'null'
        holidaysApplied:
          type:
            - boolean
            - 'null'
        legId:
          format: uuid
          type: string
        outcomeCode:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeLegOutcomeCode'
              description: The named reason on a refused, cancelled or returned leg.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        overdueAt:
          format: date-time
          type:
            - string
            - 'null'
        overdueSince:
          format: date-time
          type:
            - string
            - 'null'
        ownBankVerification:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/OwnBankVerification'
              description: >-
                Independent bank evidence, never the venue-reported settlement
                state.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        payoutApproval:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeLegPayoutApproval'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        payoutBreakdown:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeLegPayoutBreakdown'
              description: >-
                A payout's amounts in its asset (operator 2026-10-22: every
                fee-bearing

                action shows what leaves the account, the fee and what arrives).
                Absent

                on a pay-in and on a payout with no consent yet.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        payoutBreakdownUnavailableReason:
          description: >-
            A payout whose fee/charging declaration could not be read. Never
            means no fee.
          type:
            - string
            - 'null'
        payoutHeldReason:
          description: >-
            The funding-stage refusal code holding this planned payout:
            FUNDING_STAGE_DISABLED, EXECUTION_STOPPED,
            PILOT_PAYOUT_CAP_EXCEEDED, PILOT_DAILY_CAP_EXCEEDED or
            EXECUTION_NOTIONAL_UNVALUED. The leg stays planned and is retried;
            absent when not held.
          type:
            - string
            - 'null'
        quotedExpectedArrivalAt:
          description: The confirmed quote's estimate for this exact bank rail and option.
          format: date-time
          type:
            - string
            - 'null'
        rail:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FiatRail'
              description: >-
                A bank leg's rail (`eft`, `sepa`, ...), fixed when it was
                planned. Absent

                on a chain leg.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        railOption:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FiatRailOptionKind'
              description: The rail option the bank leg uses (`standard` or `fast`).
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        railReference:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/PayoutRailReference'
              description: >-
                A genuine bank rail reference or named not-reported state;
                absent on non-bank-payout legs.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        recipientConfirmation:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/PayoutRecipientConfirmation'
              description: >-
                The receiving workspace's assertion, never settlement or
                independent verification.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        returnWindowEndsAt:
          description: >-
            For a returnable leg whose rail documents a return window, midnight
            after its last day in the rail's clearing time zone. Absent when no
            window is documented; never estimated.
          format: date-time
          type:
            - string
            - 'null'
        returnedAfterSettlement:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeLegReturnedAfterSettlement'
              description: >-
                A settled payout the provider later returned. The leg

                stays `settled` (its row is immutable); the PayoutReturned
                review item

                is the one fact, and resolving that review keeps this
                annotation.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        returnedTo:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeLegReturnedTo'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        reviewAt:
          format: date-time
          type:
            - string
            - 'null'
        reviewEnteredAt:
          format: date-time
          type:
            - string
            - 'null'
        reviewItemId:
          type:
            - string
            - 'null'
        reviewReason:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradeLegReviewReason'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        settlementRail:
          $ref: '#/components/schemas/TradeLegRail'
        state:
          $ref: '#/components/schemas/TradeLegState'
        submittedAt:
          format: date-time
          type:
            - string
            - 'null'
        transactionHash:
          type:
            - string
            - 'null'
        venueReportedCredited:
          description: >-
            Only an explicit receiving-bank credit report from the venue;
            withdrawal completion is not credit.
          type:
            - boolean
            - 'null'
        venueWithdrawalId:
          description: >-
            A wallet payout's withdrawal as the venue recorded it, once sent:
            the

            venue's own withdrawal id and the chain transaction. Absent before
            the send and

            on a bank leg.
          type:
            - string
            - 'null'
      required:
        - legId
        - direction
        - settlementRail
        - state
      type: object
    SettlementTerms:
      allOf:
        - $ref: '#/components/schemas/SettlementMethod'
        - properties:
            timing:
              $ref: '#/components/schemas/SettlementTiming'
          required:
            - timing
          type: object
      description: How and when the trade's assets move, as one flat set of fields.
    VenueTradePriceBasis:
      description: New values may be added; treat unknown values as other.
      enum:
        - market_convention
        - receipt_per_debit
      type: string
      x-extensible-enum: true
    VenueFillQuantityGroup:
      description: >-
        Currency identity remains venue/site scoped; different pairs are never
        netted together.
      properties:
        executionTypeId:
          description: The execution type whose recorded quantities are grouped.
          type: string
        filledRequestCount:
          format: int64
          minimum: 0
          type: integer
        inputAmount:
          type: string
        inputAsset:
          type: string
        outputAmount:
          type: string
        outputAsset:
          type: string
        providerSite:
          type: string
      required:
        - executionTypeId
        - providerSite
        - inputAsset
        - outputAsset
        - filledRequestCount
        - inputAmount
        - outputAmount
      type: object
    FillSource:
      description: New values may be added; treat unknown values as other.
      enum:
        - protocol
        - venueAccount
      type: string
      x-extensible-enum: true
    SolverStatus:
      description: |-
        Solver operational status and conformance lifecycle.

        State machine:
        ```text
        Registered → Validating
        Validating → Active | Inactive
        Active     → Validating | Paused | Disabled
        Inactive   → Validating | Disabled
        Paused     → Validating | Disabled
        Disabled   → ∅ (terminal; only a TetraFi administrator can re-enable it)
        ```

        New values may be added; treat unknown values as other.
      enum:
        - registered
        - validating
        - active
        - inactive
        - paused
        - disabled
      type: string
      x-extensible-enum: true
    DayBasis:
      description: |-
        A settlement schedule's day basis.

        New values may be added; treat unknown values as other.
      enum:
        - calendarDays
        - businessDays
      type: string
      x-extensible-enum: true
    TradeLifecycleStepKey:
      description: New values may be added; treat unknown values as other.
      enum:
        - created
        - pending
        - executing
        - executed
        - settling
        - settled
        - finalized
        - failed
        - refunded
        - checkingBalance
        - pendingDeposit
        - depositConfirmed
        - quoteRequested
        - quoteReceived
        - accountingPending
        - accountingSubmitted
        - awaitingLpSettlement
        - withdrawalRequested
        - pendingWithdrawal
        - withdrawalFailed
        - settlementWindow
        - settlementReady
        - settlementPending
        - claimPending
        - onHold
        - notSent
        - notSubmitted
        - inProgress
        - completed
        - noFill
        - outcomeUnknown
        - needsReview
        - returned
        - settlementReview
        - awaitingFunds
        - endedUnsettled
        - noFillConfirmed
        - unknown
      type: string
      x-extensible-enum: true
    AssetDisplay:
      description: Display identity for one token/asset.
      properties:
        address:
          type:
            - string
            - 'null'
        assetId:
          type: string
        chainId:
          format: int64
          minimum: 0
          type:
            - integer
            - 'null'
        chainRef:
          type:
            - string
            - 'null'
        decimals:
          format: int32
          minimum: 0
          type:
            - integer
            - 'null'
        name:
          type:
            - string
            - 'null'
        resolutionStatus:
          $ref: '#/components/schemas/AssetResolutionStatus'
        symbol:
          type: string
      required:
        - assetId
        - symbol
        - resolutionStatus
      type: object
    RepricedSide:
      description: >-
        Which side of a leg a re-price compares. A StableFX leg re-quotes to the
        exact output

        and bounds the INPUT it spends; RFQ and solver legs bound the OUTPUT
        they deliver.


        New values may be added; treat unknown values as other.
      enum:
        - input
        - output
      type: string
      x-extensible-enum: true
    InventoryAccountId:
      description: >-
        Opaque inventory account id. Never a native vault, connection or
        venue-account id.
      examples:
        - acct_0123456789abcdef0123456789abcdef
      pattern: ^acct_[0-9a-f]{32}$
      type: string
    AmountUnresolved:
      description: >-
        Why a side carries no decimal amount. Present exactly when
        `decimalAmount`

        is absent, so an unresolved side is a named state and never a guessed or

        missing number.


        New values may be added; treat unknown values as other.
      enum:
        - assetNotInRegistry
        - amountUnavailable
      type: string
      x-extensible-enum: true
    VenueRfqQuoteFee:
      properties:
        amount:
          type: string
        asset:
          type: string
      required:
        - amount
        - asset
      type: object
    VenueTradeFeeReport:
      description: >-
        What the native trade record carried in its own fee field when the fee
        is

        included in the price. `not_reported` is an absent field, never a zero
        fee.


        New values may be added; treat unknown values as other.
      enum:
        - not_reported
        - reported
      type: string
      x-extensible-enum: true
    VenueTradeFeeTreatment:
      description: >-
        How a fill's fee is known. `not_qualified` means the venue driver does
        not

        yet classify fee reporting: it is neither a zero fee nor "not reported".


        New values may be added; treat unknown values as other.
      enum:
        - included_in_price
        - reported
        - separate_charges
        - not_qualified
      type: string
      x-extensible-enum: true
    TradeLegConfirmAgainReason:
      description: >-
        Why a deposit-first pay-in needs a new consent: the fresh

        price missed the consented minimum receipt, or the bound lapsed before
        the

        deposit was credited.


        New values may be added; treat unknown values as other.
      enum:
        - priceBeyondBound
        - boundLapsed
      type: string
      x-extensible-enum: true
    TradeLegDestination:
      description: |-
        Where a payout leg delivers, by reference only: never bank or chain
        coordinates.
      properties:
        approvalId:
          description: The venue destination approval a wallet delivery goes through.
          format: uuid
          type:
            - string
            - 'null'
        kind:
          $ref: '#/components/schemas/TradeLegDestinationKind'
        ref:
          description: The wallet id or the Treasury Destination id.
          type: string
      required:
        - kind
        - ref
      type: object
    TradeLegDirection:
      description: >-
        Whether the leg brings money to the LP account before the trade, or
        takes

        the trade's output away from it.


        New values may be added; treat unknown values as other.
      enum:
        - pay_in
        - payout
      type: string
      x-extensible-enum: true
    TradeLegExpectedArrivalSource:
      description: New values may be added; treat unknown values as other.
      enum:
        - provider
        - default
      type: string
      x-extensible-enum: true
    TradeLegFinality:
      description: >-
        A settled payout's finality, from its return watch and any recorded
        payout-return review.


        New values may be added; treat unknown values as other.
      enum:
        - final
        - returnable
        - returnedAfterSettlement
      type: string
      x-extensible-enum: true
    FundingModel:
      description: >-
        What backs execution. A venue declares `prefunded` or `payIn`; `credit`
        is derived per

        trade (never declared or chosen): the trade creates or increases a
        negative position on the

        venue account, and `creditPortion` names how much.


        New values may be added; treat unknown values as other.
      enum:
        - prefunded
        - payIn
        - credit
      type: string
      x-extensible-enum: true
    TradeLegOutcomeCode:
      description: New values may be added; treat unknown values as other.
      enum:
        - trade_unfilled
        - authority_revoked
        - confirm_again_declined
        - deposit_first_withdrawn
        - unfunded_watch_ended
        - adjudicated_returned
        - provider_returned
        - venue_reported_returned
        - provider_quote_missing
        - provider_quote_expired
        - payout_backend_changed
        - expected_arrival_unknown
        - balance_insufficient
        - destination_not_listed
        - destination_approval_revoked
        - destination_holder_name_unavailable
        - withdrawal_refused_unsent
        - provider_refused_unsent:adjudicated
        - provider_refused_unsent:adapter_hand_off_deadline_passed
        - provider_refused_unsent:adapter_hand_off_deadline_unsupported
        - adapter_refused_before_send:unsupported_rail
        - adapter_refused_before_send:unsupported_jurisdiction
        - adapter_refused_before_send:amount_out_of_bounds
        - adapter_refused_before_send:unsupported_leg
        - adapter_refused_before_send:quote_expired
        - adapter_refused_before_send:quote_not_reservable
        - adapter_refused_before_send:missing_required_data
        - adapter_refused_before_send:provider_rejected
        - adapter_refused_before_send:timeout
        - adapter_refused_before_send:rate_limited
        - adapter_refused_before_send:authentication_failed
        - adapter_refused_before_send:invalid_request
        - adapter_refused_before_send:internal
        - adapter_refused_before_send:not_sent
      type: string
      x-extensible-enum: true
    OwnBankVerification:
      properties:
        credit:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/OwnBankVerifiedCredit'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        lastGoodReadAt:
          format: date-time
          type:
            - string
            - 'null'
        matchedBy:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/OwnBankVerificationMatchedBy'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        reason:
          type:
            - string
            - 'null'
        reviewItemId:
          type:
            - string
            - 'null'
        source:
          $ref: '#/components/schemas/OwnBankVerificationSource'
        state:
          $ref: '#/components/schemas/OwnBankVerificationState'
      required:
        - state
        - source
      type: object
    TradeLegPayoutApproval:
      description: >-
        Treasury's existing Run approval for a bank payout. No funds are
        reserved

        while this approval is pending; release rechecks balances and terms.
      properties:
        approvalRequestId:
          format: uuid
          type:
            - string
            - 'null'
        approvalsRequired:
          format: int32
          minimum: 0
          type: integer
        approverGroup:
          type:
            - string
            - 'null'
        approverGroupName:
          type:
            - string
            - 'null'
        approverNames:
          items:
            type: string
          type: array
        runId:
          format: uuid
          type:
            - string
            - 'null'
      required:
        - approvalsRequired
        - approverNames
      type: object
    TradeLegPayoutBreakdown:
      description: >-
        What a payout takes from the venue account, its fee and what arrives, as
        exact decimals in the leg's asset. The venue sends gross minus fee. With
        on-top charging the account loses gross and the bank receives the amount
        sent; with deducted charging the bank receives one fee less; when
        unverified, withdrawn is the maximum debit and receivedMin to
        receivedMax bounds the receipt.
      properties:
        basis:
          $ref: '#/components/schemas/TradeLegPayoutBreakdownBasis'
          description: The withdrawal record these amounts come from.
        charging:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FiatFeeCharging'
              description: >-
                How the venue charges a bank payout's fee, as its rail declares
                it

                (`deducted`, `on_top`, `unverified`). Absent on a wallet payout,
                whose fee

                is Confirm's bound rather than a declared rail fee.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        fee:
          description: |-
            The most fee: a bank payout's declared payout fee (frozen by the
            withdrawal review once there is one), else Confirm's fee bound.
          type: string
        receivedMax:
          description: The most that arrives.
          type: string
        receivedMin:
          description: The least that arrives.
          type: string
        withdrawn:
          description: 'The most leaving the venue account: the confirmed trade''s output.'
          type: string
      required:
        - withdrawn
        - fee
        - receivedMin
        - receivedMax
        - basis
      type: object
    FiatRail:
      type: string
    FiatRailOptionKind:
      description: |-
        A way of using a rail. Every rail has a `standard` option; VALR's fast
        payout (Blitz over RTC) is the EFT rail's `fast` option.

        New values may be added; treat unknown values as other.
      enum:
        - standard
        - fast
      type: string
      x-extensible-enum: true
    PayoutRailReference:
      description: New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          notReportedYet: '#/components/schemas/PayoutRailReference/oneOf/0'
          reported: '#/components/schemas/PayoutRailReference/oneOf/1'
        propertyName: state
      oneOf:
        - properties:
            state:
              description: New values may be added; treat unknown values as other.
              enum:
                - notReportedYet
              type: string
              x-extensible-enum: true
          required:
            - state
          type: object
        - properties:
            kind:
              $ref: '#/components/schemas/PayoutRailReferenceKind'
            state:
              description: New values may be added; treat unknown values as other.
              enum:
                - reported
              type: string
              x-extensible-enum: true
            value:
              type: string
          required:
            - kind
            - value
            - state
          type: object
      x-extensible-enum: true
    PayoutRecipientConfirmation:
      properties:
        confirmationId:
          format: uuid
          type: string
        confirmedAt:
          format: date-time
          type: string
        confirmedBy:
          description: '`user:<id>` or `key:<id>`; immutable authenticated identity.'
          type: string
        confirmedByName:
          description: A safe name captured at confirmation, never an email address.
          type: string
        legId:
          format: uuid
          type: string
      required:
        - confirmationId
        - legId
        - confirmedBy
        - confirmedByName
        - confirmedAt
      type: object
    TradeLegReturnedAfterSettlement:
      description: |-
        A return the provider reported after the payout
        leg settled, read from its entry-coupled PayoutReturned review item.
      properties:
        detectedAt:
          description: When TetraFi's own status read first saw the return.
          format: date-time
          type: string
        reviewItemId:
          description: The PayoutReturned review item support works the return from.
          type: string
      required:
        - reviewItemId
        - detectedAt
      type: object
    TradeLegReturnedTo:
      description: |-
        Where a returned leg's funds remain, according to its dispatch backend.

        New values may be added; treat unknown values as other.
      enum:
        - lpAccount
        - providerBalance
      type: string
      x-extensible-enum: true
    TradeLegReviewReason:
      description: |-
        The reason a leg requires review.

        New values may be added; treat unknown values as other.
      enum:
        - uncertain_send
        - ambiguous_event
        - expected_arrival_exceeded
        - provider_failed_after_send
        - trade_fill_requires_review
        - late_funds_held
        - late_funds_worse_rate
        - amount_mismatch
      type: string
      x-extensible-enum: true
    TradeLegRail:
      description: |-
        How the leg settles: a bank rail or a chain transfer.

        New values may be added; treat unknown values as other.
      enum:
        - bank
        - chain
      type: string
      x-extensible-enum: true
    TradeLegState:
      description: |-
        The leg's state. The last five are terminal.

        New values may be added; treat unknown values as other.
      enum:
        - planned
        - awaiting_funds
        - funds_received
        - price_beyond_bound
        - expired_unfunded
        - late_funds
        - awaiting_approval
        - dispatching
        - uncertain
        - in_transit
        - held_by_provider
        - refunding
        - manual_review
        - settled
        - returned
        - refunded
        - cancelled
        - refused
      type: string
      x-extensible-enum: true
    SettlementMethod:
      description: New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          dvp: '#/components/schemas/SettlementMethod/oneOf/1'
          fop: '#/components/schemas/SettlementMethod/oneOf/2'
          venueLedger: '#/components/schemas/SettlementMethod/oneOf/0'
        propertyName: method
      oneOf:
        - properties:
            method:
              description: New values may be added; treat unknown values as other.
              enum:
                - venueLedger
              type: string
              x-extensible-enum: true
          required:
            - method
          type: object
        - properties:
            method:
              description: New values may be added; treat unknown values as other.
              enum:
                - dvp
              type: string
              x-extensible-enum: true
          required:
            - method
          type: object
        - properties:
            firstLeg:
              $ref: '#/components/schemas/FirstLeg'
            method:
              description: New values may be added; treat unknown values as other.
              enum:
                - fop
              type: string
              x-extensible-enum: true
          required:
            - firstLeg
            - method
          type: object
      x-extensible-enum: true
    SettlementTiming:
      description: New values may be added; treat unknown values as other.
      enum:
        - immediate
        - byDeadline
        - delayed
      type: string
      x-extensible-enum: true
    AssetResolutionStatus:
      description: |-
        Whether the backend resolved the asset to known display metadata.

        New values may be added; treat unknown values as other.
      enum:
        - resolved
        - unknown
      type: string
      x-extensible-enum: true
    TradeLegDestinationKind:
      description: |-
        What a payout leg delivers to, in the binding's endpoint vocabulary.

        New values may be added; treat unknown values as other.
      enum:
        - wallet
        - bankDestination
      type: string
      x-extensible-enum: true
    OwnBankVerifiedCredit:
      properties:
        amount:
          description: Exact decimal text, never a floating-point approximation.
          type: string
        creditedAt:
          format: date-time
          type: string
        currency:
          type: string
        referenceMasked:
          type:
            - string
            - 'null'
      required:
        - amount
        - currency
        - creditedAt
      type: object
    OwnBankVerificationMatchedBy:
      description: New values may be added; treat unknown values as other.
      enum:
        - referenceAndAmount
        - amountAndWindow
      type: string
      x-extensible-enum: true
    OwnBankVerificationSource:
      description: New values may be added; treat unknown values as other.
      enum:
        - revolutBusiness
      type: string
      x-extensible-enum: true
    OwnBankVerificationState:
      description: New values may be added; treat unknown values as other.
      enum:
        - verified
        - notSeen
        - unavailable
        - disagreement
      type: string
      x-extensible-enum: true
    TradeLegPayoutBreakdownBasis:
      description: |-
        Which record a payout breakdown comes from.

        New values may be added; treat unknown values as other.
      enum:
        - consent
        - reviewed
      type: string
      x-extensible-enum: true
    FiatFeeCharging:
      description: >-
        How a scheduled bank fee is charged. unverified remains conservative
        until a real movement measures it; the recipient can only receive more
        than the quoted minimum.


        New values may be added; treat unknown values as other.
      enum:
        - deducted
        - on_top
        - unverified
      type: string
      x-extensible-enum: true
    PayoutRailReferenceKind:
      description: New values may be added; treat unknown values as other.
      enum:
        - swiftUetr
        - sepaEndToEndId
        - fasterPaymentsReference
        - bankRailReference
      type: string
      x-extensible-enum: true
    FirstLeg:
      description: New values may be added; treat unknown values as other.
      enum:
        - taker
        - maker
      type: string
      x-extensible-enum: true
  securitySchemes:
    api_key:
      description: >-
        Send the API key in `X-API-Key`.


        **Request signing.** A key with signing enabled (enabled for the key in
        its workspace's credential settings, which return the signing secret
        once; see [Sign
        requests](https://docs.tetrafi.io/authentication#sign-requests)) must
        also sign every request:


        - `X-Timestamp`: the current Unix time in seconds, within 300 seconds of
        the server clock (at most 10 seconds ahead of it on a request that sends
        `X-Nonce`).

        - `X-Nonce`: a fresh random value for each request, 16 to 128 characters
        of `A-Z`, `a-z`, `0-9`, `-` and `_` (a UUID fits). Required on a write
        (POST, PUT, PATCH, DELETE); optional on a read (GET, HEAD).

        - `X-Signature`: lower-case hex HMAC-SHA256 of the canonical string,
        keyed with the signing secret's 32 bytes (the secret is 64 hex
        characters; decode it first).


        The canonical string is joined by `\n`, with no trailing newline: the
        `X-Timestamp` value, the `X-Nonce` value, the upper-case method, the
        path with its query exactly as sent (`/api/v1/orders?limit=1`), and the
        lower-case hex SHA-256 of the exact body bytes (the SHA-256 of an empty
        body when there is none). A request without `X-Nonce` (a read) omits the
        nonce line and signs four lines.


        A nonce is accepted once per key: the same nonce again inside the window
        is refused, whatever the body, so two identical writes in one second
        each carry their own nonce and both succeed, and a retry signs again
        with a new nonce. Every API server shares one nonce record, so a nonce
        accepted by one server is refused by all of them. Rate admission runs
        first: a rate-limited write (429) does not consume its nonce, and a
        replay sent while the key is rate limited is answered 429; otherwise a
        replay spends a rate token and is refused. A read without a nonce
        changes nothing, so an identical signed read inside the window is
        admitted again. A write whose window has already passed on the nonce
        record's clock when its nonce is recorded is refused as
        `TIMESTAMP_OUT_OF_RANGE`. If the nonce record cannot be read or written
        the request is refused with 503 `API_KEY_UNAVAILABLE`; the nonce may
        have been consumed, so sign again with a new `X-Timestamp` and `X-Nonce`
        before retrying.


        A signing refusal is a 401 `AUTH_REQUIRED` whose `details.reason` names
        the cause: `SIGNATURE_REQUIRED` (a header is missing),
        `SIGNATURE_INVALID` (a malformed header or a wrong signature),
        `TIMESTAMP_OUT_OF_RANGE`, `NONCE_REQUIRED` (a write without `X-Nonce`),
        `NONCE_INVALID` (a malformed or repeated `X-Nonce` header),
        `SIGNATURE_REPLAYED` (the nonce was already accepted).
        `SIGNATURE_PREDATES_RESTART` and 429 `REPLAY_WINDOW_FULL` are reserved
        and not answered today.
      in: header
      name: X-API-Key
      type: apiKey
      x-request-signing:
        algorithm: HMAC-SHA256
        canonicalRequest:
          - timestamp
          - nonce
          - method
          - pathWithQuery
          - bodySha256Hex
        canonicalRequestWithoutNonce:
          - timestamp
          - method
          - pathWithQuery
          - bodySha256Hex
        canonicalSeparator: |+

        nonceFutureSkewSeconds: 10
        nonceHeader: X-Nonce
        noncePattern: ^[A-Za-z0-9_-]{16,128}$
        nonceRequiredMethods:
          - POST
          - PUT
          - PATCH
          - DELETE
        refusal:
          error: AUTH_REQUIRED
          reasons:
            - SIGNATURE_REQUIRED
            - SIGNATURE_INVALID
            - TIMESTAMP_OUT_OF_RANGE
            - NONCE_REQUIRED
            - NONCE_INVALID
            - SIGNATURE_REPLAYED
          status: 401
        reserved:
          - error: AUTH_REQUIRED
            reason: SIGNATURE_PREDATES_RESTART
            status: 401
          - error: REPLAY_WINDOW_FULL
            status: 429
        secretEncoding: hex
        signatureEncoding: hex-lower
        signatureHeader: X-Signature
        timestampHeader: X-Timestamp
        timestampWindowSeconds: 300
      x-tetrafi-scopes:
        compliance_read:
          description: View compliance policies, denials, evidence, and reports
          permission: Read compliance
          permissionIds:
            - ReadCompliance
        fee_schedule_read:
          description: >-
            Read the current and upcoming fee rates for this workspace. Does not
            change rates.
          permission: Read fee schedule
          permissionIds:
            - ReadFeeSchedule
        orders_read:
          description: View order status and history
          permission: Read orders
          permissionIds:
            - ReadOrders
        orders_write:
          description: Submit orders for execution
          permission: Submit orders
          permissionIds:
            - SubmitOrders
        prices_read:
          description: >-
            Read-only access to prices and recorded quotes. Also select Submit
            orders to request new quotes.
          permission: Read quotes
          permissionIds:
            - ReadQuotes
        quotes_read:
          description: >-
            Read-only access to prices and recorded quotes. Also select Submit
            orders to request new quotes.
          permission: Read quotes
          permissionIds:
            - ReadQuotes
        quotes_request:
          description: >-
            Read-only access to prices and recorded quotes. Also select Submit
            orders to request new quotes. Submit orders for execution
          permission: Read quotes + Submit orders
          permissionIds:
            - ReadQuotes
            - SubmitOrders
        settlements_read:
          description: See settlement status and detail.
          permission: Read settlements
          permissionIds:
            - ReadSettlements
        trades_read:
          description: View trade history and audit trails
          permission: Read trades
          permissionIds:
            - ReadTrades
        treasury_read:
          description: >-
            See permitted accounts, balances, payouts and Runs, and refresh
            balances. Does not move money.
          permission: Treasury read
          permissionIds:
            - ReadWallets
        webhooks_manage:
          description: >-
            Configure endpoints and events, test deliveries, read outcomes and
            redeliver. Requires your current Manage webhooks permission.
          permission: Manage webhooks
          permissionIds:
            - ManageWebhooks
    bearer_auth:
      bearerFormat: JWT
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.