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

# Place order

> Place an order by the id of a quote you hold (`{quoteId}` from POST /quotes). A Basic venue quote becomes a venue trade (`basicTrade`). Each quote is ordered once: the same quote again answers QUOTE_ALREADY_ORDERED, and a replay with the same Idempotency-Key and body returns the first answer. Read what a quote produced with GET /orders/by-quote/{quoteId}.



## OpenAPI

````yaml api-reference/openapi.json POST /api/v1/orders
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/orders:
    post:
      tags:
        - orders
      summary: Place an order
      description: >-
        Place an order by the id of a quote you hold (`{quoteId}` from POST
        /quotes). A Basic venue quote becomes a venue trade (`basicTrade`). Each
        quote is ordered once: the same quote again answers
        QUOTE_ALREADY_ORDERED, and a replay with the same Idempotency-Key and
        body returns the first answer. Read what a quote produced with GET
        /orders/by-quote/{quoteId}.
      operationId: post_orders
      parameters:
        - $ref: '#/components/parameters/WorkspaceId'
        - description: >-
            Makes a retry safe. Required for API keys (a missing key answers 400
            IDEMPOTENCY_KEY_REQUIRED); optional for signed-in members. 1 to 255
            bytes, unique per order you mean to place; a UUID is a good choice.
            A retry with the same key and the same body, from the same
            credential's owner in the same workspace within 24 hours, returns
            the first answer and never places a second order. The same key with
            a different body answers 409 IDEMPOTENCY_CONFLICT; another
            principal's key answers 403 IDEMPOTENCY_AUTHORITY_REQUIRED. A retry
            that arrives while the first request is still running waits for it,
            and answers 409 ORDER_IN_PROGRESS (with Retry-After) if it is still
            running after 30 seconds. Refusals are not stored: after one, fix
            the request and send it again with the same key or a new one.
          in: header
          name: Idempotency-Key
          required: false
          schema:
            type:
              - string
              - 'null'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuoteOrderRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteOrderResponse'
          description: >-
            Order created: a tagged QuoteOrderResponse (`advancedTrade` or
            `basicTrade`). A Basic trade on an on-chain venue (for example
            Uniswap v3, paid from an organisation wallet) answers 200 as soon as
            the order is durable, with `status: working`, before its wallet
            signs: signing and broadcast run after the answer. Read the order
            (GET /orders/{orderId}) or subscribe to `order.updated` for its
            outcome: `settled`, or `unfilled` (terminal) with
            `operation.dispatch.outcomeCode: not_sent` and `notSentReason:
            ON_CHAIN_UNSENT` when no swap was sent (an approval may have been
            mined first, spending its network fee). A refusal before the order
            exists (limits, compliance, funds, authority) still answers here
            with its code. A refusal found after the order is claimed but before
            its wallet is asked (the LP relationship, the venue registry, the
            audit record or your authority changed) also answers here with its
            own code, and that order reads `unfilled` with `outcomeCode:
            not_sent`.
          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
            Idempotent-Replayed:
              description: >-
                `true` when this answer was released from the stored receipt of
                an earlier request with the same Idempotency-Key and body,
                rather than produced now. Absent on a first answer.
              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; unknown fields answer INVALID_REQUEST with
            details.field (send `{quoteId}` from POST /quotes).
            VENUE_CLIENT_ERROR: the liquidity provider refused the order
            request, with its own refusal code as details.reason
          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 required
          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: >-
            COMPLIANCE_FAILED: the order did not pass compliance checks (no
            cause is named); a named compliance code otherwise
          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: >-
            Quote or authenticated workspace not found. Example: an unknown
            quote id, refused before any claim or venue call (captured live, rfq
            e31507829)
          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
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            QUOTE_ALREADY_ORDERED: this quote already placed an order
            (details.orderId names it when known), or the CEX route cannot be
            ordered as signed; LEGACY_CEX_LANE_RETIRED. QUOTE_NOT_EXECUTABLE
            (`next: requote`), QUOTE_ALREADY_ORDERED, QUOTE_NOT_HELD (`next:
            requote`), FUNDING_SHORTFALL (`next: fund`),
            VENUE_QUOTE_OUTSIDE_BOUNDS, VENUE_QUOTE_NOT_PRICED; a bank card:
            FIAT_CARD_NOT_A_BANK_CARD, FIAT_CARD_ACCOUNT_UNREADABLE,
            FIAT_BANK_ACCOUNT_UNBOUND (choose the bank account to be paid on the
            quote card, then requote), FIAT_PAYOUT_FEE_UNVERIFIED,
            FIAT_FUNDING_MISMATCH, and the hosted Confirm's named conflicts
            (VENUE_TRADE_RECONFIRMATION_REQUIRED,
            VENUE_TRADE_PAYOUT_DESTINATION_CHANGED); a Treasury review that can
            no longer approve the trade, nothing sent:
            VENUE_TRADE_REVIEW_REJECTED (rejected or cancelled),
            VENUE_TRADE_REVIEW_EXPIRED (expired, or reapproval required);
            VENUE_OPERATION_MISMATCH (the named `operationId` does not cover the
            quote); a protocol quote: PAY_WALLET_UNAVAILABLE (the held binding's
            pay wallet is no longer available to the caller)
          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
        '410':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            QUOTE_EXPIRED: the held quote lapsed; nothing was sent (`next:
            requote`). REQUOTE_WINDOW_CLOSED: past its retainUntil; nothing was
            sent, and a requote no longer refreshes it (`next: search`)
          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
        '413':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: The request body is too large.
          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
        '415':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: The request body must be sent as `application/json`.
          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
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            Quote, funding, authorization, policy, or venue state rejected the
            order. ASSET_ISSUER_EXCLUDED: an Asset's issuer is excluded in the
            workspace's counterparty management (details.issuerId,
            details.assetId); nothing was placed
          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
        '423':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: 'TREASURY_FROZEN: the deferred trade''s integrator workspace is frozen'
          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: Workspace trade rate limit exceeded
          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 before retrying
              schema:
                format: int64
                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: Internal error
          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
        '502':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: >-
            VENUE_ADAPTER_ERROR: the liquidity provider failed or could not be
            reached (retry shortly); DEFERRED_LP_FAILED: the provider could not
            take a deferred order, so read the order before trying again
          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: >-
            Treasury freeze state (TREASURY_FREEZE_UNAVAILABLE) or a chain read
            the order depends on is temporarily unreadable (for example the
            source transaction a CEX route signed); retry shortly.
            LP_RELATIONSHIP_UNAVAILABLE: the relationship with the liquidity
            provider, or the counterparty selection, could not be read (retry
            shortly). ASSET_ISSUER_UNVERIFIABLE: an Asset of the quote is no
            longer in the Asset catalogue, so its issuer could not be checked
            (request a new quote). Nothing was placed
          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:
        - api_key:
            - orders_write
        - bearer_auth:
            - orders_write
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:
    QuoteOrderRequest:
      additionalProperties: false
      description: >-
        The strict order body: name a held quote and supply only the approval or
        evidence it asks for.
      properties:
        clientOrderId:
          description: >-
            Caller reference, 1–64 ASCII letters, digits, underscores or
            hyphens. Unique in

            this workspace while the order is non-terminal; independent of
            Idempotency-Key.
          maxLength: 64
          minLength: 1
          pattern: ^[A-Za-z0-9_-]+$
          type:
            - string
            - 'null'
        continuesOrderId:
          description: >-
            The earlier multi-leg order this one finishes ("Finish this trade",

            `metadata.continuesOrderId`). The order path refuses it unless that
            order is asking its

            taker to finish and this order spends exactly the funds it left.
            Protocol quotes only.
          type:
            - string
            - 'null'
        funding:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueTradeFunding'
              description: >-
                `depositFirst` on a fiat venue card whose LP balance is short.
                Instead of

                refusing FUNDING_SHORTFALL, the order records the person's
                consent to trade the

                card's exact debit at no less than its receipt floor once their
                bank deposit is

                credited; nothing is sent to the venue now. Absent is today's
                order. Human only.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        fundingDepositId:
          description: >-
            The Treasury payout that topped up this card's venue account from
            one of the workspace's

            company wallets (the payoutId from `POST …/treasury/payouts`),
            recorded as what funded the

            trade. It must exist in this workspace, pay into this card's venue
            account from a company

            wallet in the card's debit asset, of at least the card's debit
            amount, and have completed;

            a deposit still awaiting approval, in flight or partly done refuses

            (`FUNDING_DEPOSIT_NOT_CREDITED`). One deposit funds one order
            (`FUNDING_DEPOSIT_ALREADY_USED`)

            until that order ends without a fill. A resumed order (one naming
            tradePreparationId) that omits it

            keeps the deposit its preparation already names. Only with funding
            absent or set to balance.

            Venue cards only.
          format: uuid
          type:
            - string
            - 'null'
        minReceive:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DecimalAmount'
              description: >-
                The least the person accepts to receive, in receive-Asset units.
                Required when

                the quote's `minReceiveRequired` is true. Other venue cards may
                accept it as an

                explicit execution bound; protocol quotes refuse it.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        ownerAuthorization:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/QuoteOrderOwnerAuthorization'
              description: >-
                The pay wallet owner's approval, when the held binding pays from
                an embedded

                wallet (personal or organisation). The server names the wallet
                from the binding;

                this carries only the owner's factor: the hosted approval
                preflight prepared

                (`walletAuthorization.authorizationId`), or an operation-bound
                RPC factor. Exclusive with

                `signature`. Protocol quotes only.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        priceProtectionBps:
          description: >-
            Protocol price protection in basis points (1..=1000). May tighten,
            but never

            loosen, the held quote's protection without requesting a new price.
          format: int32
          minimum: 0
          type:
            - integer
            - 'null'
        quoteId:
          description: >-
            The held quote's id (`q_` and a ULID), as `POST /quotes` returned
            it.
          type: string
        settlementWindowId:
          description: >-
            The settlement window the trader consents to on a quote that carries
            a settlement window

            (a delayed-settlement venue trade). Absent, the quote's own window
            is the consent. After a

            409 `SETTLEMENT_WINDOW_CHANGED`, resend the same quote with this set
            to

            `details.currentWindow.windowId` from that refusal. Refused on a
            quote that settles

            immediately (`SETTLEMENT_WINDOW_NOT_APPLICABLE`).
          format: uuid
          type:
            - string
            - 'null'
        signature:
          description: >-
            The taker's signature over the quote's `next.sign.typedData`;
            required exactly when

            `next` was `sign`.
          type:
            - string
            - 'null'
        sourceAuthorizationId:
          description: >-
            An authorization this server issued at preflight for this quote's
            source leg

            (the native-Solana source permit, a programmable execution's key).
            Protocol quotes only.
          type:
            - string
            - 'null'
        sourceTransaction:
          description: >-
            The hash (EVM) or signature (Solana) of a source transaction the
            member's

            wallet already broadcast on the quote's pay chain (a route's source,
            a programmable

            execution, or a relayed source answered as awaiting finality). The
            order registers it

            and never broadcasts again; the server verifies it on chain.
            Protocol quotes only.
          type:
            - string
            - 'null'
        stepUpProof:
          description: >-
            A `trade_authorization` step-up proof for a venue card, bound to the

            confirmation key the refusal's `stepUp` names (`MFA_STALE`,
            `STEP_UP_REQUIRED`); the

            quote stays held for this retry. Ignored for a protocol quote.
          type:
            - string
            - 'null'
          writeOnly: true
        tradePreparationId:
          description: >-
            A venue trade this member already prepared on the quote's venue
            connection

            (for example one a Treasury review has since approved), so the order
            continues that

            preparation instead of preparing a new one. It must be the caller's,
            in this workspace,

            on the held quote's connection, with bounds that cover the held
            quote. Venue cards only.
          format: uuid
          type:
            - string
            - 'null'
        travelRule:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/QuoteOrderTravelRule'
              description: |-
                The Travel Rule data the member supplies for this transfer
                (`metadata.travelRule`). Protocol quotes only.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
      required:
        - quoteId
      type: object
    QuoteOrderResponse:
      description: >-
        The Basic venue trade created by POST /orders and read from its saved
        venue-trade operation. Common order identity and progress fields remain
        stable; undocumented response fields must be ignored.


        New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          basicTrade: '#/components/schemas/QuoteOrderResponse/oneOf/0'
        propertyName: kind
      oneOf:
        - allOf:
            - anyOf:
                - $ref: '#/components/schemas/ResolvedTradingSource'
                - not:
                    anyOf:
                      - required:
                          - tradingSource
                      - required:
                          - fundingModel
                      - required:
                          - settlement
                      - required:
                          - fundingAccount
                      - required:
                          - deliverTo
                    x-undiscriminated-union-reason: >-
                      Negated field-presence predicates for an optional
                      flattened object, not wire variants.
              x-undiscriminated-union-reason: >-
                Optional flattened object: validates either the full block or
                absence of every block field; no separate wire value to tag.
            - $ref: '#/components/schemas/OrderExecutionReport'
              description: What the order executed and what it cost.
            - properties:
                clientOrderId:
                  description: Caller reference supplied when this order was placed.
                  type:
                    - string
                    - 'null'
                next:
                  oneOf:
                    - type: 'null'
                    - $ref: '#/components/schemas/QuoteNextAction'
                  x-undiscriminated-union-reason: >-
                    Nullable value: JSON null has no properties and cannot carry
                    a discriminator.
                operation:
                  $ref: '#/components/schemas/VenueTradeOperation'
                orderId:
                  description: >-
                    The operation identifier accepted by `GET
                    /api/v1/orders/{orderId}`.
                  type: string
                quoteId:
                  type:
                    - string
                    - 'null'
                requestId:
                  type:
                    - string
                    - 'null'
                settlementCarriedInto:
                  oneOf:
                    - type: 'null'
                    - $ref: '#/components/schemas/TradeSettlementCarriedWindow'
                      description: >-
                        The later window the trade's amounts were netted into,
                        which it now settles in by that

                        window's `settlesBy`. 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, beside its
                        terms in `settlement`: `settled`

                        at once for an immediate venue, a waiting or edge state
                        while a delayed window settles.

                        Absent before the fill and on a trade recorded without
                        settlement 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: `issued`, `pending`

                        or `failed`. Absent with `settlementState`, and on a
                        trade that settles without a window.
                  x-undiscriminated-union-reason: >-
                    Nullable value: JSON null has no properties and cannot carry
                    a discriminator.
                status:
                  $ref: '#/components/schemas/PublicOrderStatus'
                statusUrl:
                  description: >-
                    Where to read this order (`GET`), with the `orders_read`
                    API-key scope.
                  type: string
                terminal:
                  type: boolean
              required:
                - orderId
                - statusUrl
                - status
                - terminal
                - operation
              type: object
            - properties:
                kind:
                  description: New values may be added; treat unknown values as other.
                  enum:
                    - basicTrade
                  type: string
                  x-extensible-enum: true
              required:
                - kind
              type: object
      x-extensible-enum: true
    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
    VenueTradeFunding:
      description: >-
        How a venue-account Confirm is funded: the source the trader chose on
        Review.

        Absent keeps the funding the venue and the firm ask's credit decision
        derive.
      enum:
        - balance
        - credit
        - depositFirst
      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
    QuoteOrderOwnerAuthorization:
      additionalProperties: false
      description: >-
        The owner factor for an embedded pay wallet's order signature. Never
        names a wallet or a

        signing source: both come from the held binding.
      properties:
        authorizationId:
          description: The completed hosted approval preflight prepared for this order.
          type:
            - string
            - 'null'
        authorizationSignature:
          description: >-
            An operation-bound RPC owner factor, for a provider without hosted
            approval.
          type:
            - string
            - 'null'
          writeOnly: true
        providerBody:
          description: >-
            The exact native bytes the inline factor signed, when its provider
            needs them.
          type:
            - string
            - 'null'
        requestExpiryMs:
          description: >-
            Exception: Unix milliseconds from the native Privy request. These
            exact

            bytes are signed by the inline owner factor; converting to RFC 3339
            would

            change the provider's signing contract. Not a platform lifecycle
            timestamp.
          format: int64
          type:
            - integer
            - 'null'
      type: object
    QuoteOrderTravelRule:
      additionalProperties: false
      description: >-
        Per-transaction Travel Rule data the member supplies (IVMS101
        beneficiary name for a

        third-party transfer); the originator comes from the account or company
        record.
      properties:
        beneficiaryName:
          type: string
      required:
        - beneficiaryName
      type: object
    ResolvedTradingSource:
      description: >-
        An indivisible quote/order source block. Its funding and settlement are
        venue-owned.
      properties:
        creditCheck:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/CreditCheck'
              description: >-
                The credit decision the funding was derived from: point-in-time
                evidence, never a

                reservation or dispatch authority. Present exactly when
                `creditPortion` is.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        creditPortion:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/CreditAmount'
              description: >-
                A `credit` trade's exact credit portion: the part of the debit,
                in the debit asset, that

                creates or increases a negative position (the rest is spent from
                positives). Present

                exactly when `fundingModel` is `credit`.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        creditReservation:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/CreditReservation'
              description: >-
                The firm ask's combined cash and credit hold on a credit venue
                account, held

                until the quote expires or its order adopts it. Absent on
                indicative cards.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        deliverTo:
          $ref: '#/components/schemas/ResolvedDeliverTo'
        fundingAccount:
          $ref: '#/components/schemas/FundingAccount'
        fundingModel:
          $ref: '#/components/schemas/FundingModel'
        payIn:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/PayInTerms'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        settlement:
          $ref: '#/components/schemas/QuotedSettlement'
          description: >-
            The venue's declared terms and, for delayed timing, the account
            schedule's window.
        tradingSource:
          $ref: '#/components/schemas/TradingSource'
      required:
        - tradingSource
        - fundingModel
        - settlement
        - fundingAccount
        - deliverTo
      type: object
    OrderExecutionReport:
      description: >-
        Flattened into both order kinds' envelopes: its keys are the envelope's
        own keys.
      properties:
        fees:
          description: >-
            The fees actually charged, as recorded: the venue's own fee report,
            bridge fees, network

            gas the order's wallet paid, and the platform fee. Never a quoted
            estimate. A fee whose

            amount was not reported or could not be read is left out rather than
            shown as 0, and its

            kind is listed in `unrecordedFees`.
          items:
            $ref: '#/components/schemas/OrderFee'
          type: array
        fills:
          description: >-
            Each confirmed fill, in execution order. Always present: empty
            before any fill is

            confirmed.
          items:
            $ref: '#/components/schemas/OrderFill'
          type: array
        quotedBuyAmount:
          description: >-
            The buy amount the executed quote said would land. Null when it is
            not known (for

            example before a venue order is dispatched).
          type:
            - string
            - 'null'
        settledBuyAmount:
          description: >-
            What actually landed, read from the fill or settlement evidence.
            Null until it is

            measured; never the quote carried forward and never 0 for unknown.
          type:
            - string
            - 'null'
        settlesBy:
          description: >-
            The latest time the order settles, or can no longer execute, under
            its recorded terms:

            the signed order's fill deadline, or, on a route, the latest fill
            deadline every leg

            commits to (Advanced); the last on-chain step's send-by time (an
            on-chain Basic swap).

            Null when no such term is recorded, for example a same-chain DEX
            swap, whose call

            carries no deadline.
          format: date-time
          type:
            - string
            - 'null'
        unrecordedFees:
          description: >-
            Every fee kind the order incurs whose actual charge is not recorded
            or could not be

            read: a venue fee taken inside the price without an amount, a bridge
            leg's fee, gas

            the order's wallet spent without a readable receipt, a platform fee
            billed off the

            order. Always present; empty only when every incurred charge is in
            `fees`. An absent

            kind with no `fees` line means nothing of that kind was charged.
            Open set: clients

            show an unknown kind generically.
          items:
            $ref: '#/components/schemas/OrderFeeKind'
          type: array
      required:
        - fills
        - quotedBuyAmount
        - settledBuyAmount
        - fees
        - unrecordedFees
        - settlesBy
      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
    VenueTradeOperation:
      description: >-
        A prepared or placed Basic venue trade. Track it by operationId and
        connectionId; executionStatus describes the trade and settlementStatus
        describes any subsequent money movement. initialReviewDisposition is the
        original planning verdict, not current approval. Only the documented
        fields are part of the integrator contract; undocumented fields may be
        sent and must be ignored.
      properties:
        bounds:
          $ref: '#/components/schemas/VenueTradeReviewBoundsDto'
        connectionId:
          format: uuid
          type: string
        createdAt:
          format: date-time
          type: string
        dispatch:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueTradeDispatch'
          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
        initialReviewDisposition:
          $ref: '#/components/schemas/VenueQuoteReviewDisposition'
          description: >-
            The original planning verdict; current review/policy must be
            reassessed.
        label:
          type: string
        operationId:
          format: uuid
          type: string
        providerClientOrderId:
          description: >-
            The client order id TetraFi sent the venue, once a dispatch was
            claimed.
          type:
            - string
            - 'null'
        providerSite:
          type: string
        quoteExpiresAt:
          description: Present exactly when `quote_id` is.
          format: date-time
          type:
            - string
            - 'null'
        quoteId:
          description: >-
            The quote bound at preparation, only on deprecated quote-bound

            preparations. Absent on bounds-first ones; the executed quote is
            always

            `dispatch.confirmed_quote_id`.
          format: uuid
          type:
            - string
            - 'null'
        quoteRequestId:
          description: >-
            The quote request the trade was ordered from (`rq_…`), when it was
            ordered through

            the quote set.
          type:
            - string
            - 'null'
        requestKey:
          format: uuid
          type: string
        requestedDeadline:
          format: date-time
          type:
            - string
            - 'null'
        reviewRequestId:
          format: uuid
          type:
            - string
            - 'null'
        settlementStatus:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueTradeSettlementStatus'
              description: >-
                The legs' settlement; `null` when the order has no legs. Always
                present.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        venueFilledAt:
          description: When the venue reports the fill happened, when it reported one.
          format: date-time
          type:
            - string
            - 'null'
        workspaceId:
          type: string
      required:
        - bounds
        - connectionId
        - createdAt
        - executionStatus
        - executionTypeId
        - initialReviewDisposition
        - label
        - operationId
        - providerSite
        - requestKey
        - workspaceId
      type: object
    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
    PublicOrderStatus:
      description: >-
        Open public lifecycle vocabulary shared by both order kinds. States may
        be

        skipped; act on `terminal`, not on a particular sequence.


        New values may be added; treat unknown values as other.
      enum:
        - pending
        - working
        - filled
        - settled
        - unfilled
        - cancelled
        - failed
        - refunded
        - reviewRequired
        - outcomeUnknown
        - refused
      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
    CreditCheck:
      description: >-
        Point-in-time credit evidence, never a reservation or dispatch
        authority.
      properties:
        activeHolds:
          type: string
        available:
          type: string
        availableSigned:
          type: string
        checkedAt:
          format: date-time
          type: string
        creditPortion:
          $ref: '#/components/schemas/CreditAmount'
        decision:
          type: string
        effectiveLimit:
          type: string
        exposureDelta:
          type: string
        exposureReducing:
          type: boolean
        journalVersion:
          type:
            - string
            - 'null'
        localHeadroom:
          type: string
        lpAvailable:
          type: string
        maxAgeMs:
          format: int64
          minimum: 0
          type: integer
        observationAgeMs:
          format: int64
          minimum: 0
          type: integer
        observationId:
          format: uuid
          type: string
        overLimitBy:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/CreditAmount'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        positionsBasis:
          description: >-
            Why the read vouches that an omitted asset holds zero; absent when
            no asset was omitted.
          type:
            - string
            - 'null'
        projectedUsed:
          type: string
        source:
          $ref: '#/components/schemas/CreditEvidenceSource'
        termsVersion:
          format: int64
          type: integer
        used:
          type: string
        valuationMaxAgeMs:
          format: int64
          minimum: 0
          type: integer
        venueAccountId:
          format: uuid
          type: string
        zeroAssets:
          description: >-
            Assets the LP's positions read omitted and that this decision
            counted as zero.
          items:
            type: string
          type: array
      required:
        - decision
        - venueAccountId
        - observationId
        - termsVersion
        - checkedAt
        - maxAgeMs
        - valuationMaxAgeMs
        - observationAgeMs
        - lpAvailable
        - effectiveLimit
        - used
        - localHeadroom
        - activeHolds
        - available
        - availableSigned
        - projectedUsed
        - exposureDelta
        - creditPortion
        - exposureReducing
        - source
      type: object
    CreditAmount:
      properties:
        amount:
          type: string
        currency:
          type: string
        lineValue:
          type:
            - string
            - 'null'
      required:
        - amount
        - currency
      type: object
    CreditReservation:
      description: >-
        A firm ask's combined hold on a credit account: the positives the trade
        spends

        (debit-asset units) and the credit exposure it may add (line currency),
        admitted together

        under the account lock. Held until the quote expires or Confirm adopts
        it; an indicative

        card never carries one. Neither a dispatch authority nor a consent.
      properties:
        debitAsset:
          type: string
        expiresAt:
          description: 'When the unsent hold is released: the quote''s own expiry.'
          format: date-time
          type: string
        exposureAmount:
          description: >-
            The credit exposure the trade may add, in the line currency, rounded
            up.
          type: string
        exposureCurrency:
          type: string
        inputAmount:
          description: The trade's full debit, exact.
          type: string
        operationId:
          description: The prepared trade the ask was made for, when it was.
          format: uuid
          type:
            - string
            - 'null'
        positiveInputAmount:
          description: >-
            The part of the debit spent from positives, in the debit asset,
            rounded up.
          type: string
        reservationId:
          format: uuid
          type: string
        state:
          $ref: '#/components/schemas/CreditReservationState'
          description: >-
            Reserved while unsent; released once it expired, was adopted or was
            superseded.
      required:
        - reservationId
        - debitAsset
        - inputAmount
        - positiveInputAmount
        - exposureAmount
        - exposureCurrency
        - expiresAt
        - state
      type: object
    ResolvedDeliverTo:
      description: >-
        A resolved destination includes observed presentation facts, unlike a
        request.


        New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          address: '#/components/schemas/ResolvedDeliverTo/oneOf/1'
          financialAccount: '#/components/schemas/ResolvedDeliverTo/oneOf/0'
        propertyName: kind
      oneOf:
        - properties:
            accountKind:
              $ref: '#/components/schemas/FundingAccountKind'
            displayName:
              type: string
            financialAccountId:
              type: string
            isDefault:
              type: boolean
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - financialAccount
              type: string
              x-extensible-enum: true
            network:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/Caip2Chain'
              x-undiscriminated-union-reason: >-
                Nullable value: JSON null has no properties and cannot carry a
                discriminator.
          required:
            - financialAccountId
            - accountKind
            - displayName
            - isDefault
            - kind
          type: object
        - properties:
            address:
              type: string
            calldata:
              type:
                - string
                - 'null'
            chain:
              $ref: '#/components/schemas/Caip2Chain'
            destinationTag:
              type:
                - string
                - 'null'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - address
              type: string
              x-extensible-enum: true
          required:
            - chain
            - address
            - kind
          type: object
      x-extensible-enum: true
    FundingAccount:
      description: >-
        What backs execution. A link id appears only when money moves through
        that link.
      properties:
        financialAccountId:
          type: string
        kind:
          $ref: '#/components/schemas/FundingAccountKind'
        linkId:
          format: uuid
          type:
            - string
            - 'null'
      required:
        - financialAccountId
        - kind
      type: object
    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
    PayInTerms:
      properties:
        afterPayBy:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/AfterPayBy_String'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        payBy:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/PayBy'
              description: >-
                `null` means the venue declares no deadline, not an inferred
                duration.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        settlementGrace:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/SettlementGrace'
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
      type: object
    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.
    TradingSource:
      description: >-
        The exact source selected for a quote, retained through execution and
        recovery.


        New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          venueAccount: '#/components/schemas/TradingSource/oneOf/0'
          wallet: '#/components/schemas/TradingSource/oneOf/1'
        propertyName: kind
      oneOf:
        - properties:
            financialAccountId:
              type: string
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - venueAccount
              type: string
              x-extensible-enum: true
            venueEnablementId:
              type: string
          required:
            - venueEnablementId
            - financialAccountId
            - kind
          type: object
        - properties:
            financialAccountId:
              type: string
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - wallet
              type: string
              x-extensible-enum: true
            network:
              $ref: '#/components/schemas/Caip2Chain'
            venueEnablementId:
              type: string
          required:
            - venueEnablementId
            - financialAccountId
            - network
            - kind
          type: object
      x-extensible-enum: true
    OrderFee:
      description: One fee actually charged.
      properties:
        amount:
          description: Decimal amount in `asset`.
          type: string
        asset:
          type: string
        chain:
          description: The CAIP-2 chain the fee was paid on, for an on-chain charge.
          type:
            - string
            - 'null'
        includedInPrice:
          description: >-
            True when the venue took this fee inside its price: the fill amounts
            already reflect

            it, so it is not charged on top of them.
          type: boolean
        kind:
          $ref: '#/components/schemas/OrderFeeKind'
      required:
        - kind
        - amount
        - asset
        - includedInPrice
      type: object
    OrderFill:
      description: 'One confirmed fill: what it delivered, what it spent and where.'
      properties:
        amount:
          description: >-
            The buy Asset amount this fill delivered. Null when the fill is
            confirmed but nothing

            measured its delivery.
          type:
            - string
            - 'null'
        at:
          description: >-
            The recorded fill time: the venue's fill time or the time the fill
            transaction was

            observed. Null when no fill time was recorded.
          format: date-time
          type:
            - string
            - 'null'
        fillId:
          description: >-
            Stable identity of this native dispatch or recorded route-leg fill.
            A row is one

            fill, never a running total; retain this id when deduplicating
            repeated order reads.
          type: string
        network:
          description: The CAIP-2 chain of `txHash`; absent off-chain.
          type:
            - string
            - 'null'
        price:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/OrderFillPrice'
              description: >-
                The executed price in market convention (quote units per one
                base unit). Null when

                either amount is unknown.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        sellAmount:
          description: >-
            The sell Asset amount this fill spent. Null when it was not
            recorded.
          type:
            - string
            - 'null'
        txHash:
          description: The fill's or settlement's on-chain transaction; absent off-chain.
          type:
            - string
            - 'null'
        venue:
          $ref: '#/components/schemas/OrderFillVenue'
      required:
        - fillId
        - amount
        - sellAmount
        - price
        - venue
        - at
      type: object
    OrderFeeKind:
      description: |-
        What a fee paid for.

        New values may be added; treat unknown values as other.
      enum:
        - trading
        - relayer
        - forwarding
        - transfer
        - network
        - platform
      type: string
      x-extensible-enum: true
    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
    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
    VenueTradeReviewBoundsDto:
      description: >-
        A venue trade's bounds on the wire, in the `POST /quotes` vocabulary:
        what the trade

        sells and buys. Exact decimal currency units.
      properties:
        buy:
          $ref: '#/components/schemas/TradeLeg'
          description: >-
            The Asset bought; `amount` is the least the trade delivers, net of
            fees deducted from it.
        buyAmount:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DecimalAmount'
              description: >-
                The exact amount bought, when the trader fixed what they
                receive.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        maximumFees:
          description: An absent asset is not permission to charge an unbounded fee in it.
          items:
            $ref: '#/components/schemas/VenueTradeFeeBoundDto'
          type: array
        sell:
          $ref: '#/components/schemas/TradeLeg'
          description: >-
            The Asset sold; `amount` is the most the trade spends, every fee
            charged in it included.
        sellAmount:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DecimalAmount'
              description: >-
                The exact amount sold, when the trader fixed what they sell. At
                most one of

                `sellAmount` and `buyAmount`; both are absent on an older trade
                that recorded neither.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
      required:
        - sell
        - buy
        - maximumFees
      type: object
    VenueTradeDispatch:
      description: >-
        The claimed venue submission and its recorded result. venueOrderId is
        the venue's native order identifier. Amounts are decimal currency units
        in the trade's debit and receipt assets; absent amounts are unknown,
        never zero. Only the documented fields are part of the integrator
        contract; undocumented fields may be sent and must be ignored.
      properties:
        claimedAt:
          format: date-time
          type: string
        confirmationKey:
          format: uuid
          type: string
        confirmedQuoteId:
          format: uuid
          type: string
        inputSpent:
          type:
            - string
            - 'null'
        outcomeCode:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueTradeOutcomeCode'
              description: >-
                Stable sanitized classification, never an upstream response
                body.
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
        outputReceived:
          type:
            - string
            - 'null'
        quotedOutput:
          description: >-
            The confirmed quote's output, beside `outputReceived`: a fill below
            it but

            within the trade's minimum receipt is a normal fill (operator
            decision

            2026-10-22), shown as "Received … (quoted …; within your minimum
            …)".
          type:
            - string
            - 'null'
        updatedAt:
          format: date-time
          type: string
        venueOrderId:
          type:
            - string
            - 'null'
      required:
        - claimedAt
        - confirmationKey
        - confirmedQuoteId
        - updatedAt
      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
    VenueQuoteReviewDisposition:
      description: |-
        Initial policy verdict retained on a preparation.

        New values may be added; treat unknown values as other.
      enum:
        - review_required
        - review_not_required
      type: string
      x-extensible-enum: true
    VenueTradeSettlementStatus:
      description: >-
        Where the order's money movement stands. executionStatus describes the
        trade, not settlement; settled means every money-movement leg has
        settled.


        New values may be added; treat unknown values as other.
      enum:
        - inProgress
        - settled
        - endedUnsettled
      type: string
      x-extensible-enum: true
    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
    CreditEvidenceSource:
      description: New values may be added; treat unknown values as other.
      enum:
        - tetraFi
      type: string
      x-extensible-enum: true
    CreditReservationState:
      description: New values may be added; treat unknown values as other.
      enum:
        - reserved
        - released
      type: string
      x-extensible-enum: true
    FundingAccountKind:
      description: New values may be added; treat unknown values as other.
      enum:
        - venueAccount
        - wallet
        - bankAccount
      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
    AfterPayBy_String:
      allOf:
        - $ref: '#/components/schemas/LateFunds'
        - properties:
            source:
              type: string
          required:
            - source
          type: object
      description: One family serves owned wire values and borrowed catalogue declarations.
    PayBy:
      properties:
        clock:
          $ref: '#/components/schemas/FundingClock'
        seconds:
          format: int32
          minimum: 0
          type: integer
      required:
        - seconds
        - clock
      type: object
    SettlementGrace:
      description: New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          no_grace: '#/components/schemas/SettlementGrace/oneOf/0'
          within: '#/components/schemas/SettlementGrace/oneOf/1'
        propertyName: kind
      oneOf:
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - no_grace
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - within
              type: string
              x-extensible-enum: true
            seconds:
              format: int32
              minimum: 0
              type: integer
          required:
            - seconds
            - kind
          type: object
      x-extensible-enum: true
    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.
    OrderFillPrice:
      description: 'An executed price: `amount` units of `quote` for one unit of `base`.'
      properties:
        amount:
          type: string
        base:
          type: string
        quote:
          type: string
      required:
        - amount
        - base
        - quote
      type: object
    OrderFillVenue:
      description: >-
        The venue that executed the fill, by the same id and name its quote
        carried.
      properties:
        id:
          type: string
        name:
          type: string
      required:
        - id
        - name
      type: object
    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
    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
    TradeLeg:
      description: >-
        One leg of a trade in the request's own vocabulary: the Asset sold or
        bought, its chain

        when the leg is on-chain, and an amount whose meaning the field naming
        the leg states.
      properties:
        amount:
          $ref: '#/components/schemas/DecimalAmount'
        asset:
          $ref: '#/components/schemas/AssetId'
        chain:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/Caip2Chain'
              description: Absent for a leg held on a venue account (off-chain).
          x-undiscriminated-union-reason: >-
            Nullable value: JSON null has no properties and cannot carry a
            discriminator.
      required:
        - asset
        - amount
      type: object
    VenueTradeFeeBoundDto:
      properties:
        asset:
          type: string
        maximumAmount:
          type: string
      required:
        - asset
        - maximumAmount
      type: object
    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
    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
    LateFunds:
      description: New values may be added; treat unknown values as other.
      discriminator:
        mapping:
          handled_by_support: '#/components/schemas/LateFunds/oneOf/3'
          held: '#/components/schemas/LateFunds/oneOf/2'
          re_priced: '#/components/schemas/LateFunds/oneOf/1'
          returned: '#/components/schemas/LateFunds/oneOf/0'
        propertyName: action
      oneOf:
        - properties:
            action:
              description: New values may be added; treat unknown values as other.
              enum:
                - returned
              type: string
              x-extensible-enum: true
          required:
            - action
          type: object
        - properties:
            action:
              description: New values may be added; treat unknown values as other.
              enum:
                - re_priced
              type: string
              x-extensible-enum: true
            untilSeconds:
              format: int32
              minimum: 0
              type: integer
          required:
            - untilSeconds
            - action
          type: object
        - properties:
            action:
              description: New values may be added; treat unknown values as other.
              enum:
                - held
              type: string
              x-extensible-enum: true
          required:
            - action
          type: object
        - properties:
            action:
              description: New values may be added; treat unknown values as other.
              enum:
                - handled_by_support
              type: string
              x-extensible-enum: true
          required:
            - action
          type: object
      x-extensible-enum: true
    FundingClock:
      description: |-
        What a pay-by deadline measures. Explicit tokens retain persisted terms.

        New values may be added; treat unknown values as other.
      enum:
        - payment_started
        - funds_arrived
      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
    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
    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.