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

# Unified protocol and venue-account quote auction

> The asset-pair contract (PairQuoteRequest or RequoteRequest); the legacy intent body is retired, so an object without `sell` or `requote` is 400 INVALID_REQUEST naming `sell`. Validated in order (INVALID_REQUEST naming the field, REQUOTE_FIELDS_CONFLICT, UNKNOWN_ASSET / UNKNOWN_CHAIN / UNKNOWN_VENUE naming the value, ASSET_NOT_ON_CHAIN (a side's Asset has no deployment on the chain pinned for it), INVALID_AMOUNT, SAME_ASSET_NEEDS_CHAIN, CHAIN_PIN_NEEDS_ON_CHAIN, out-of-range INVALID_REQUEST, ROUTING_OPTIONS_FORBIDDEN), then the request_quotes capability, and answered with a PairQuoteSet: every venue planned, venue-hitting plans limited to one every 3 s per principal (429 QUOTE_RATE_LIMITED with Retry-After; cache-only plans are not limited), quotes held for their owner and the set recorded for GET /quotes/requests/{quoteRequestId}. A requote body asks only the earlier quote's venue again (every venue of a multi-leg route, which answers that same route), as JSON (never a stream), and answers a PairQuoteSet whose one quote names it in requoteOf; the earlier quote stays held until its own expiry. Requote refusals: 400 CORRIDOR_NOT_OFFERED / WALLET_NOT_ON_CHAIN (a custody vault or registered workspace address bound to a chain it is not an account of; also on a fresh request), 403 SOURCE_NOT_OWNED / ACCOUNT_NOT_AVAILABLE / VENUE_NOT_AVAILABLE_TO_CREDENTIAL, 404 QUOTE_NOT_FOUND (unknown and another principal's quote alike), 409 REQUOTE_REFUSED (details.reason) / REQUOTE_NEEDS_WALLET / PERSONAL_TARGET_NOT_ALLOWED / QUOTE_CANNOT_BE_REFRESHED (a quote recorded before it could be refreshed for a broker's client), 410 REQUOTE_WINDOW_CLOSED (10 minutes after its expiry, past retainUntil; next search: request quotes again), 429 QUOTE_RATE_LIMITED / VENUE_FIRM_QUOTE_LIMITED /BUDGET_EXHAUSTED with Retry-After, 503 QUOTE_STORE_UNAVAILABLE / QUOTE_NOT_READY, 504 REQUOTE_TIMED_OUT. Every refusal, at every status, is the one error body ApiError {error, message, requestId, timestamp, next?, details?}. Optional filters narrow the auction. Orderable venue-account cards require a current MFA human Company/Broker session, or an API key holding workspace_venue_trade with its venue switch enabled and HMAC request signing. A member key with quotes_request but no venue-trading authority receives native indicative cards (firm false, expiresAt null) with sourceRefusal venueTradeScopeRequired and a re-issuance remedy, without any firm ask. On-chain sources without an organisation wallet grant are indicative with sourceRefusal onchainWalletNotUsable and a wallet-grant remedy; no signer is resolved. Quote-only observations never spend firm-quote budget, and their held refusal is returned if ordered. An API key quotes with quotes_request (which needs orders_write on the same key); it has no Default wallet of a member, so it binds a workspace wallet in bind.wallets: a workspace custody wallet, or an organisation wallet the key was granted (without that grant the source reads API_KEY_ORGANISATION_WALLET_SCOPE_REQUIRED), never a personal one (409 PERSONAL_TARGET_NOT_ALLOWED); its protocol venues remain non-orderable until it binds one; quote-only observations may show a native indicative price without borrowing a wallet. A desk on a production site is firm-asked only on request, the same for sessions and API keys, each one call: name it in filters.venues.include and its firm quote returns in that response, or requote its indicative card ({requote: quoteId}). A broad request never asks it: its card stays indicative and reads unavailable priceOnRequest when it publishes no price. Its next is requote, except where its firm quote lives 5 s or less: then it is order (execute within my limit), and that order makes the one ask, trading only at or above the person's minReceive; a requote of that card (Get firm quote) also asks it once under the same desk limits and returns a firm, executable card with its expiresAt. A sandbox or testnet desk that publishes nothing is firm-asked on a person's or API caller's request within the desk limits (firmQuoteLimited with retryAfter when they are reached); automation principals get it on requote only. On a venue-account card, bind.deliverTo {kind: address, chain, address, destinationTag?} names where the trade's output is withdrawn when the order for it fills: one of the workspace's own wallets that is an approved withdrawal destination of that venue account, for the receipt asset, with exactly that destination tag or memo. The card then carries that deliverTo, a network fee line for the venue's withdrawal fee (the most the order will pay; a higher fee at send refuses) and a receive net of it (netReceived unavailable withdrawalFeeUnread when the fee could not be read), and a requote keeps it. A venue that cannot deliver there answers its source unavailable with DESTINATION_NOT_APPROVED, DELIVER_TO_NOT_A_WORKSPACE_WALLET, WITHDRAWAL_CHAIN_UNSUPPORTED (no withdrawal network for that chain on the site; test sites have none), DELIVER_TO_AMBIGUOUS, WITHDRAWAL_FEE_EXCEEDS_AMOUNT, deliverToCalldataUnsupported or deliverToNotPermitted (deliverTo needs a member session with ViewWallets; an API key lists no deliverTo candidates, and a requote naming one answers 409 REQUOTE_REFUSED with details.reason deliverToNotPermitted). The request spends one Quote token; connection indicative pacing is reported on cards.



## OpenAPI

````yaml /api-reference/openapi.json post /api/v1/quotes
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:
  - url: https://api.tetrafi.io
security:
  - api_key: []
tags:
  - description: Request price quotes from multiple solvers for cross-chain transactions
    name: quotes
  - description: Submit, track, and manage cross-chain orders
    name: orders
  - description: Canonical trading pairs and aggregator metadata
    name: trading
  - description: >-
      Authentication — registration, login, SIWE, OAuth, sessions, login
      activity
    name: auth
  - description: Workspace CRUD, settings, members, and team management
    name: workspaces
  - description: >-
      Webhook management — CRUD, secret rotation, test delivery, delivery
      history
    name: webhooks
paths:
  /api/v1/quotes:
    post:
      tags:
        - quotes
      summary: Unified protocol and venue-account quote auction
      description: >-
        The asset-pair contract (PairQuoteRequest or RequoteRequest); the legacy
        intent body is retired, so an object without `sell` or `requote` is 400
        INVALID_REQUEST naming `sell`. Validated in order (INVALID_REQUEST
        naming the field, REQUOTE_FIELDS_CONFLICT, UNKNOWN_ASSET / UNKNOWN_CHAIN
        / UNKNOWN_VENUE naming the value, ASSET_NOT_ON_CHAIN (a side's Asset has
        no deployment on the chain pinned for it), INVALID_AMOUNT,
        SAME_ASSET_NEEDS_CHAIN, CHAIN_PIN_NEEDS_ON_CHAIN, out-of-range
        INVALID_REQUEST, ROUTING_OPTIONS_FORBIDDEN), then the request_quotes
        capability, and answered with a PairQuoteSet: every venue planned,
        venue-hitting plans limited to one every 3 s per principal (429
        QUOTE_RATE_LIMITED with Retry-After; cache-only plans are not limited),
        quotes held for their owner and the set recorded for GET
        /quotes/requests/{quoteRequestId}. A requote body asks only the earlier
        quote's venue again (every venue of a multi-leg route, which answers
        that same route), as JSON (never a stream), and answers a PairQuoteSet
        whose one quote names it in requoteOf; the earlier quote stays held
        until its own expiry. Requote refusals: 400 CORRIDOR_NOT_OFFERED /
        WALLET_NOT_ON_CHAIN (a custody vault or registered workspace address
        bound to a chain it is not an account of; also on a fresh request), 403
        SOURCE_NOT_OWNED / ACCOUNT_NOT_AVAILABLE /
        VENUE_NOT_AVAILABLE_TO_CREDENTIAL, 404 QUOTE_NOT_FOUND (unknown and
        another principal's quote alike), 409 REQUOTE_REFUSED (details.reason) /
        REQUOTE_NEEDS_WALLET / PERSONAL_TARGET_NOT_ALLOWED /
        QUOTE_CANNOT_BE_REFRESHED (a quote recorded before it could be refreshed
        for a broker's client), 410 REQUOTE_WINDOW_CLOSED (10 minutes after its
        expiry, past retainUntil; next search: request quotes again), 429
        QUOTE_RATE_LIMITED / VENUE_FIRM_QUOTE_LIMITED /BUDGET_EXHAUSTED with
        Retry-After, 503 QUOTE_STORE_UNAVAILABLE / QUOTE_NOT_READY, 504
        REQUOTE_TIMED_OUT. Every refusal, at every status, is the one error body
        ApiError {error, message, requestId, timestamp, next?, details?}.
        Optional filters narrow the auction. Orderable venue-account cards
        require a current MFA human Company/Broker session, or an API key
        holding workspace_venue_trade with its venue switch enabled and HMAC
        request signing. A member key with quotes_request but no venue-trading
        authority receives native indicative cards (firm false, expiresAt null)
        with sourceRefusal venueTradeScopeRequired and a re-issuance remedy,
        without any firm ask. On-chain sources without an organisation wallet
        grant are indicative with sourceRefusal onchainWalletNotUsable and a
        wallet-grant remedy; no signer is resolved. Quote-only observations
        never spend firm-quote budget, and their held refusal is returned if
        ordered. An API key quotes with quotes_request (which needs orders_write
        on the same key); it has no Default wallet of a member, so it binds a
        workspace wallet in bind.wallets: a workspace custody wallet, or an
        organisation wallet the key was granted (without that grant the source
        reads API_KEY_ORGANISATION_WALLET_SCOPE_REQUIRED), never a personal one
        (409 PERSONAL_TARGET_NOT_ALLOWED); its protocol venues remain
        non-orderable until it binds one; quote-only observations may show a
        native indicative price without borrowing a wallet. A desk on a
        production site is firm-asked only on request, the same for sessions and
        API keys, each one call: name it in filters.venues.include and its firm
        quote returns in that response, or requote its indicative card
        ({requote: quoteId}). A broad request never asks it: its card stays
        indicative and reads unavailable priceOnRequest when it publishes no
        price. Its next is requote, except where its firm quote lives 5 s or
        less: then it is order (execute within my limit), and that order makes
        the one ask, trading only at or above the person's minReceive; a requote
        of that card (Get firm quote) also asks it once under the same desk
        limits and returns a firm, executable card with its expiresAt. A sandbox
        or testnet desk that publishes nothing is firm-asked on a person's or
        API caller's request within the desk limits (firmQuoteLimited with
        retryAfter when they are reached); automation principals get it on
        requote only. On a venue-account card, bind.deliverTo {kind: address,
        chain, address, destinationTag?} names where the trade's output is
        withdrawn when the order for it fills: one of the workspace's own
        wallets that is an approved withdrawal destination of that venue
        account, for the receipt asset, with exactly that destination tag or
        memo. The card then carries that deliverTo, a network fee line for the
        venue's withdrawal fee (the most the order will pay; a higher fee at
        send refuses) and a receive net of it (netReceived unavailable
        withdrawalFeeUnread when the fee could not be read), and a requote keeps
        it. A venue that cannot deliver there answers its source unavailable
        with DESTINATION_NOT_APPROVED, DELIVER_TO_NOT_A_WORKSPACE_WALLET,
        WITHDRAWAL_CHAIN_UNSUPPORTED (no withdrawal network for that chain on
        the site; test sites have none), DELIVER_TO_AMBIGUOUS,
        WITHDRAWAL_FEE_EXCEEDS_AMOUNT, deliverToCalldataUnsupported or
        deliverToNotPermitted (deliverTo needs a member session with
        ViewWallets; an API key lists no deliverTo candidates, and a requote
        naming one answers 409 REQUOTE_REFUSED with details.reason
        deliverToNotPermitted). The request spends one Quote token; connection
        indicative pacing is reported on cards.
      operationId: post_quotes
      parameters:
        - $ref: '#/components/parameters/WorkspaceId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuotesRequestBody'
        required: true
      responses:
        '200':
          content:
            application/json:
              example:
                quoteRequestId: rq_01M5Z6TX3X834KT79RBP6X6FQB
                quotes: []
                sources:
                  - asked: false
                    detail: >-
                      This account is still being set up. Complete its required
                      activation steps in Treasury before requesting prices.
                    reason: accountSetupIncomplete
                    status: unavailable
                    venue:
                      id: selini-rfq
                      integrationMode: basic
                      logoUrl: null
                      modality: rfq
                      name: Selini Capital
                      protocolVersion: null
                      venueId: selini
                      venueName: Selini
                venueAsked: false
              schema:
                $ref: '#/components/schemas/QuotesResponseBody'
            text/event-stream:
              schema:
                type: string
          description: >-
            Quotes aggregated successfully: a PairQuoteSet. Accept:
            text/event-stream selects JSON-data SSE events: quote (PairQuote),
            source (QuoteSourceEntry), complete (PairQuoteSet), error. A venue
            the workspace's LP relationship does not allow reads restricted
            venueRelationship with neutral words in detail and is never asked.
            Event IDs increase monotonically; the stream includes keepalive
            comments. Example: broad USD 25000 to USDC, Selini source
            unavailable accountSetupIncomplete and asked=false; captured live
            (rfq 2ef31a1ea), one of twelve sources retained and referenceMid
            omitted. No Selini price or firm ask is implied; Selini USD
            settlement precision is six decimal places.
          headers:
            x-accel-buffering:
              description: no for the SSE response
              schema:
                type: string
            x-ratelimit-limit:
              description: >-
                Sent only when the request's API key has its own
                requests-per-minute limit: that limit. Sessions, and keys
                without their own limit, never receive it.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-remaining:
              description: >-
                Requests left before this caller is limited: the per-address
                limit's when that limit counted the request, otherwise the API
                key's own remaining allowance. Absent when no finite limit
                counted the request.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-reset:
              description: >-
                Sent with x-ratelimit-limit, only when the request's API key has
                its own limit: whole seconds until that allowance is full again.
              schema:
                minimum: 0
                type: integer
            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: >-
            Malformed JSON request body, or an asset-pair body refused by a
            validation row (its code names the row). Example: a broad USD to
            USDC request with amount zero, refused before any venue plan or
            provider I/O; captured live (rfq 2ef31a1ea)
          headers:
            x-ratelimit-limit:
              description: >-
                Sent only when the request's API key has its own
                requests-per-minute limit: that limit. Sessions, and keys
                without their own limit, never receive it.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-remaining:
              description: >-
                Requests left before this caller is limited: the per-address
                limit's when that limit counted the request, otherwise the API
                key's own remaining allowance. Absent when no finite limit
                counted the request.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-reset:
              description: >-
                Sent with x-ratelimit-limit, only when the request's API key has
                its own limit: whole seconds until that allowance is full again.
              schema:
                minimum: 0
                type: integer
            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:
            WWW-Authenticate:
              description: >-
                Sent when the request presented a bearer token and it was
                refused: `Bearer error="invalid_token"` (RFC 6750 section 3).
                Exchange a new token. A refused API key carries no challenge.
              schema:
                type: string
            x-ratelimit-limit:
              description: >-
                Sent only when the request's API key has its own
                requests-per-minute limit: that limit. Sessions, and keys
                without their own limit, never receive it.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-remaining:
              description: >-
                Requests left before this caller is limited: the per-address
                limit's when that limit counted the request, otherwise the API
                key's own remaining allowance. Absent when no finite limit
                counted the request.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-reset:
              description: >-
                Sent with x-ratelimit-limit, only when the request's API key has
                its own limit: whole seconds until that allowance is full again.
              schema:
                minimum: 0
                type: integer
            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: >-
            Workspace or capability access denied, or the named integrationAppId
            does not belong to the caller (INTEGRATION_APP_MISMATCH,
            INTEGRATION_APP_FORBIDDEN)
          headers:
            x-ratelimit-limit:
              description: >-
                Sent only when the request's API key has its own
                requests-per-minute limit: that limit. Sessions, and keys
                without their own limit, never receive it.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-remaining:
              description: >-
                Requests left before this caller is limited: the per-address
                limit's when that limit counted the request, otherwise the API
                key's own remaining allowance. Absent when no finite limit
                counted the request.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-reset:
              description: >-
                Sent with x-ratelimit-limit, only when the request's API key has
                its own limit: whole seconds until that allowance is full again.
              schema:
                minimum: 0
                type: integer
            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: >-
            Authenticated workspace not found, or a requoted quote id that is
            unknown or another principal's (QUOTE_NOT_FOUND). Example: a requote
            of an unknown quote id (captured live, rfq e31507829)
          headers:
            x-ratelimit-limit:
              description: >-
                Sent only when the request's API key has its own
                requests-per-minute limit: that limit. Sessions, and keys
                without their own limit, never receive it.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-remaining:
              description: >-
                Requests left before this caller is limited: the per-address
                limit's when that limit counted the request, otherwise the API
                key's own remaining allowance. Absent when no finite limit
                counted the request.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-reset:
              description: >-
                Sent with x-ratelimit-limit, only when the request's API key has
                its own limit: whole seconds until that allowance is full again.
              schema:
                minimum: 0
                type: integer
            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: >-
            Wallet identity conflicts with the requested ACE owner;
            LEGACY_CEX_LANE_RETIRED
          headers:
            x-ratelimit-limit:
              description: >-
                Sent only when the request's API key has its own
                requests-per-minute limit: that limit. Sessions, and keys
                without their own limit, never receive it.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-remaining:
              description: >-
                Requests left before this caller is limited: the per-address
                limit's when that limit counted the request, otherwise the API
                key's own remaining allowance. Absent when no finite limit
                counted the request.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-reset:
              description: >-
                Sent with x-ratelimit-limit, only when the request's API key has
                its own limit: whole seconds until that allowance is full again.
              schema:
                minimum: 0
                type: integer
            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: >-
            A requote of a quote more than 10 minutes past its expiry
            (QUOTE_EXPIRED)
          headers:
            x-ratelimit-limit:
              description: >-
                Sent only when the request's API key has its own
                requests-per-minute limit: that limit. Sessions, and keys
                without their own limit, never receive it.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-remaining:
              description: >-
                Requests left before this caller is limited: the per-address
                limit's when that limit counted the request, otherwise the API
                key's own remaining allowance. Absent when no finite limit
                counted the request.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-reset:
              description: >-
                Sent with x-ratelimit-limit, only when the request's API key has
                its own limit: whole seconds until that allowance is full again.
              schema:
                minimum: 0
                type: integer
            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: Quote request body exceeds the configured limit
          headers:
            x-ratelimit-limit:
              description: >-
                Sent only when the request's API key has its own
                requests-per-minute limit: that limit. Sessions, and keys
                without their own limit, never receive it.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-remaining:
              description: >-
                Requests left before this caller is limited: the per-address
                limit's when that limit counted the request, otherwise the API
                key's own remaining allowance. Absent when no finite limit
                counted the request.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-reset:
              description: >-
                Sent with x-ratelimit-limit, only when the request's API key has
                its own limit: whole seconds until that allowance is full again.
              schema:
                minimum: 0
                type: integer
            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: Content-Type must be application/json
          headers:
            x-ratelimit-limit:
              description: >-
                Sent only when the request's API key has its own
                requests-per-minute limit: that limit. Sessions, and keys
                without their own limit, never receive it.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-remaining:
              description: >-
                Requests left before this caller is limited: the per-address
                limit's when that limit counted the request, otherwise the API
                key's own remaining allowance. Absent when no finite limit
                counted the request.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-reset:
              description: >-
                Sent with x-ratelimit-limit, only when the request's API key has
                its own limit: whole seconds until that allowance is full again.
              schema:
                minimum: 0
                type: integer
            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: >-
            Request body could not be read or the quote intent is not executable
            for the selected router or venue state
          headers:
            x-ratelimit-limit:
              description: >-
                Sent only when the request's API key has its own
                requests-per-minute limit: that limit. Sessions, and keys
                without their own limit, never receive it.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-remaining:
              description: >-
                Requests left before this caller is limited: the per-address
                limit's when that limit counted the request, otherwise the API
                key's own remaining allowance. Absent when no finite limit
                counted the request.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-reset:
              description: >-
                Sent with x-ratelimit-limit, only when the request's API key has
                its own limit: whole seconds until that allowance is full again.
              schema:
                minimum: 0
                type: integer
            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 or per-key trade rate limit exceeded (RATE_LIMITED), or a
            second venue-hitting asset-pair request inside 3 s
            (QUOTE_RATE_LIMITED, with Retry-After)
          headers:
            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
            retry-after:
              description: Seconds until the request may be retried
              schema:
                format: int64
                minimum: 0
                type: integer
            x-ratelimit-limit:
              description: >-
                Sent only when the request's API key has its own
                requests-per-minute limit: that limit. Sessions, and keys
                without their own limit, never receive it.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-remaining:
              description: >-
                Requests left before this caller is limited: the per-address
                limit's when that limit counted the request, otherwise the API
                key's own remaining allowance. Absent when no finite limit
                counted the request.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-reset:
              description: >-
                Sent with x-ratelimit-limit, only when the request's API key has
                its own limit: whole seconds until that allowance is full again.
              schema:
                minimum: 0
                type: integer
            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:
            x-ratelimit-limit:
              description: >-
                Sent only when the request's API key has its own
                requests-per-minute limit: that limit. Sessions, and keys
                without their own limit, never receive it.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-remaining:
              description: >-
                Requests left before this caller is limited: the per-address
                limit's when that limit counted the request, otherwise the API
                key's own remaining allowance. Absent when no finite limit
                counted the request.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-reset:
              description: >-
                Sent with x-ratelimit-limit, only when the request's API key has
                its own limit: whole seconds until that allowance is full again.
              schema:
                minimum: 0
                type: integer
            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: >-
            The integration app binding could not be read
            (INTEGRATION_APP_UNAVAILABLE), or the registry catalogue cannot
            answer an asset-pair body (QUOTE_CATALOGUE_UNAVAILABLE)
          headers:
            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
            x-ratelimit-limit:
              description: >-
                Sent only when the request's API key has its own
                requests-per-minute limit: that limit. Sessions, and keys
                without their own limit, never receive it.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-remaining:
              description: >-
                Requests left before this caller is limited: the per-address
                limit's when that limit counted the request, otherwise the API
                key's own remaining allowance. Absent when no finite limit
                counted the request.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-reset:
              description: >-
                Sent with x-ratelimit-limit, only when the request's API key has
                its own limit: whole seconds until that allowance is full again.
              schema:
                minimum: 0
                type: integer
            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
        '504':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: The requoted venue did not answer in time (REQUOTE_TIMED_OUT)
          headers:
            x-ratelimit-limit:
              description: >-
                Sent only when the request's API key has its own
                requests-per-minute limit: that limit. Sessions, and keys
                without their own limit, never receive it.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-remaining:
              description: >-
                Requests left before this caller is limited: the per-address
                limit's when that limit counted the request, otherwise the API
                key's own remaining allowance. Absent when no finite limit
                counted the request.
              schema:
                minimum: 0
                type: integer
            x-ratelimit-reset:
              description: >-
                Sent with x-ratelimit-limit, only when the request's API key has
                its own limit: whole seconds until that allowance is full again.
              schema:
                minimum: 0
                type: integer
            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: []
        - bearer_auth: []
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:
    QuotesRequestBody:
      description: >-
        The `POST /quotes` request body, told apart by shape: a top-level
        `requote` is a

        Requote; any other object is a pair request (the legacy intent body is
        retired).
      oneOf:
        - $ref: '#/components/schemas/PairQuoteRequest'
        - $ref: '#/components/schemas/RequoteRequest'
    QuotesResponseBody:
      description: '`POST /quotes` 200 body: the quote set. Schema only.'
      oneOf:
        - $ref: '#/components/schemas/PairQuoteSet'
    ApiError:
      description: >-
        A refusal of an integrator operation. Codes are an open set: a client
        handles the codes it

        knows and falls back on the HTTP status for any other.
      properties:
        details:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/ApiErrorDetails'
        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).
        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, in Unix seconds.
          format: int64
          type: integer
      required:
        - error
        - docUrl
        - retryable
        - message
        - timestamp
      type: object
    PairQuoteRequest:
      additionalProperties: false
      description: >-
        The public fresh `POST /quotes` body: what the taker sells and buys, and
        exactly one of

        `sellAmount` (an exact-in quote) or `buyAmount` (an exact-out quote).
        Everything else

        refines it.
      properties:
        buy:
          $ref: '#/components/schemas/QuoteSideRequest'
          description: The Asset the taker buys, and optionally its chain.
        buyAmount:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DecimalAmount'
              description: >-
                The exact amount to buy, a positive decimal string in Asset
                units. Exactly one of

                `sellAmount` and `buyAmount`.
        deliverTo:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DeliverTo'
        filters:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/QuoteRequestFilters'
        integrationAppId:
          type:
            - string
            - 'null'
        onBehalfOf:
          description: The direct user a broker quotes for.
          type:
            - string
            - 'null'
        preferredWallets:
          additionalProperties:
            type: string
          description: >-
            Per CAIP-2 chain: a wallet the caller prefers to sell from, by
            target id or address. A

            preference, not a choice: a venue account uses it only where it is
            one of that account's

            linked wallets on the venue's network, and otherwise quotes from its
            own default; a venue is

            never refused because of it. `source.tradingWallets` is the explicit
            choice and wins on its chain.
          propertyNames:
            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
          type:
            - object
            - 'null'
        priceProtectionBps:
          description: >-
            The bound between a non-firm executable quote and what execution
            delivers.
          format: int32
          minimum: 0
          type:
            - integer
            - 'null'
        sell:
          $ref: '#/components/schemas/QuoteSideRequest'
          description: The Asset the taker sells, and optionally its chain.
        sellAmount:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DecimalAmount'
              description: >-
                The exact amount to sell, a positive decimal string in Asset
                units. Exactly one of

                `sellAmount` and `buyAmount` (400 `INVALID_REQUEST` naming both
                otherwise).
        sort:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/QuoteSort'
              description: Default `netReceived`.
        source:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/SourceSelection'
        timeout:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/IsoDuration'
              description: >-
                Collection deadline, an ISO 8601 duration; default `PT6S`, at
                least 100 milliseconds and at

                most `PT10S`.
      required:
        - sell
        - buy
      type: object
    RequoteRequest:
      additionalProperties: false
      description: >-
        Asks the venue of an earlier quote again. Only these fields.


        Only that quote's venue (every venue of a multi-leg route) is asked, for
        the same pair, amount and side,

        and the answer is one new held quote with `requoteOf`; the original
        stays orderable until its own expiry.

        A venue's indicative card gets its firm quote this way (every such
        venue, including one whose

        firm quote lives 5 s or less and whose card offers Execute within your
        limit, `next: order`), like naming

        the venue in `filters.venues.include`, under the same desk ask limits.
        Refusals, each by name: 404

        `QUOTE_NOT_FOUND` (unknown or another principal's), 410 `QUOTE_EXPIRED`
        (over 10 minutes past expiry),

        400 `CORRIDOR_NOT_OFFERED`, 403 `SOURCE_NOT_OWNED`,

        409 `PERSONAL_TARGET_NOT_ALLOWED` (an API key naming a personal wallet),
        400 `WALLET_NOT_ON_CHAIN`,

        403 `ACCOUNT_NOT_AVAILABLE`, 403 `VENUE_NOT_AVAILABLE_TO_CREDENTIAL`,
        409 `REQUOTE_REFUSED` (the venue's

        reason in `message`, its token in `details.reason`), 409
        `REQUOTE_NEEDS_WALLET`, 504 `REQUOTE_TIMED_OUT`,

        429 `QUOTE_RATE_LIMITED` / `VENUE_FIRM_QUOTE_LIMITED` /
        `BUDGET_EXHAUSTED` with `Retry-After`.
      properties:
        corridor:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/QuoteCorridor'
              description: >-
                Another corridor the original card offered (`corridors[]`, or
                its own).
        deliverTo:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DeliverTo'
        priceProtectionBps:
          description: >-
            The price protection for the new quote's `minOut`; absent keeps the
            original's.
          format: int32
          minimum: 0
          type:
            - integer
            - 'null'
        requote:
          description: The quote id to requote (`q_…`, from an earlier `POST /quotes`).
          type: string
        source:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/SourceSelection'
              description: >-
                A different wallet (one of the card's `bindingOptions`), venue
                account or delivery for the new

                quote; absent keeps the original's binding, re-keyed to the new
                corridor when one is given.
      required:
        - requote
      type: object
    PairQuoteSet:
      description: The JSON reply, and the SSE `complete` event.
      properties:
        quoteRequestId:
          description: >-
            The quote set's id (`rq_…`), read back at `GET
            /quotes/requests/{quoteRequestId}`.

            The HTTP request id is separate (`X-Request-Id`, an error body's
            `requestId`).
          type: string
        quotes:
          items:
            $ref: '#/components/schemas/PairQuote'
          type: array
        referenceMid:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/ReferenceMid'
              description: >-
                The Reference mid this request's cards were priced against, read
                once per request.

                Absent when the read failed or ran past its budget: the cards
                then read

                `noReferenceMid`, never a spread of 0.
        sourceOptions:
          description: >-
            The trading wallets this caller may name in `source.tradingWallets`,
            per network:

            each one's stored financial account (`acct_…`), scoped to the
            principal (an API key

            sees only the organisation wallets granted to it). Sent even when no
            card was priced,

            so an unbound request learns what to bind. Empty when none is
            usable.
          items:
            $ref: '#/components/schemas/SourceOption'
          type: array
        sources:
          description: Every considered venue, with its outcome.
          items:
            $ref: '#/components/schemas/QuoteSourceEntry'
          type: array
        venueAsked:
          description: >-
            Whether answering this request contacted any venue (a live or firm
            ask), always

            sent; `false` when every quote came from cache.
          type: boolean
      required:
        - quoteRequestId
        - quotes
        - sourceOptions
        - sources
        - venueAsked
      type: object
    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'
        field:
          description: '`INVALID_REQUEST` (out of range): the field.'
          type:
            - string
            - 'null'
        reason:
          description: >-
            A machine-readable reason token the refusing step gave.


            Known source reason tokens (not all apply to every status):
            `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`,
            `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`, `relayChainNotCarried`,
            `apiKeyAdvancedWalletUnsupported`,
            `apiKeyOrganisationWalletScopeRequired`, `grantCapExceeded`,
            `amountAboveMaximum`, `amountBelowMinimum`, `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`,
            `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`, `receiveWalletNotServed`, `referenceMidUnreadable`,
            `referencePriceUnavailable`, `registryUnavailable`,
            `releaseRecheckUnavailable`, `requestUnbuildable`,
            `routeLegChainUnknown`, `routeLegUnnamed`, `routeLegUnplanned`,
            `routeUnavailable`, `secondFactorUnreadable`, `shortfallUnmeasured`,
            `shortfallUnreadable`, `singleChainVenue`, `siteChainUnreadable`,
            `sizeNotEligible`, `submitOrderBlocked`,
            `takerOnboardingIncomplete`, `tierNotQuoted`, `tradePaused`,
            `unsupportedNative`, `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`,
            `bebopJamWalletUnsupported`, `bebopQuorumWalletTooSlow`,
            `bebopWalletQuorumUnreadable`, `connectionNotConfigured`,
            `deliveryAccountNetworkUnavailable`, `deliveryAccountUnavailable`,
            `destinationCannotSendOnChain`, `dexReferencePriceUnavailable`,
            `firmQuoteLimited`, `fundingAccountNetworkUnavailable`,
            `fundingAccountUnavailable`, `insufficientDepth`,
            `missingPermission`, `needsNativeGas`, `needsWallet`, `notPriced`,
            `payInTermsUnavailable`, `pilotTradeCapExceeded`,
            `platformFeeRateUnavailable`, `pricingBookPairUnserved`,
            `settlementDeclarationUnavailable`, `settlementNotAvailable`,
            `timedOut`, `timedOutBeforeSend`, `tradingSourceNetworkUnavailable`,
            `tradingSourceNotLinked`, `venueEnablementRechecking`,
            `venueEnablementUnavailable`, `venueListingTimedOut`,
            `venuePoliciesUnavailable`.


            New values may be added; treat unknown values as other.
          type:
            - string
            - 'null'
        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.
        value:
          description: >-
            `UNKNOWN_ASSET`, `UNKNOWN_CHAIN`, `UNKNOWN_VENUE`, `INVALID_AMOUNT`:
            the value refused;

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

        New values may be added; treat unknown values as other.
      discriminator:
        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: >-
            `POST /orders/preflight`: the held terms may need an approval,
            allowance or

            receipt the server cannot confirm from memory. Its response carries
            the next step.
          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'
            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 Binding slots 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
    QuoteSideRequest:
      additionalProperties: false
      description: 'One side of a quote request: an Asset, optionally pinned to a chain.'
      properties:
        asset:
          $ref: '#/components/schemas/AssetId'
        chain:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/Caip2Chain'
              description: >-
                Pins this side to one chain, which implies on-chain for this
                side.
      required:
        - asset
      type: object
    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
    DeliverTo:
      description: |-
        Output to own money (a financial account) or an explicit chain address.

        New values may be added; treat unknown values as other.
      discriminator:
        propertyName: kind
      oneOf:
        - additionalProperties: false
          properties:
            financialAccountId:
              type: string
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - financialAccount
              type: string
              x-extensible-enum: true
          required:
            - financialAccountId
            - kind
          type: object
        - additionalProperties: false
          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
    QuoteRequestFilters:
      additionalProperties: false
      description: The public request's narrowing filters; an omitted filter means all.
      properties:
        firmOnly:
          description: >-
            `true` keeps only firm cards (`firm: true`): the venue is bound to
            the price until

            `expiresAt`. Indicative cards and executable estimates held to
            `minOut` are left out;

            absent or `false` keeps all.
          type:
            - boolean
            - 'null'
        locations:
          items:
            $ref: '#/components/schemas/LocationKind'
          type:
            - array
            - 'null'
        modalities:
          items:
            $ref: '#/components/schemas/VenueModality'
          type:
            - array
            - 'null'
        variants:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/QuoteRequestVariants'
        venues:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueFilter'
      type: object
    QuoteSort:
      description: >-
        The order of `quotes[]`; ties break by venue id. There is no
        `recommended`.


        New values may be added; treat unknown values as other.
      enum:
        - netReceived
        - eta
      type: string
      x-extensible-enum: true
    SourceSelection:
      additionalProperties: false
      description: An explicit request choice. Every value is a financial-account id.
      properties:
        fundingAccountId:
          type:
            - string
            - 'null'
        tradingWallets:
          additionalProperties:
            type: string
          propertyNames:
            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
          type:
            - object
            - 'null'
        venueAccountId:
          type:
            - string
            - 'null'
      type: object
    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
    QuoteCorridor:
      additionalProperties: false
      description: A cross-chain route's source and destination chains.
      properties:
        from:
          $ref: '#/components/schemas/Caip2Chain'
        to:
          $ref: '#/components/schemas/Caip2Chain'
      required:
        - from
        - to
      type: object
    PairQuote:
      allOf:
        - $ref: '#/components/schemas/CardFirmness'
          description: The card's firmness, written as `firm` and `lastLook`.
        - anyOf:
            - $ref: '#/components/schemas/ResolvedTradingSource'
            - not:
                anyOf:
                  - required:
                      - tradingSource
                  - required:
                      - fundingModel
                  - required:
                      - settlement
                  - required:
                      - fundingAccount
                  - required:
                      - deliverTo
        - properties:
            advisories:
              description: >-
                Competing mechanisms' limitations remain visible even when one
                serves.
              items:
                $ref: '#/components/schemas/RfqMechanismAdvisory'
              type: array
            assurance:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteAssurance'
                  description: >-
                    The bond backing the quote, separate from its firmness; null
                    when unbonded.
            basis:
              $ref: '#/components/schemas/QuoteBasis'
              description: >-
                Where the price came from: a live venue quote, published levels,
                or a model.
            buy:
              $ref: '#/components/schemas/QuoteSide'
              description: >-
                What the taker buys: `buy.amount` is what lands at `deliverTo`,
                after every

                `included: true` fee taken in the bought Asset.
            corridors:
              description: >-
                The venue's other supported corridors; changing one is a
                Requote.
              items:
                $ref: '#/components/schemas/QuoteCorridor'
              type: array
            eta:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/IsoDuration'
                  description: >-
                    Expected time to delivery (ISO 8601 duration); null when the
                    venue states none.
            expiresAt:
              description: >-
                When an executable quote stops being orderable; null for an
                indicative one (see `staleAfter`).
              format: date-time
              type:
                - string
                - 'null'
            failureHandling:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteFailureHandling'
                  description: >-
                    What happens to the input if execution fails, as the venue
                    reports it.
            fees:
              description: >-
                Every fee line, its payer and whether `buy.amount` already
                includes it; an amount that could

                not be read is null, never 0.
              items:
                $ref: '#/components/schemas/QuoteFee'
              type: array
            firmAsk:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/FirmAsk'
                  description: >-
                    When this card's venue gives its binding price, from the
                    venue's own declaration:

                    `onRequest` (a desk is firm-asked by Get firm quote or a
                    requote) or `atExecution`

                    (the venue prices firm only when the order executes, so Get
                    firm quote is not offered).

                    Absent when no venue declares it (protocol routes, order
                    books, fiat venues).
            firmAskAvailableAt:
              description: >-
                When this desk takes its next firm ask: its firm-quote limit for
                this workspace is reached

                until then, so Get firm quote and an order-time ask are refused
                before it. Absent

                when no limit is known here; the desk's admission still decides
                at ask time.
              format: date-time
              type:
                - string
                - 'null'
            firmQuoteDailyWarning:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/FirmQuoteDailyWarning'
                  description: >-
                    Current workspace/venue firm asks, read without contacting
                    the provider.
            id:
              description: >-
                The held quote's id (`q_` + ULID): order it with `POST /orders
                {quoteId}`, preflight it with

                `POST /orders/preflight {quoteId}`, requote it with `POST
                /quotes {requote: id}`. It belongs to the

                principal that asked; another principal reads it as unknown
                (404).
              type: string
            legs:
              description: >-
                One leg per venue the quote runs through, in execution order: a
                multi-leg route (for example

                CCTP then Circle StableFX) lists each leg's venue and location.
              items:
                $ref: '#/components/schemas/QuoteLeg'
              type: array
            location:
              $ref: '#/components/schemas/QuoteLocation'
              description: Where the quote executes, derived from its legs.
            maxPay:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/DecimalAmount'
                  description: >-
                    The most `sell.amount` a venue card asked by `buyAmount` may
                    debit: the mirror of `minOut`, the quoted

                    debit grown by `priceProtectionBps`. It is the consent an
                    order on it carries, so Confirm's

                    one fresh quote of an expired card is judged by it. Absent
                    when asked by `sellAmount`.
            mechanism:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/RfqMechanism'
                  description: >-
                    The native mechanism that actually supplied this venue's
                    price.
            minOut:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/DecimalAmount'
                  description: >-
                    The least `buy.amount` execution may deliver (from
                    `priceProtectionBps`).
            minReceiveRequired:
              description: >-
                Whether `POST /orders` requires `minReceive` for this card. A
                held firm offer

                already supplies confirmation; other within-limit cards need the
                caller's minimum.
              type: boolean
            netReceived:
              $ref: '#/components/schemas/NetReceived'
              description: >-
                `buy.amount` minus every other cost, converted at the Reference
                mid: for

                comparison and sort only, never what lands.
            next:
              $ref: '#/components/schemas/QuoteNextAction'
              description: >-
                The caller's next call: `preflight` (protocol), `order`,
                `requote` (a production venue's indicative

                card: its firm quote comes from a requote), or what to fix
                first.
            observedAt:
              description: >-
                When the price was observed: an indicative price, or the book
                read an executable

                order-book estimate (one that reprices when chosen) was priced
                from; null for a firm quote.
              format: date-time
              type:
                - string
                - 'null'
            readiness:
              $ref: '#/components/schemas/Readiness'
              description: >-
                Whether the quote can be ordered now (funding, gas, wallet); an
                unknown is `unavailable`, never 0.
            refundClaimableAfter:
              description: >-
                With `refundOnSource` on an escrowed intent: the instant after
                which the source-chain

                escrow refunds the input if the order was not filled, read from
                the signed order's own

                expiry (`expires`). Until then the input stays in that escrow.
                Absent when the quote holds

                no escrowed intent or its expiry could not be read; never
                estimated.
              format: date-time
              type:
                - string
                - 'null'
            requoteOf:
              description: >-
                The quote this one requoted (`POST /quotes {requote}`); the
                original stays orderable until its own

                expiry, and a route's requote is that same route.
              type:
                - string
                - 'null'
            retainUntil:
              description: >-
                The last instant this held quote can still be requoted, or
                ordered where its lapse

                allows it: its lapse plus the requote window (10 minutes), or
                the recovery window

                (30 minutes) for a protocol quote. After it, requote and order
                answer 410

                `REQUOTE_WINDOW_CLOSED` with `next: search` (request quotes
                again); before it, an

                order past the quote's lapse answers 410 `QUOTE_EXPIRED` with
                `next: requote`. Read from the held quote's own retention, never
                computed by a client;

                absent when that instant is not representable.
              format: date-time
              type:
                - string
                - 'null'
            screening:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteScreening'
                  description: >-
                    The bound wallet's screening state; null when no wallet is
                    bound.
            sell:
              $ref: '#/components/schemas/QuoteSide'
              description: >-
                What the taker sells: Asset, chain (null off-chain), variant and
                amount in Asset units.
            signaturesRequired:
              description: >-
                Every signature the order needs. `next.sign` carries the first;
                later ones arrive

                on the order as `signNextLeg`.
              format: int32
              minimum: 0
              type:
                - integer
                - 'null'
            sizeLimits:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/VenueRfqSizeObservation'
                  description: >-
                    Provider bounds retained with this answer, never a current
                    admission grant.
            sourceOptions:
              items:
                $ref: '#/components/schemas/SourceOption'
              type: array
            sourceRefusal:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteTradingSourceRefusal'
            spreadFromMidBps:
              $ref: '#/components/schemas/SpreadFromMid'
              description: >-
                The price's distance from the Reference mid, or the reason it is
                unknown.
            staleAfter:
              description: >-
                When an indicative price goes stale; null for an executable
                quote.
              format: date-time
              type:
                - string
                - 'null'
            unspent:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/UnspentPay'
                  description: >-
                    What a card asked by `sellAmount` leaves unspent of the
                    amount asked: an order book fills whole

                    lots, so the card spends less and the rest stays where it is
                    paid from. Absent when the card

                    spends the whole amount.
            walletSelection:
              additionalProperties:
                $ref: '#/components/schemas/QuoteWalletSelection'
              description: >-
                Why each Basic on-chain wallet was selected. Response metadata,
                never request authority.
              propertyNames:
                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
              type: object
          required:
            - advisories
            - assurance
            - basis
            - buy
            - corridors
            - eta
            - expiresAt
            - failureHandling
            - fees
            - id
            - legs
            - location
            - minOut
            - minReceiveRequired
            - netReceived
            - next
            - observedAt
            - readiness
            - requoteOf
            - screening
            - sell
            - signaturesRequired
            - sourceOptions
            - spreadFromMidBps
            - staleAfter
          type: object
      description: >-
        One venue's quote for the pair. Every field is always present; one that
        does not

        apply to the quote's firmness is `null`:


        | field | indicative | executable, firm | executable, non-firm |

        |---|---|---|---|

        | `firm` | false | true | false |

        | `expiresAt` | null | set | set |

        | `minOut` | null | null | set |

        | `observedAt`, `staleAfter` | set | null | null |


        A stub (`sources[].priceOnRequest`) is indicative with `null` amounts.


        The example is an executable non-firm quote: 10000 USDC paid,

        `buy.amount` 9996.0 USDT lands after the included 4.0 USDT provider fee;

        `netReceived` 9994.8 also subtracts the 0.0004 ETH network fee the taker
        pays

        separately (`included: false`, about 1.2 USDT at the Reference mid), so
        it is lower

        than `buy.amount`; `minOut` 9966.01 (30 bps) bounds `buy.amount`, not

        `netReceived`.
      example:
        advisories: []
        assurance: null
        basis: liveQuote
        binding:
          deliverTo:
            address: '0x1111111111111111111111111111111111111111'
            chain: eip155:8453
            kind: address
          wallets:
            eip155:42161: lw_01JAX
        bindingOptions: []
        buy:
          amount: '9996.0'
          asset: USDT
          chain: eip155:8453
          variant:
            kind: native
            name: USDT
        corridors:
          - from: eip155:1
            to: eip155:8453
        eta: PT40S
        expiresAt: '2026-10-17T10:01:00Z'
        failureHandling: refundOnSource
        fees:
          - amount: '4.0'
            asset: USDT
            chain: null
            included: true
            kind: provider
            leg: 0
            paidBy: taker
          - amount: '0.0004'
            asset: ETH
            chain: eip155:42161
            included: false
            kind: network
            leg: 0
            paidBy: taker
        firm: false
        id: q_01JAY7Q5M3ZK8V2N4R6T8W0XYB
        lastLook: false
        legs:
          - expectedArrival: null
            fundingModel: null
            location:
              from: eip155:42161
              kind: crossChain
              to: eip155:8453
            venue:
              id: tetrafi-solver
              logoUrl: null
              modality: solver
              name: TetraFi Solver
              protocolVersion: null
        location:
          kind: crossChain
        minOut: '9966.01'
        minReceiveRequired: false
        netReceived:
          amount: '9994.8'
          kind: known
        next:
          kind: sign
          typedData: {}
        observedAt: null
        readiness:
          kind: ready
        requoteOf: null
        screening: screened
        sell:
          amount: '10000'
          asset: USDC
          chain: eip155:42161
          variant:
            kind: native
            name: USDC
        signaturesRequired: 1
        spreadFromMidBps:
          bps: 6
          kind: known
        staleAfter: null
    ReferenceMid:
      description: >-
        The Reference USD price of the request's two assets, and the mid they
        imply.
      properties:
        buyPerSell:
          description: Buy-asset units per one sell-asset unit (`sellUsd / buyUsd`).
          type: string
        buyUsd:
          description: USD per one unit of the buy asset.
          type: string
        sellUsd:
          description: USD per one unit of the sell asset.
          type: string
      required:
        - sellUsd
        - buyUsd
        - buyPerSell
      type: object
    SourceOption:
      description: New values may be added; treat unknown values as other.
      oneOf:
        - properties:
            candidates:
              items:
                $ref: '#/components/schemas/SourceCandidate'
              type: array
            chain:
              $ref: '#/components/schemas/Caip2Chain'
            family:
              $ref: '#/components/schemas/ChainFamily'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - wallet
              type: string
              x-extensible-enum: true
          required:
            - family
            - chain
            - candidates
            - kind
          type: object
        - properties:
            candidates:
              items:
                $ref: '#/components/schemas/SourceCandidate'
              type: array
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - venueAccount
              type: string
              x-extensible-enum: true
          required:
            - candidates
            - kind
          type: object
        - properties:
            candidates:
              items:
                $ref: '#/components/schemas/SourceCandidate'
              type: array
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - fundingAccount
              type: string
              x-extensible-enum: true
          required:
            - candidates
            - kind
          type: object
        - properties:
            candidates:
              items:
                $ref: '#/components/schemas/SourceCandidate'
              type: array
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - deliverTo
              type: string
              x-extensible-enum: true
          required:
            - candidates
            - kind
          type: object
      x-extensible-enum: true
    QuoteSourceEntry:
      description: >-
        One considered venue's outcome, a closed set tagged `status`:


        | status | meaning |

        |---|---|

        | `asking` | in flight on the stream only: the auction is consulting
        this venue now; its final outcome replaces it under the same venue key,
        and none remains at `complete` |

        | `answered` | the venue produced a quote |

        | `needsWallet` | no wallet of `family` to ask with |

        | `walletRefused` | the bound wallet is refused (`Revoked`, a confirmed
        sanctions hit) |

        | `firmQuoteLimited` | a desk's firm-quote cap applies; `explanation` is
        product copy |

        | `priceOnRequest` | no venue price was requested; `quoteId` identifies
        the held estimate or stub to Requote |

        | `askLimitReached` | the venue's ask limit is reached for now;
        `retryAfter` says when to ask again |

        | `timedOut` | no answer inside the deadline |

        | `refused` | the venue refused the live ask |

        | `restricted` | a gate kept the venue from this principal |

        | `unsupported` | the venue does not serve the pair |

        | `filteredOut` | the request's own filters exclude it (never a coverage
        or chain gap) |

        | `unavailable` | a read failed (`admissionUnavailable`, …) |


        An unscreened default wallet is not a status: the quote carries
        `screening`. `venue`

        is the venue block, its `id` the one quote legs and `/prices` rows
        carry. Durations

        (`retryAfter`) are ISO 8601, counted from when the response was sent.
        Every entry

        carries `asked`: whether this venue was consulted for this request: a
        live ask, or a

        fresh read of its published book or live desk price within that source's
        freshness

        window. An estimate no venue gave (a model or reference price) is not
        consulted, and

        an `answered` entry is always consulted. How a card's price was obtained
        is its own

        price basis, never this flag.


        New values may be added; treat unknown values as other.
      discriminator:
        propertyName: status
      oneOf:
        - description: >-
            A venue the auction is consulting for this request, sent before its
            first quote

            (`asked` is always `true`). A venue refused before sending ends with
            that named

            refusal and `asked: false`. Transient: the same venue key's final
            outcome replaces it,

            so it never appears in `complete` or the JSON reply.
          properties:
            asked:
              type: boolean
            detail:
              type:
                - string
                - 'null'
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - asking
              type: string
              x-extensible-enum: true
            venue:
              $ref: '#/components/schemas/QuoteVenue'
          required:
            - asked
            - detail
            - status
            - venue
          type: object
        - properties:
            asked:
              type: boolean
            detail:
              type:
                - string
                - 'null'
            fix:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteSourceFix'
                  description: >-
                    The server-owned recovery step; absent on an unblocked or
                    older source.
            product:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/BridgeTransferMode'
                  description: >-
                    The independently priced product, when this venue offers
                    several.
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - answered
              type: string
              x-extensible-enum: true
            venue:
              $ref: '#/components/schemas/QuoteVenue'
          required:
            - asked
            - detail
            - status
            - venue
          type: object
        - properties:
            asked:
              type: boolean
            detail:
              type:
                - string
                - 'null'
            family:
              $ref: '#/components/schemas/ChainFamily'
            fix:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteSourceFix'
                  description: >-
                    The server-owned recovery step; absent on an unblocked or
                    older source.
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - needsWallet
              type: string
              x-extensible-enum: true
            venue:
              $ref: '#/components/schemas/QuoteVenue'
          required:
            - asked
            - detail
            - family
            - status
            - venue
          type: object
        - properties:
            asked:
              type: boolean
            detail:
              type:
                - string
                - 'null'
            fix:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteSourceFix'
                  description: >-
                    The server-owned recovery step; absent on an unblocked or
                    older source.
            product:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/BridgeTransferMode'
                  description: >-
                    The independently priced product, when this venue offers
                    several.
            reason:
              description: >-
                Known source reason tokens (not all apply to every status):
                `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`, `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`,
                `relayChainNotCarried`, `apiKeyAdvancedWalletUnsupported`,
                `apiKeyOrganisationWalletScopeRequired`, `grantCapExceeded`,
                `amountAboveMaximum`, `amountBelowMinimum`, `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`, `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`,
                `receiveWalletNotServed`, `referenceMidUnreadable`,
                `referencePriceUnavailable`, `registryUnavailable`,
                `releaseRecheckUnavailable`, `requestUnbuildable`,
                `routeLegChainUnknown`, `routeLegUnnamed`, `routeLegUnplanned`,
                `routeUnavailable`, `secondFactorUnreadable`,
                `shortfallUnmeasured`, `shortfallUnreadable`,
                `singleChainVenue`, `siteChainUnreadable`, `sizeNotEligible`,
                `submitOrderBlocked`, `takerOnboardingIncomplete`,
                `tierNotQuoted`, `tradePaused`, `unsupportedNative`,
                `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`, `bebopJamWalletUnsupported`,
                `bebopQuorumWalletTooSlow`, `bebopWalletQuorumUnreadable`,
                `connectionNotConfigured`, `deliveryAccountNetworkUnavailable`,
                `deliveryAccountUnavailable`, `destinationCannotSendOnChain`,
                `dexReferencePriceUnavailable`, `firmQuoteLimited`,
                `fundingAccountNetworkUnavailable`, `fundingAccountUnavailable`,
                `insufficientDepth`, `missingPermission`, `needsNativeGas`,
                `needsWallet`, `notPriced`, `payInTermsUnavailable`,
                `pilotTradeCapExceeded`, `platformFeeRateUnavailable`,
                `pricingBookPairUnserved`, `settlementDeclarationUnavailable`,
                `settlementNotAvailable`, `timedOut`, `timedOutBeforeSend`,
                `tradingSourceNetworkUnavailable`, `tradingSourceNotLinked`,
                `venueEnablementRechecking`, `venueEnablementUnavailable`,
                `venueListingTimedOut`, `venuePoliciesUnavailable`.


                New values may be added; treat unknown values as other.
              type:
                - string
                - 'null'
            recovery:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/WalletLinkRecovery'
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - walletRefused
              type: string
              x-extensible-enum: true
            venue:
              $ref: '#/components/schemas/QuoteVenue'
            wallet:
              type: string
          required:
            - asked
            - detail
            - status
            - venue
            - wallet
          type: object
        - properties:
            asked:
              type: boolean
            code:
              description: >-
                VENUE_QUOTE_RATE_LIMITED for a provider throttle;
                VENUE_FIRM_QUOTE_LIMITED for a workspace cap.
              example: VENUE_QUOTE_RATE_LIMITED
              type:
                - string
                - 'null'
            detail:
              type:
                - string
                - 'null'
            explanation:
              type: string
            fix:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteSourceFix'
                  description: >-
                    The server-owned recovery step; absent on an unblocked or
                    older source.
            retryAfter:
              $ref: '#/components/schemas/IsoDuration'
            retrySource:
              description: >-
                The native provider retry field, provider:legacyLpReported for
                old stored blocks,

                tetrafi:declaredPool for our pool, or explicit
                AQ09_DEFAULT.cooldown.
              example: provider:Retry-After
              type:
                - string
                - 'null'
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - firmQuoteLimited
              type: string
              x-extensible-enum: true
            venue:
              $ref: '#/components/schemas/QuoteVenue'
          required:
            - asked
            - detail
            - explanation
            - retryAfter
            - status
            - venue
          type: object
        - description: >-
            A priced indicative card from a venue read or estimate, without a
            firm-price ask.

            `asked` is false when this request did not consult the venue. The
            card's

            `firmAsk` declares whether the binding price comes on request or at
            execution.
          properties:
            asked:
              type: boolean
            detail:
              type:
                - string
                - 'null'
            fix:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteSourceFix'
                  description: >-
                    The server-owned recovery step; absent on an unblocked or
                    older source.
            product:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/BridgeTransferMode'
                  description: >-
                    The independently priced product, when this venue offers
                    several.
            quoteId:
              type: string
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - indicative
              type: string
              x-extensible-enum: true
            venue:
              $ref: '#/components/schemas/QuoteVenue'
          required:
            - asked
            - detail
            - quoteId
            - status
            - venue
          type: object
        - properties:
            asked:
              type: boolean
            detail:
              type:
                - string
                - 'null'
            fix:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteSourceFix'
                  description: >-
                    The server-owned recovery step; absent on an unblocked or
                    older source.
            quoteId:
              type: string
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - priceOnRequest
              type: string
              x-extensible-enum: true
            venue:
              $ref: '#/components/schemas/QuoteVenue'
          required:
            - asked
            - detail
            - quoteId
            - status
            - venue
          type: object
        - properties:
            asked:
              type: boolean
            detail:
              type:
                - string
                - 'null'
            fix:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteSourceFix'
                  description: >-
                    The server-owned recovery step; absent on an unblocked or
                    older source.
            retryAfter:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/IsoDuration'
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - askLimitReached
              type: string
              x-extensible-enum: true
            venue:
              $ref: '#/components/schemas/QuoteVenue'
          required:
            - asked
            - detail
            - retryAfter
            - status
            - venue
          type: object
        - properties:
            asked:
              type: boolean
            detail:
              type:
                - string
                - 'null'
            fix:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteSourceFix'
                  description: >-
                    The server-owned recovery step; absent on an unblocked or
                    older source.
            network:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/Caip2Chain'
                  description: >-
                    The one network this outcome belongs to: a single-chain
                    route of a venue that holds one

                    account per network, so it sits on that network's line
                    beside the venue's account there.

                    Absent for a route that spans several networks or names
                    none.
            product:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/BridgeTransferMode'
                  description: >-
                    The independently priced product, when this venue offers
                    several.
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - timedOut
              type: string
              x-extensible-enum: true
            venue:
              $ref: '#/components/schemas/QuoteVenue'
          required:
            - asked
            - detail
            - status
            - venue
          type: object
        - properties:
            asked:
              type: boolean
            detail:
              type:
                - string
                - 'null'
            fix:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteSourceFix'
                  description: >-
                    The server-owned recovery step; absent on an unblocked or
                    older source.
            network:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/Caip2Chain'
                  description: >-
                    The one network this outcome belongs to: a single-chain
                    route of a venue that holds one

                    account per network, so it sits on that network's line
                    beside the venue's account there.

                    Absent for a route that spans several networks or names
                    none.
            reason:
              description: >-
                Known source reason tokens (not all apply to every status):
                `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`, `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`,
                `relayChainNotCarried`, `apiKeyAdvancedWalletUnsupported`,
                `apiKeyOrganisationWalletScopeRequired`, `grantCapExceeded`,
                `amountAboveMaximum`, `amountBelowMinimum`, `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`, `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`,
                `receiveWalletNotServed`, `referenceMidUnreadable`,
                `referencePriceUnavailable`, `registryUnavailable`,
                `releaseRecheckUnavailable`, `requestUnbuildable`,
                `routeLegChainUnknown`, `routeLegUnnamed`, `routeLegUnplanned`,
                `routeUnavailable`, `secondFactorUnreadable`,
                `shortfallUnmeasured`, `shortfallUnreadable`,
                `singleChainVenue`, `siteChainUnreadable`, `sizeNotEligible`,
                `submitOrderBlocked`, `takerOnboardingIncomplete`,
                `tierNotQuoted`, `tradePaused`, `unsupportedNative`,
                `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`, `bebopJamWalletUnsupported`,
                `bebopQuorumWalletTooSlow`, `bebopWalletQuorumUnreadable`,
                `connectionNotConfigured`, `deliveryAccountNetworkUnavailable`,
                `deliveryAccountUnavailable`, `destinationCannotSendOnChain`,
                `dexReferencePriceUnavailable`, `firmQuoteLimited`,
                `fundingAccountNetworkUnavailable`, `fundingAccountUnavailable`,
                `insufficientDepth`, `missingPermission`, `needsNativeGas`,
                `needsWallet`, `notPriced`, `payInTermsUnavailable`,
                `pilotTradeCapExceeded`, `platformFeeRateUnavailable`,
                `pricingBookPairUnserved`, `settlementDeclarationUnavailable`,
                `settlementNotAvailable`, `timedOut`, `timedOutBeforeSend`,
                `tradingSourceNetworkUnavailable`, `tradingSourceNotLinked`,
                `venueEnablementRechecking`, `venueEnablementUnavailable`,
                `venueListingTimedOut`, `venuePoliciesUnavailable`.


                New values may be added; treat unknown values as other.
              type: string
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - refused
              type: string
              x-extensible-enum: true
            venue:
              $ref: '#/components/schemas/QuoteVenue'
          required:
            - asked
            - detail
            - reason
            - status
            - venue
          type: object
        - properties:
            asked:
              type: boolean
            detail:
              type:
                - string
                - 'null'
            fix:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteSourceFix'
                  description: >-
                    The server-owned recovery step; absent on an unblocked or
                    older source.
            reason:
              $ref: '#/components/schemas/RestrictedReason'
              description: >-
                Known source reason tokens (not all apply to every status):
                `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`, `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`,
                `relayChainNotCarried`, `apiKeyAdvancedWalletUnsupported`,
                `apiKeyOrganisationWalletScopeRequired`, `grantCapExceeded`,
                `amountAboveMaximum`, `amountBelowMinimum`, `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`, `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`,
                `receiveWalletNotServed`, `referenceMidUnreadable`,
                `referencePriceUnavailable`, `registryUnavailable`,
                `releaseRecheckUnavailable`, `requestUnbuildable`,
                `routeLegChainUnknown`, `routeLegUnnamed`, `routeLegUnplanned`,
                `routeUnavailable`, `secondFactorUnreadable`,
                `shortfallUnmeasured`, `shortfallUnreadable`,
                `singleChainVenue`, `siteChainUnreadable`, `sizeNotEligible`,
                `submitOrderBlocked`, `takerOnboardingIncomplete`,
                `tierNotQuoted`, `tradePaused`, `unsupportedNative`,
                `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`, `bebopJamWalletUnsupported`,
                `bebopQuorumWalletTooSlow`, `bebopWalletQuorumUnreadable`,
                `connectionNotConfigured`, `deliveryAccountNetworkUnavailable`,
                `deliveryAccountUnavailable`, `destinationCannotSendOnChain`,
                `dexReferencePriceUnavailable`, `firmQuoteLimited`,
                `fundingAccountNetworkUnavailable`, `fundingAccountUnavailable`,
                `insufficientDepth`, `missingPermission`, `needsNativeGas`,
                `needsWallet`, `notPriced`, `payInTermsUnavailable`,
                `pilotTradeCapExceeded`, `platformFeeRateUnavailable`,
                `pricingBookPairUnserved`, `settlementDeclarationUnavailable`,
                `settlementNotAvailable`, `timedOut`, `timedOutBeforeSend`,
                `tradingSourceNetworkUnavailable`, `tradingSourceNotLinked`,
                `venueEnablementRechecking`, `venueEnablementUnavailable`,
                `venueListingTimedOut`, `venuePoliciesUnavailable`.


                New values may be added; treat unknown values as other.
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - restricted
              type: string
              x-extensible-enum: true
            venue:
              $ref: '#/components/schemas/QuoteVenue'
          required:
            - asked
            - detail
            - reason
            - status
            - venue
          type: object
        - properties:
            asked:
              type: boolean
            detail:
              type:
                - string
                - 'null'
            fix:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteSourceFix'
                  description: >-
                    The server-owned recovery step; absent on an unblocked or
                    older source.
            network:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/Caip2Chain'
                  description: >-
                    The one network this outcome belongs to: a single-chain
                    route of a venue that holds one

                    account per network, so it sits on that network's line
                    beside the venue's account there.

                    Absent for a route that spans several networks or names
                    none.
            reason:
              description: >-
                Known source reason tokens (not all apply to every status):
                `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`, `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`,
                `relayChainNotCarried`, `apiKeyAdvancedWalletUnsupported`,
                `apiKeyOrganisationWalletScopeRequired`, `grantCapExceeded`,
                `amountAboveMaximum`, `amountBelowMinimum`, `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`, `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`,
                `receiveWalletNotServed`, `referenceMidUnreadable`,
                `referencePriceUnavailable`, `registryUnavailable`,
                `releaseRecheckUnavailable`, `requestUnbuildable`,
                `routeLegChainUnknown`, `routeLegUnnamed`, `routeLegUnplanned`,
                `routeUnavailable`, `secondFactorUnreadable`,
                `shortfallUnmeasured`, `shortfallUnreadable`,
                `singleChainVenue`, `siteChainUnreadable`, `sizeNotEligible`,
                `submitOrderBlocked`, `takerOnboardingIncomplete`,
                `tierNotQuoted`, `tradePaused`, `unsupportedNative`,
                `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`, `bebopJamWalletUnsupported`,
                `bebopQuorumWalletTooSlow`, `bebopWalletQuorumUnreadable`,
                `connectionNotConfigured`, `deliveryAccountNetworkUnavailable`,
                `deliveryAccountUnavailable`, `destinationCannotSendOnChain`,
                `dexReferencePriceUnavailable`, `firmQuoteLimited`,
                `fundingAccountNetworkUnavailable`, `fundingAccountUnavailable`,
                `insufficientDepth`, `missingPermission`, `needsNativeGas`,
                `needsWallet`, `notPriced`, `payInTermsUnavailable`,
                `pilotTradeCapExceeded`, `platformFeeRateUnavailable`,
                `pricingBookPairUnserved`, `settlementDeclarationUnavailable`,
                `settlementNotAvailable`, `timedOut`, `timedOutBeforeSend`,
                `tradingSourceNetworkUnavailable`, `tradingSourceNotLinked`,
                `venueEnablementRechecking`, `venueEnablementUnavailable`,
                `venueListingTimedOut`, `venuePoliciesUnavailable`.


                New values may be added; treat unknown values as other.
              type: string
            sizeLimits:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/VenueRfqSizeObservation'
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - unsupported
              type: string
              x-extensible-enum: true
            venue:
              $ref: '#/components/schemas/QuoteVenue'
          required:
            - asked
            - detail
            - reason
            - status
            - venue
          type: object
        - properties:
            asked:
              type: boolean
            detail:
              type:
                - string
                - 'null'
            fix:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteSourceFix'
                  description: >-
                    The server-owned recovery step; absent on an unblocked or
                    older source.
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - filteredOut
              type: string
              x-extensible-enum: true
            venue:
              $ref: '#/components/schemas/QuoteVenue'
          required:
            - asked
            - detail
            - status
            - venue
          type: object
        - properties:
            asked:
              type: boolean
            detail:
              type:
                - string
                - 'null'
            fix:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteSourceFix'
                  description: >-
                    The server-owned recovery step; absent on an unblocked or
                    older source.
            network:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/Caip2Chain'
                  description: >-
                    The paying network a venue account's wallet-default refusal
                    names

                    (`ONCHAIN_ACCOUNT_DEFAULT_WALLET_REQUIRED` /
                    `_UNAVAILABLE`), so a client

                    never parses it out of `detail`. Absent when the refusal
                    names no single network.
            product:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/BridgeTransferMode'
                  description: >-
                    The independently priced product, when this venue offers
                    several.
            reason:
              description: >-
                Known source reason tokens (not all apply to every status):
                `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`, `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`,
                `relayChainNotCarried`, `apiKeyAdvancedWalletUnsupported`,
                `apiKeyOrganisationWalletScopeRequired`, `grantCapExceeded`,
                `amountAboveMaximum`, `amountBelowMinimum`, `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`, `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`,
                `receiveWalletNotServed`, `referenceMidUnreadable`,
                `referencePriceUnavailable`, `registryUnavailable`,
                `releaseRecheckUnavailable`, `requestUnbuildable`,
                `routeLegChainUnknown`, `routeLegUnnamed`, `routeLegUnplanned`,
                `routeUnavailable`, `secondFactorUnreadable`,
                `shortfallUnmeasured`, `shortfallUnreadable`,
                `singleChainVenue`, `siteChainUnreadable`, `sizeNotEligible`,
                `submitOrderBlocked`, `takerOnboardingIncomplete`,
                `tierNotQuoted`, `tradePaused`, `unsupportedNative`,
                `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`, `bebopJamWalletUnsupported`,
                `bebopQuorumWalletTooSlow`, `bebopWalletQuorumUnreadable`,
                `connectionNotConfigured`, `deliveryAccountNetworkUnavailable`,
                `deliveryAccountUnavailable`, `destinationCannotSendOnChain`,
                `dexReferencePriceUnavailable`, `firmQuoteLimited`,
                `fundingAccountNetworkUnavailable`, `fundingAccountUnavailable`,
                `insufficientDepth`, `missingPermission`, `needsNativeGas`,
                `needsWallet`, `notPriced`, `payInTermsUnavailable`,
                `pilotTradeCapExceeded`, `platformFeeRateUnavailable`,
                `pricingBookPairUnserved`, `settlementDeclarationUnavailable`,
                `settlementNotAvailable`, `timedOut`, `timedOutBeforeSend`,
                `tradingSourceNetworkUnavailable`, `tradingSourceNotLinked`,
                `venueEnablementRechecking`, `venueEnablementUnavailable`,
                `venueListingTimedOut`, `venuePoliciesUnavailable`.


                New values may be added; treat unknown values as other.
              type: string
            sizeLimits:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/VenueRfqSizeObservation'
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - unavailable
              type: string
              x-extensible-enum: true
            venue:
              $ref: '#/components/schemas/QuoteVenue'
          required:
            - asked
            - detail
            - reason
            - status
            - venue
          type: object
      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
    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:
        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.
            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 Binding slot 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
    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
    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
    LocationKind:
      description: |-
        Where a leg executes and first settles.

        New values may be added; treat unknown values as other.
      enum:
        - singleChain
        - crossChain
        - offChain
      type: string
      x-extensible-enum: true
    VenueModality:
      description: |-
        A venue's modality, from its declaration. The one owner of this
        concept: quote request and response types reuse it.

        New values may be added; treat unknown values as other.
      enum:
        - amm
        - solver
        - bridge
        - rfq
        - orderBook
        - fiat
      type: string
      x-extensible-enum: true
    QuoteRequestVariants:
      additionalProperties: false
      description: Which variants the sold and bought Assets accept.
      properties:
        buy:
          $ref: '#/components/schemas/VariantPreference'
        sell:
          $ref: '#/components/schemas/VariantPreference'
      type: object
    VenueFilter:
      additionalProperties: false
      description: Venue ids to keep or drop; each must be a known venue (`UNKNOWN_VENUE`).
      properties:
        exclude:
          items:
            type: string
          type: array
        include:
          items:
            type: string
          type: array
      type: object
    CardFirmness:
      description: >-
        How firm a card's price is, read with `expiresAt`: `firm: true` delivers
        exactly

        `buy.amount` until `expiresAt`; `firm: false` with `expiresAt` executes
        held to `minOut`;

        `firm: false` with `expiresAt` null is indicative (it lapses at
        `staleAfter`, and is

        orderable only through its `next: order`, executed within the caller's
        minimum receive).
      properties:
        firm:
          description: Whether the venue is bound to this price until `expiresAt`.
          type: boolean
        lastLook:
          description: >-
            Always false: no venue re-checks an accepted price before it fills,
            so an order inside

            `expiresAt` on a firm card trades at it or is refused unsent.
          type: boolean
      required:
        - firm
        - lastLook
      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.
        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`.
        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.
        deliverTo:
          $ref: '#/components/schemas/ResolvedDeliverTo'
        fundingAccount:
          $ref: '#/components/schemas/FundingAccount'
        fundingModel:
          $ref: '#/components/schemas/FundingModel'
        payIn:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/PayInTerms'
        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
    RfqMechanismAdvisory:
      description: >-
        A mechanism's limitation remains visible when another mechanism serves
        it.
      properties:
        code:
          type: string
        lpName:
          type: string
        mechanism:
          type: string
      required:
        - code
        - mechanism
        - lpName
      type: object
    QuoteAssurance:
      description: Collateral backing a quote, separate from its firmness.
      properties:
        amount:
          $ref: '#/components/schemas/DecimalAmount'
        asset:
          $ref: '#/components/schemas/AssetId'
        bonded:
          type: boolean
      required:
        - amount
        - asset
        - bonded
      type: object
    QuoteBasis:
      description: |-
        Where the price came from.

        New values may be added; treat unknown values as other.
      enum:
        - liveQuote
        - levels
        - model
      type: string
      x-extensible-enum: true
    QuoteSide:
      description: >-
        One side of a quote: the Asset, where it is held, which variant and how
        much.
      properties:
        amount:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DecimalAmount'
              description: >-
                `null` on a stub quote that carries no price
                (`sources[].priceOnRequest`).
        asset:
          $ref: '#/components/schemas/AssetId'
        chain:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/Caip2Chain'
              description: '`null` for a side held on a venue account (off-chain).'
        variant:
          $ref: '#/components/schemas/AssetVariant'
          description: |-
            Every side carries a variant; a fiat side is `{kind: native, name:
            <ISO 4217 code>}`.
      required:
        - amount
        - asset
        - chain
        - variant
      type: object
    QuoteFailureHandling:
      description: >-
        What happens to the input when execution fails, a fact the quote
        reports.


        New values may be added; treat unknown values as other.
      enum:
        - refundOnSource
        - refundClaim
        - needsNewSignature
      type: string
      x-extensible-enum: true
    QuoteFee:
      description: One fee line. The same type serves `GET /prices` rows.
      properties:
        amount:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DecimalAmount'
              description: >-
                `null` when the amount could not be read (a failed gas read),
                never `0`;

                such a quote's `netReceived` and `readiness` are `unavailable`.
        asset:
          $ref: '#/components/schemas/AssetId'
        bound:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/QuoteFeeBound'
              description: >-
                The amount is an authorised ceiling, not an expected or charged
                fee.
        chain:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/Caip2Chain'
              description: >-
                The chain a `network` line's gas is spent on; `null` for a line
                that is

                not bound to one chain.
        included:
          description: >-
            Already taken: from `buy.amount` when in the receive Asset, else
            from `pay`.
          type: boolean
        kind:
          $ref: '#/components/schemas/FeeLineKind'
        leg:
          description: >-
            The index of the leg it belongs to, or `null` for a quote-level
            line.
          format: int32
          minimum: 0
          type:
            - integer
            - 'null'
        paidBy:
          $ref: '#/components/schemas/FeePayer'
      required:
        - amount
        - asset
        - chain
        - included
        - kind
        - leg
        - paidBy
      type: object
    FirmAsk:
      description: >-
        When a venue gives its binding price (`PairQuote.firmAsk`), as its venue
        spec declares.


        New values may be added; treat unknown values as other.
      enum:
        - onRequest
        - atExecution
      type: string
      x-extensible-enum: true
    FirmQuoteDailyWarning:
      description: Read-only workspace/day warning. It never admits or spends a firm ask.
      properties:
        code:
          description: >-
            VENUE_FIRM_QUOTE_DAILY_NEAR_CAP from 80%;
            VENUE_FIRM_QUOTE_DAILY_CAP_REACHED at or above the UTC-day cap.
          example: VENUE_FIRM_QUOTE_DAILY_NEAR_CAP
          type: string
        limit:
          format: int32
          minimum: 0
          type: integer
        resetsAt:
          format: date-time
          type: string
        used:
          format: int32
          minimum: 0
          type: integer
      required:
        - code
        - used
        - limit
        - resetsAt
      type: object
    QuoteLeg:
      description: 'One leg of a quote: the venue it runs on and where it executes.'
      properties:
        execution:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueExecution'
              description: >-
                A venue account's recorded execution facts; null on protocol
                legs.
        expectedArrival:
          description: 'Bank-rail legs: an ISO 8601 UTC instant; `null` elsewhere.'
          format: date-time
          type:
            - string
            - 'null'
        fundingModel:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/FundingModel'
              description: Off-chain legs; `null` on-chain.
        location:
          $ref: '#/components/schemas/LegLocation'
        network:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/ProtocolEnvironment'
              description: >-
                Protocol chain environment from the registry; additive so older
                clients can ignore it.
        product:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/ProviderProduct'
              description: >-
                The protocol product this leg runs (`cctp`, `acrossBridge`, …),
                from the served route;

                absent on a venue-account leg or when the route does not name
                it. Never parsed out of

                `venue.name`, which is display text.
        relayMode:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/BridgeRelayMode'
              description: >-
                Who delivers a CCTP leg on the destination, and so whom its
                included network fee pays:

                Circle's Forwarding Service, or the TetraFi relayer on a
                clone-native leg (rfq 615dd36a2).

                Absent on every other leg, and on a bridge quote that does not
                record it.
        transferMode:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/BridgeTransferMode'
              description: >-
                A bridge leg's transfer mode (`fast` or `standard`, e.g. CCTP
                Fast vs Standard); absent

                on every other leg.
        venue:
          $ref: '#/components/schemas/QuoteVenue'
      required:
        - execution
        - expectedArrival
        - fundingModel
        - location
        - venue
      type: object
    QuoteLocation:
      description: >-
        A quote's own location, an object so `.location.kind` reads the same on
        quotes, legs

        and rows: its legs' kind, or `mixed` when they differ.


        New values may be added; treat unknown values as other.
      discriminator:
        propertyName: kind
      oneOf:
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - singleChain
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - crossChain
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - offChain
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - mixed
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
      x-extensible-enum: true
    RfqMechanism:
      description: The mechanism that actually produced the quote, never a separate venue.
      properties:
        dealerQuotes:
          format: int32
          minimum: 0
          type:
            - integer
            - 'null'
        kind:
          $ref: '#/components/schemas/RfqMechanismKind'
        label:
          type: string
        tag:
          type: string
      required:
        - tag
        - kind
        - label
      type: object
    NetReceived:
      description: |-
        The comparison value: known, or unavailable with its reason, never 0.

        New values may be added; treat unknown values as other.
      discriminator:
        propertyName: kind
      oneOf:
        - properties:
            amount:
              $ref: '#/components/schemas/DecimalAmount'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - known
              type: string
              x-extensible-enum: true
          required:
            - amount
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - unavailable
              type: string
              x-extensible-enum: true
            reason:
              description: >-
                Known source reason tokens (not all apply to every status):
                `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`, `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`,
                `relayChainNotCarried`, `apiKeyAdvancedWalletUnsupported`,
                `apiKeyOrganisationWalletScopeRequired`, `grantCapExceeded`,
                `amountAboveMaximum`, `amountBelowMinimum`, `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`, `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`,
                `receiveWalletNotServed`, `referenceMidUnreadable`,
                `referencePriceUnavailable`, `registryUnavailable`,
                `releaseRecheckUnavailable`, `requestUnbuildable`,
                `routeLegChainUnknown`, `routeLegUnnamed`, `routeLegUnplanned`,
                `routeUnavailable`, `secondFactorUnreadable`,
                `shortfallUnmeasured`, `shortfallUnreadable`,
                `singleChainVenue`, `siteChainUnreadable`, `sizeNotEligible`,
                `submitOrderBlocked`, `takerOnboardingIncomplete`,
                `tierNotQuoted`, `tradePaused`, `unsupportedNative`,
                `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`, `bebopJamWalletUnsupported`,
                `bebopQuorumWalletTooSlow`, `bebopWalletQuorumUnreadable`,
                `connectionNotConfigured`, `deliveryAccountNetworkUnavailable`,
                `deliveryAccountUnavailable`, `destinationCannotSendOnChain`,
                `dexReferencePriceUnavailable`, `firmQuoteLimited`,
                `fundingAccountNetworkUnavailable`, `fundingAccountUnavailable`,
                `insufficientDepth`, `missingPermission`, `needsNativeGas`,
                `needsWallet`, `notPriced`, `payInTermsUnavailable`,
                `pilotTradeCapExceeded`, `platformFeeRateUnavailable`,
                `pricingBookPairUnserved`, `settlementDeclarationUnavailable`,
                `settlementNotAvailable`, `timedOut`, `timedOutBeforeSend`,
                `tradingSourceNetworkUnavailable`, `tradingSourceNotLinked`,
                `venueEnablementRechecking`, `venueEnablementUnavailable`,
                `venueListingTimedOut`, `venuePoliciesUnavailable`.


                New values may be added; treat unknown values as other.
              type: string
          required:
            - reason
            - kind
          type: object
      x-extensible-enum: true
    Readiness:
      description: |-
        Whether the quote can be ordered now. Unknown is `unavailable`,
        never a value.

        New values may be added; treat unknown values as other.
      discriminator:
        propertyName: kind
      oneOf:
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - ready
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - description: The venue account holds enough.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - funded
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - properties:
            amount:
              $ref: '#/components/schemas/DecimalAmount'
            how:
              $ref: '#/components/schemas/FundingMethod'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - shortfall
              type: string
              x-extensible-enum: true
          required:
            - amount
            - how
            - kind
          type: object
        - properties:
            family:
              $ref: '#/components/schemas/ChainFamily'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - needsWallet
              type: string
              x-extensible-enum: true
          required:
            - family
            - kind
          type: object
        - description: >-
            The taker sends a transaction itself and needs `amount` of `asset`,
            the chain's

            native gas Asset in the registry.
          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:
                - needsNativeGas
              type: string
              x-extensible-enum: true
          required:
            - chain
            - amount
            - asset
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - unavailable
              type: string
              x-extensible-enum: true
            reason:
              description: >-
                Known source reason tokens (not all apply to every status):
                `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`, `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`,
                `relayChainNotCarried`, `apiKeyAdvancedWalletUnsupported`,
                `apiKeyOrganisationWalletScopeRequired`, `grantCapExceeded`,
                `amountAboveMaximum`, `amountBelowMinimum`, `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`, `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`,
                `receiveWalletNotServed`, `referenceMidUnreadable`,
                `referencePriceUnavailable`, `registryUnavailable`,
                `releaseRecheckUnavailable`, `requestUnbuildable`,
                `routeLegChainUnknown`, `routeLegUnnamed`, `routeLegUnplanned`,
                `routeUnavailable`, `secondFactorUnreadable`,
                `shortfallUnmeasured`, `shortfallUnreadable`,
                `singleChainVenue`, `siteChainUnreadable`, `sizeNotEligible`,
                `submitOrderBlocked`, `takerOnboardingIncomplete`,
                `tierNotQuoted`, `tradePaused`, `unsupportedNative`,
                `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`, `bebopJamWalletUnsupported`,
                `bebopQuorumWalletTooSlow`, `bebopWalletQuorumUnreadable`,
                `connectionNotConfigured`, `deliveryAccountNetworkUnavailable`,
                `deliveryAccountUnavailable`, `destinationCannotSendOnChain`,
                `dexReferencePriceUnavailable`, `firmQuoteLimited`,
                `fundingAccountNetworkUnavailable`, `fundingAccountUnavailable`,
                `insufficientDepth`, `missingPermission`, `needsNativeGas`,
                `needsWallet`, `notPriced`, `payInTermsUnavailable`,
                `pilotTradeCapExceeded`, `platformFeeRateUnavailable`,
                `pricingBookPairUnserved`, `settlementDeclarationUnavailable`,
                `settlementNotAvailable`, `timedOut`, `timedOutBeforeSend`,
                `tradingSourceNetworkUnavailable`, `tradingSourceNotLinked`,
                `venueEnablementRechecking`, `venueEnablementUnavailable`,
                `venueListingTimedOut`, `venuePoliciesUnavailable`.


                New values may be added; treat unknown values as other.
              type: string
          required:
            - reason
            - kind
          type: object
      x-extensible-enum: true
    QuoteScreening:
      description: |-
        Whether every bound wallet a quote uses was screened. A quote
        that involves no wallet carries `null`.

        New values may be added; treat unknown values as other.
      enum:
        - screened
        - unscreened
      type: string
      x-extensible-enum: true
    VenueRfqSizeObservation:
      description: The native size read used for this request, not current trade authority.
      properties:
        fixedAmount:
          $ref: '#/components/schemas/FixedAmount'
          description: The request amount these limits bound, named by its request key.
        read:
          $ref: '#/components/schemas/VenueRfqSizeRead'
      required:
        - fixedAmount
        - read
      type: object
    QuoteTradingSourceRefusal:
      description: >-
        Why a priced card has no executable source, with the native in-page
        recovery action.
      properties:
        code:
          type: string
        detail:
          description: >-
            Human-readable recovery, including key re-issuance or a wallet
            grant.
          type:
            - string
            - 'null'
        fix:
          $ref: '#/components/schemas/QuoteSourceFix'
        venueId:
          type: string
      required:
        - code
        - venueId
        - fix
      type: object
    SpreadFromMid:
      description: |-
        The spread from the Reference mid in basis points.

        New values may be added; treat unknown values as other.
      discriminator:
        propertyName: kind
      oneOf:
        - properties:
            bps:
              format: int64
              type: integer
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - known
              type: string
              x-extensible-enum: true
          required:
            - bps
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - unavailable
              type: string
              x-extensible-enum: true
            reason:
              description: >-
                Known source reason tokens (not all apply to every status):
                `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`, `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`,
                `relayChainNotCarried`, `apiKeyAdvancedWalletUnsupported`,
                `apiKeyOrganisationWalletScopeRequired`, `grantCapExceeded`,
                `amountAboveMaximum`, `amountBelowMinimum`, `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`, `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`,
                `receiveWalletNotServed`, `referenceMidUnreadable`,
                `referencePriceUnavailable`, `registryUnavailable`,
                `releaseRecheckUnavailable`, `requestUnbuildable`,
                `routeLegChainUnknown`, `routeLegUnnamed`, `routeLegUnplanned`,
                `routeUnavailable`, `secondFactorUnreadable`,
                `shortfallUnmeasured`, `shortfallUnreadable`,
                `singleChainVenue`, `siteChainUnreadable`, `sizeNotEligible`,
                `submitOrderBlocked`, `takerOnboardingIncomplete`,
                `tierNotQuoted`, `tradePaused`, `unsupportedNative`,
                `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`, `bebopJamWalletUnsupported`,
                `bebopQuorumWalletTooSlow`, `bebopWalletQuorumUnreadable`,
                `connectionNotConfigured`, `deliveryAccountNetworkUnavailable`,
                `deliveryAccountUnavailable`, `destinationCannotSendOnChain`,
                `dexReferencePriceUnavailable`, `firmQuoteLimited`,
                `fundingAccountNetworkUnavailable`, `fundingAccountUnavailable`,
                `insufficientDepth`, `missingPermission`, `needsNativeGas`,
                `needsWallet`, `notPriced`, `payInTermsUnavailable`,
                `pilotTradeCapExceeded`, `platformFeeRateUnavailable`,
                `pricingBookPairUnserved`, `settlementDeclarationUnavailable`,
                `settlementNotAvailable`, `timedOut`, `timedOutBeforeSend`,
                `tradingSourceNetworkUnavailable`, `tradingSourceNotLinked`,
                `venueEnablementRechecking`, `venueEnablementUnavailable`,
                `venueListingTimedOut`, `venuePoliciesUnavailable`.


                New values may be added; treat unknown values as other.
              type: string
          required:
            - reason
            - kind
          type: object
      x-extensible-enum: true
    UnspentPay:
      description: >-
        The part of a `sellAmount` a card does not spend, in the sell asset, and
        why in words.
      properties:
        amount:
          $ref: '#/components/schemas/DecimalAmount'
        detail:
          description: >-
            One sentence naming the venue, what the order spends and where the
            rest stays.
          type: string
        rule:
          description: >-
            The venue's rule that leaves the rest, in a few words for the card
            ("Binance trades USDC in

            steps of 1"). Absent when the venue's step was not read; `detail`
            then says "fills whole lots".
          type:
            - string
            - 'null'
      required:
        - amount
        - detail
      type: object
    QuoteWalletSelection:
      description: One chain's selected wallet and the venue account whose selection it is.
      properties:
        connectionId:
          type: string
        displacedPreference:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/BindingTargetView'
              description: >-
                A known eligible preference that this account did not link.
                Display only.
        reason:
          $ref: '#/components/schemas/QuoteWalletSelectionReason'
        venueId:
          type: string
        venueName:
          type: string
        walletId:
          type: string
      required:
        - walletId
        - reason
        - connectionId
        - venueId
        - venueName
      type: object
    SourceCandidate:
      properties:
        address:
          description: >-
            A wallet's own address, so a page names exactly which wallet pays
            (the old

            binding candidate carried it); absent for accounts and unread
            addresses.
          type:
            - string
            - 'null'
        balance:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/CandidateBalance'
              description: '`null` is an unobserved balance, never a zero balance.'
        displayName:
          type: string
        financialAccountId:
          type: string
        isDefault:
          type: boolean
        kind:
          $ref: '#/components/schemas/FundingAccountKind'
        network:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/Caip2Chain'
        refusal:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/SourceCandidateRefusal'
              description: >-
                Why a requote naming this wallet would be refused, by the
                venue's own wallet gate for

                this card's amount (a Basic on-chain wallet's signing grant and
                its per-trade cap). Absent

                when the gate admits it, and for the card's paying wallet, whose
                price already passed it.
      required:
        - financialAccountId
        - kind
        - displayName
        - isDefault
      type: object
    ChainFamily:
      description: |-
        The family of wallets and addresses a chain uses.

        New values may be added; treat unknown values as other.
      enum:
        - evm
        - solana
        - tron
      type: string
      x-extensible-enum: true
    QuoteVenue:
      description: >-
        The venue block. A protocol version is part of the venue's identity.
        `id` is

        the registry's venue id, the same one `/prices` rows and `sources[]`
        carry.
      properties:
        id:
          type: string
        integrationMode:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/IntegrationMode'
              description: >-
                The integration mode this venue was reached through:

                Basic (`basic`) or Advanced (`advanced`), the committed

                `IntegrationMode` wire values. Absent where no mode applies (a
                price row). Staged: read

                first, then written, so a venue reached in both modes keeps two
                outcomes.
        logoUrl:
          description: >-
            The venue's logo: always sent; the logo the venue's LP uploaded

            to its workspace (`/api/v1/brand/logos/<sha256>.webp`), else `null`,
            when the UI

            shows its preset or generated mark. Never synthesised from the venue
            id or name.
          type:
            - string
            - 'null'
        modality:
          $ref: '#/components/schemas/VenueModality'
        name:
          type: string
        protocolVersion:
          type:
            - string
            - 'null'
        venueId:
          description: >-
            The catalogue Venue, distinct from this route's registry/execution
            id.

            Absent for routes no Venue declares (DEX pools and registered
            solvers).
          type:
            - string
            - 'null'
        venueName:
          description: >-
            The catalogue Venue's display name, present exactly when `venue_id`
            is present.
          type:
            - string
            - 'null'
      required:
        - id
        - logoUrl
        - modality
        - name
        - protocolVersion
      type: object
    QuoteSourceFix:
      description: >-
        The server-owned next step for a blocked source. It describes recovery,
        never grants authority.

        Unknown causes carry `none`; unknown amounts, approvers and existing
        requests are never invented.


        New values may be added; treat unknown values as other.
      discriminator:
        propertyName: kind
      oneOf:
        - description: >-
            Ask for the permission or wallet right `target`. For a member
            session it is offered only

            when the permission-request owner would open (or already holds) a
            request on it; a target

            it refuses by name (`blocked`, `not_applicable`, ...) reads `none`.
            When that read fails,

            the step is offered unchanged.
          properties:
            action:
              type:
                - string
                - 'null'
            existingRequest:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteFixExistingRequest'
                  description: >-
                    The calling member's own pending request for this same
                    target (the target key

                    the create route deduplicates on, so a request made from
                    another venue's card

                    counts), read once per auction: the member already asked, so
                    a client shows that

                    instead of offering a second request. Absent when there is
                    none, when the read

                    failed or timed out (never a guessed value), and always for
                    API keys and

                    automation principals: only a member session's quotes carry
                    it.
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - requestPermission
              type: string
              x-extensible-enum: true
            target:
              $ref: '#/components/schemas/PermissionRequestTarget'
          required:
            - target
            - kind
          type: object
        - description: >-
            Fund `target`. `amount` is the measured shortfall; it is absent when
            the shortfall is

            unknown (a venue that declined for insufficient balance does not say
            by how much), and the

            step is offered all the same.
          properties:
            amount:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/DecimalAmount'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - topUp
              type: string
              x-extensible-enum: true
            target:
              $ref: '#/components/schemas/QuoteFixFundingTarget'
          required:
            - target
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - switchWallet
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - description: >-
            Link a personal wallet that pays on `chain`: an Advanced card trades
            only from the member's

            own wallet, and none is linked there.
          properties:
            chain:
              $ref: '#/components/schemas/Caip2Chain'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - linkWallet
              type: string
              x-extensible-enum: true
          required:
            - chain
            - kind
          type: object
        - properties:
            amount:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/DecimalAmount'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - changeAmount
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - enableVenue
              type: string
              x-extensible-enum: true
            target:
              $ref: '#/components/schemas/QuoteFixVenueTarget'
            who:
              $ref: '#/components/schemas/WorkspacePermission'
          required:
            - target
            - who
            - kind
          type: object
        - description: >-
            Take `step` on the workspace's existing account at `target`: the
            venue is not asked until

            a member with `who` takes it there.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - manageVenueAccount
              type: string
              x-extensible-enum: true
            step:
              $ref: '#/components/schemas/VenueAccountStep'
            target:
              $ref: '#/components/schemas/QuoteFixVenueTarget'
            who:
              $ref: '#/components/schemas/WorkspacePermission'
          required:
            - target
            - step
            - who
            - kind
          type: object
        - description: >-
            Within the account's credit limit but short of available credit: an
            order of at most

            `maxAmount` `asset` (the debit asset; exact, rounded down) passes
            the same check.
          properties:
            asset:
              type: string
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - reduceAmount
              type: string
              x-extensible-enum: true
            maxAmount:
              $ref: '#/components/schemas/DecimalAmount'
          required:
            - maxAmount
            - asset
            - kind
          type: object
        - description: >-
            Already over the account's credit limit: no smaller amount passes,
            only a trade that

            reduces what the account owes. Review the venue account's positions.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - reviewPositions
              type: string
              x-extensible-enum: true
            venueAccountId:
              format: uuid
              type: string
          required:
            - venueAccountId
            - kind
          type: object
        - description: >-
            A credit trade settles in the venue account's settlement window, and
            that account's

            schedule cannot produce one yet (a term the LP has not confirmed).
            Review the account's

            settlement schedule and its pending request, where the LP's answer
            is recorded.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - reviewSettlementSchedule
              type: string
              x-extensible-enum: true
            venueAccountId:
              format: uuid
              type: string
          required:
            - venueAccountId
            - kind
          type: object
        - description: >-
            The account's credit figures could not be read (or are too old) to
            decide this trade:

            ask the quote again to read them afresh. `lastGoodReadAt` is the
            last good read, if any.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - refreshCredit
              type: string
              x-extensible-enum: true
            lastGoodReadAt:
              format: date-time
              type:
                - string
                - 'null'
          required:
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - finishOnboarding
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - waitUntil
              type: string
              x-extensible-enum: true
            until:
              format: date-time
              type: string
          required:
            - until
            - kind
          type: object
        - description: >-
            Set up wallet infrastructure (Integrations › Wallet infrastructure):
            the workspace's

            wallet infrastructure, which hosts governed organisation wallets as
            well as embedded

            ones, is not set up or is turned off, so no trading grant can be
            prepared until it is.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - setUpEmbeddedWallets
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - none
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
      x-extensible-enum: true
    BridgeTransferMode:
      description: |-
        Bridge speed/finality mode. Fast modes typically cost a higher
        protocol fee and settle in seconds; standard modes wait for hard
        finality. Forwarding fees apply independently to both.

        New values may be added; treat unknown values as other.
      enum:
        - fast
        - standard
      type: string
      x-extensible-enum: true
    WalletLinkRecovery:
      description: >-
        Recovery for an explicitly chosen organisation wallet not linked to a
        Basic account.
      properties:
        defaultWallets:
          additionalProperties:
            type: string
          description: >-
            Per CAIP-2 chain, the account's default wallets (target ids): a
            per-request switch the

            caller sends as its pay-from preference, never a persistent
            preference write.
          propertyNames:
            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
          type:
            - object
            - 'null'
        linkHref:
          type: string
        wallet:
          $ref: '#/components/schemas/BindingTargetView'
      required:
        - wallet
        - linkHref
      type: object
    RestrictedReason:
      description: |-
        Why a gate kept a venue from a principal.

        New values may be added; treat unknown values as other.
      enum:
        - mfaRequired
        - venueTradeScopeRequired
        - credential
        - clientSessionRequired
        - takerOnboardingIncomplete
        - tradingPermissionRequired
        - mfaEnrolmentRequired
        - venueRelationship
      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
        - forms_then_review
        - admin_action
        - other_party
        - unknown
        - not_unlockable
      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:
        - finish_onboarding
        - company_details
        - kyb_profile
        - kyc_dialog
        - link_wallet
        - ask_admin
        - contact_broker
        - manage_direct_users
        - manage_api_key
        - connect_custodian
        - switch_account_scope
        - contact_support
        - await_screening
        - none
      type: string
      x-extensible-enum: true
    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
    VariantPreference:
      description: New values may be added; treat unknown values as other.
      enum:
        - any
        - nativeOnly
      type: string
      x-extensible-enum: true
    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'
        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:
          type: string
        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:
          description: >-
            `reserved` while unsent; `released` once it expired, was adopted or
            was superseded.
          type: string
      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.
      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'
          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'
        payBy:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/PayBy'
              description: >-
                `null` means the venue declares no deadline, not an inferred
                duration.
        settlementGrace:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/SettlementGrace'
      type: object
    QuotedSettlement:
      allOf:
        - $ref: '#/components/schemas/SettlementTerms'
        - properties:
            window:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/SettlementWindowTerms'
          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.
      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
    AssetVariant:
      description: >-
        A deployment's variant label: its kind and the name people see
        (`USDC.e`, `USDT0`,

        `mUSDC`).
      properties:
        kind:
          $ref: '#/components/schemas/VariantKind'
        name:
          type: string
      required:
        - kind
        - name
      type: object
    QuoteFeeBound:
      description: New values may be added; treat unknown values as other.
      enum:
        - maximum
      type: string
      x-extensible-enum: true
    FeeLineKind:
      description: New values may be added; treat unknown values as other.
      enum:
        - provider
        - platform
        - integrator
        - bank
        - network
      type: string
      x-extensible-enum: true
    FeePayer:
      description: >-
        Who bears a fee line. Sponsored relayer gas on a delegated lane is a
        `network` line

        paid by the `platform`.


        New values may be added; treat unknown values as other.
      enum:
        - taker
        - platform
        - takerStatement
      type: string
      x-extensible-enum: true
    VenueExecution:
      description: >-
        A venue account's recorded execution facts, never protocol network
        metadata.
      properties:
        site:
          $ref: '#/components/schemas/VenueSiteLabel'
        siteChain:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/Caip2Chain'
              description: >-
                The one network the card's venue account trades on, when the
                venue holds one account

                per network: each network's account answers with its own card,
                titled by this chain.

                Absent for an off-chain account and for a bridge, whose account
                spans its networks.
        stage:
          $ref: '#/components/schemas/VenueExecutionStage'
        status:
          $ref: '#/components/schemas/VenueExecutionStatus'
      required:
        - stage
        - site
        - status
      type: object
    LegLocation:
      description: |-
        Where a leg executes and first settles. Each kind carries only its own
        fields; any other combination fails to parse.

        New values may be added; treat unknown values as other.
      discriminator:
        propertyName: kind
      oneOf:
        - properties:
            chain:
              $ref: '#/components/schemas/Caip2Chain'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - singleChain
              type: string
              x-extensible-enum: true
          required:
            - chain
            - kind
          type: object
        - properties:
            from:
              $ref: '#/components/schemas/Caip2Chain'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - crossChain
              type: string
              x-extensible-enum: true
            to:
              $ref: '#/components/schemas/Caip2Chain'
          required:
            - from
            - to
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - offChain
              type: string
              x-extensible-enum: true
            tradingSource:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/TradingSource'
                  description: >-
                    Absent only on a priced card whose named sourceRefusal
                    disables ordering.
          required:
            - kind
          type: object
      x-extensible-enum: true
    ProtocolEnvironment:
      description: |-
        The environment of the registry chain(s) a protocol leg executes on.

        New values may be added; treat unknown values as other.
      oneOf:
        - properties:
            network:
              description: New values may be added; treat unknown values as other.
              enum:
                - testnet
              type: string
              x-extensible-enum: true
          required:
            - network
          type: object
        - properties:
            network:
              description: New values may be added; treat unknown values as other.
              enum:
                - mainnet
              type: string
              x-extensible-enum: true
          required:
            - network
          type: object
        - properties:
            network:
              description: New values may be added; treat unknown values as other.
              enum:
                - unavailable
              type: string
              x-extensible-enum: true
            reason:
              type: string
          required:
            - reason
            - network
          type: object
      x-extensible-enum: true
    ProviderProduct:
      description: Executable product surface behind a provider capability.
      oneOf:
        - description: New values may be added; treat unknown values as other.
          enum:
            - stableRfq
          type: string
          x-extensible-enum: true
        - description: New values may be added; treat unknown values as other.
          enum:
            - internalTreasury
          type: string
          x-extensible-enum: true
        - description: New values may be added; treat unknown values as other.
          enum:
            - circleCpnPayout
          type: string
          x-extensible-enum: true
        - description: New values may be added; treat unknown values as other.
          enum:
            - circleMintDeposit
          type: string
          x-extensible-enum: true
        - description: New values may be added; treat unknown values as other.
          enum:
            - circleMintWithdrawal
          type: string
          x-extensible-enum: true
        - description: New values may be added; treat unknown values as other.
          enum:
            - circleMintExchange
          type: string
          x-extensible-enum: true
        - description: |-
            Registered on-chain primary-market mint/redeem capability.

            New values may be added; treat unknown values as other.
          enum:
            - issuerPrimaryMarket
          type: string
          x-extensible-enum: true
        - description: |-
            Circle CCTP burn-and-mint bridge corridor (route legs).

            New values may be added; treat unknown values as other.
          enum:
            - cctpBridge
          type: string
          x-extensible-enum: true
        - description: |-
            Across V4 liquidity relay bridge corridor (route legs).

            New values may be added; treat unknown values as other.
          enum:
            - acrossBridge
          type: string
          x-extensible-enum: true
        - description: |-
            Relay (relay.link) intents bridge corridor (route legs).

            New values may be added; treat unknown values as other.
          enum:
            - relayBridge
          type: string
          x-extensible-enum: true
        - description: |-
            Circle StableFX on-chain FX venue on Arc (`FxEscrow` settlement).

            New values may be added; treat unknown values as other.
          enum:
            - arcStableFx
          type: string
          x-extensible-enum: true
        - description: |-
            Direct same-chain swap through the registry-pinned DEX capability.

            New values may be added; treat unknown values as other.
          enum:
            - dexSwap
          type: string
          x-extensible-enum: true
        - description: >-
            Same-chain, firm-quoted RFQ swap settled through an approved kind-1
            SwapModule. The quote is

            firm for the venue's own TTL and the executable calldata is fetched
            at execution, never at

            quote time. Octarine is the first backing venue; the product is
            venue-neutral.


            New values may be added; treat unknown values as other.
          enum:
            - rfqSwap
          type: string
          x-extensible-enum: true
        - description: |-
            Cross-chain intent filled by a solver under OIF escrow settlement.

            New values may be added; treat unknown values as other.
          enum:
            - oifIntent
          type: string
          x-extensible-enum: true
        - description: >-
            A provider fiat ramp: bank money in or out at a fiat venue.


            `venue_id` names the instrument's venue: an order-book venue whose
            fiat pairs are

            instruments of that venue (VALR's, Luno's), or a dedicated fiat
            venue (Lumx's). The

            direction says which way bank money moves. Wire form (externally
            tagged):

            `{"fiatVenue":{"venueId":"valr-orderbook","direction":"payout"}}`.
          properties:
            fiatVenue:
              description: >-
                A provider fiat ramp: bank money in or out at a fiat venue.


                `venue_id` names the instrument's venue: an order-book venue
                whose fiat pairs are

                instruments of that venue (VALR's, Luno's), or a dedicated fiat
                venue (Lumx's). The

                direction says which way bank money moves. Wire form (externally
                tagged):

                `{"fiatVenue":{"venueId":"valr-orderbook","direction":"payout"}}`.
              properties:
                direction:
                  $ref: '#/components/schemas/FiatDirection'
                venueId:
                  type: string
              required:
                - venueId
                - direction
              type: object
          required:
            - fiatVenue
          type: object
        - description: >-
            The venue route's first leg: the taker's funds leave their wallet
            and are credited to the route's balance at the venue. Final once
            forwarded.


            New values may be added; treat unknown values as other.
          enum:
            - cexDeposit
          type: string
          x-extensible-enum: true
        - description: >-
            The CEX lane's trade: a kind-10 `ACTION` hop on the hub router
            reserves a

            `TradeIntent` against the route's venue balance; the enclave fills
            or cancels it.


            New values may be added; treat unknown values as other.
          enum:
            - cexTrade
          type: string
          x-extensible-enum: true
        - description: >-
            The CEX lane's last leg: the route-relative payout leaf (kind-10
            `ROUTE_PAYOUT`),

            pre-signed by the route root, withdraws the route's balance to its
            recipient.


            New values may be added; treat unknown values as other.
          enum:
            - cexPayout
          type: string
          x-extensible-enum: true
        - description: >-
            Taker-signed WETH9 deposit of native payout proceeds, on the payout
            chain.


            New values may be added; treat unknown values as other.
          enum:
            - wrapNative
          type: string
          x-extensible-enum: true
        - description: >-
            A movement of the requesting workspace's own money at its LP account
            on a venue:

            a trade on the venue's book, a withdrawal from the account to a
            chain

            address, or a deposit into it. Wire form:

            `{"workspaceVenue":{"venueId":"valr-orderbook","movement":"trade"}}`.
          properties:
            workspaceVenue:
              description: >-
                A movement of the requesting workspace's own money at its LP
                account on a venue:

                a trade on the venue's book, a withdrawal from the account to a
                chain

                address, or a deposit into it. Wire form:

                `{"workspaceVenue":{"venueId":"valr-orderbook","movement":"trade"}}`.
              properties:
                movement:
                  $ref: '#/components/schemas/WorkspaceVenueMovement'
                venueId:
                  type: string
              required:
                - venueId
                - movement
              type: object
          required:
            - workspaceVenue
          type: object
    BridgeRelayMode:
      description: |-
        Who relays the destination-chain mint once the bridge attestation
        is available.

        New values may be added; treat unknown values as other.
      enum:
        - circleForwarding
        - selfRelay
      type: string
      x-extensible-enum: true
    RfqMechanismKind:
      description: New values may be added; treat unknown values as other.
      enum:
        - standard
        - large_orders
        - block_trades
      type: string
      x-extensible-enum: true
    FundingMethod:
      description: |-
        How a measured pay-asset shortfall is covered.

        New values may be added; treat unknown values as other.
      enum:
        - venueDeposit
        - bankDeposit
        - walletTopUp
      type: string
      x-extensible-enum: true
    FixedAmount:
      description: |-
        Which request amount a quote fixes: `sellAmount` or `buyAmount`.

        New values may be added; treat unknown values as other.
      enum:
        - sellAmount
        - buyAmount
      type: string
      x-extensible-enum: true
    VenueRfqSizeRead:
      description: New values may be added; treat unknown values as other.
      oneOf:
        - properties:
            bands:
              description: >-
                Exact mechanism union; outer bounds never fill a gap between
                bands.
              items:
                $ref: '#/components/schemas/VenueRfqMechanismSizeLimits'
              type: array
            maximum:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/VenueRfqSizeLimit'
            minimum:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/VenueRfqSizeLimit'
            observedAt:
              description: Conservative lower bound on when the provider limits were read.
              format: date-time
              type: string
            pairRefusal:
              type:
                - string
                - 'null'
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - observed
              type: string
              x-extensible-enum: true
          required:
            - observedAt
            - bands
            - status
          type: object
        - properties:
            code:
              type: string
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - unavailable
              type: string
              x-extensible-enum: true
          required:
            - code
            - status
          type: object
      x-extensible-enum: true
    BindingTargetView:
      description: |-
        The one target object of every read: slot reads, candidates and API-key
        `bindingDefaults`. `address` and `label` are `null` where none;
        `chains` is `[]` for a bank destination.
      properties:
        address:
          type:
            - string
            - 'null'
        chains:
          items:
            type: string
          type: array
        destinationKind:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/BindingDestinationKind'
              description: Present on a `destination` target only.
        id:
          type: string
        kind:
          $ref: '#/components/schemas/BindingTargetKind'
        label:
          type:
            - string
            - 'null'
        ownership:
          $ref: '#/components/schemas/BindingTargetOwnership'
      required:
        - kind
        - id
        - ownership
        - address
        - chains
        - label
      type: object
    QuoteWalletSelectionReason:
      description: |-
        The origin of a bound Basic wallet, not a signing or permission grant.

        New values may be added; treat unknown values as other.
      enum:
        - accountDefault
        - preference
        - explicit
      type: string
      x-extensible-enum: true
    CandidateBalance:
      description: >-
        A candidate's balance of the pay Asset, tagged `kind`. A cold or

        failed read is `unavailable`, never 0. `variant` names the token the

        balance was read in (an Octarine route pays mUSDC, a variant of the
        requested USDC).


        New values may be added; treat unknown values as other.
      discriminator:
        propertyName: kind
      oneOf:
        - properties:
            amount:
              $ref: '#/components/schemas/DecimalAmount'
            asset:
              $ref: '#/components/schemas/AssetId'
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - known
              type: string
              x-extensible-enum: true
            variant:
              $ref: '#/components/schemas/AssetVariant'
              description: The pay deployment's variant whose token balance this is.
          required:
            - amount
            - asset
            - variant
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - unavailable
              type: string
              x-extensible-enum: true
            reason:
              description: A camelCase token naming why (`notWarmed`).
              type: string
          required:
            - reason
            - kind
          type: object
      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
    SourceCandidateRefusal:
      description: >-
        An offered candidate the card's own requote would refuse: `reason` is
        the source reason token

        its `409 REQUOTE_REFUSED` carries as `details.reason`; `detail` says it
        in member words.
      properties:
        detail:
          type: string
        reason:
          type: string
      required:
        - reason
        - detail
      type: object
    IntegrationMode:
      description: |-
        How a venue is integrated: `basic` or `advanced`.

        New values may be added; treat unknown values as other.
      enum:
        - basic
        - advanced
      type: string
      x-extensible-enum: true
    QuoteFixExistingRequest:
      description: >-
        A pending permission request the caller already made for a
        `requestPermission` target.
      properties:
        createdAt:
          format: date-time
          type: string
        id:
          format: uuid
          type: string
      required:
        - id
        - createdAt
      type: object
    PermissionRequestTarget:
      description: New values may be added; treat unknown values as other.
      oneOf:
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - walletRight
              type: string
              x-extensible-enum: true
            right:
              $ref: '#/components/schemas/PermissionRequestWalletRight'
            venueId:
              type:
                - string
                - 'null'
            walletId:
              format: uuid
              type: string
          required:
            - walletId
            - right
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - workspacePermission
              type: string
              x-extensible-enum: true
            permission:
              $ref: '#/components/schemas/WorkspacePermission'
            venueId:
              type:
                - string
                - 'null'
          required:
            - permission
            - kind
          type: object
      x-extensible-enum: true
    QuoteFixFundingTarget:
      description: >-
        A shortfall names either its paying wallet or its venue account's venue.
        A venue target

        names the venue account and the route that reads its deposit
        instructions when the source

        knows that account.
      oneOf:
        - properties:
            walletId:
              type: string
          required:
            - walletId
          type: object
        - properties:
            action:
              description: '`GET` route for the venue account''s deposit instructions.'
              type:
                - string
                - 'null'
            venueAccountId:
              format: uuid
              type:
                - string
                - 'null'
            venueId:
              type: string
          required:
            - venueId
          type: object
    QuoteFixVenueTarget:
      properties:
        venueId:
          type: string
      required:
        - venueId
      type: object
    WorkspacePermission:
      description: |-
        Granular workspace permissions.

        Resolved via `permissions_for(ws_type, role)` — the same role
        unlocks different capabilities depending on the workspace type.

        New values may be added; treat unknown values as other.
      enum:
        - request_quotes
        - place_order
        - view_orders
        - view_flow_analytics
        - view_settlements
        - manage_team
        - manage_access
        - manage_credentials
        - manage_webhooks
        - manage_security_policy
        - manage_treasury_policy
        - manage_workspace_profile
        - view_compliance
        - view_person_pii
        - modify_compliance
        - connect_reporting
        - view_credit
        - modify_credit
        - view_wallets
        - manage_wallets
        - request_treasury_transfers
        - approve_treasury_transfers
        - approve_venue_trades
        - manage_lp_scoping
        - manage_sub_workspaces
        - manage_affiliations
        - onboard_external_users
        - approve_client_kyc
        - manage_bilateral
        - view_bilateral_documents
        - manage_settlements
        - manage_solvers
        - view_solver_operations
        - protocol_admin
        - approve_onboarding
        - manage_promotions
        - manage_market_intelligence
        - view_umbrella_compliance
        - manage_umbrella_users
        - manage_cases
        - view_reports
        - file_reports
      type: string
      x-extensible-enum: true
    VenueAccountStep:
      description: |-
        The step a `manageVenueAccount` fix names on the venue account.

        New values may be added; treat unknown values as other.
      enum:
        - verify
        - resume
        - reenterKey
      type: string
      x-extensible-enum: true
    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.
      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.
    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.
        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
    VariantKind:
      description: >-
        How a token deployment represents its Asset: the Asset itself, or a 1:1

        representation of it. A token with different economics is its own Asset,
        never a

        variant.


        New values may be added; treat unknown values as other.
      enum:
        - native
        - bridged
        - wrapped
        - omnichain
        - test
      type: string
      x-extensible-enum: true
    VenueSiteLabel:
      description: >-
        Whether the connection's recorded site is the venue's sandbox/testnet or
        production.


        New values may be added; treat unknown values as other.
      enum:
        - sandbox
        - production
      type: string
      x-extensible-enum: true
    VenueExecutionStage:
      description: |-
        The execution stage of one venue, mode and provider site.

        New values may be added; treat unknown values as other.
      oneOf:
        - description: Normal execution with no TetraFi caps.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - live
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
        - description: >-
            Real execution, capped: per trade (USD notional) and per UTC day
            across all

            workspaces.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - pilot
              type: string
              x-extensible-enum: true
            maxPerDayUsd:
              format: int32
              minimum: 0
              type: integer
            maxPerTradeUsd:
              format: int32
              minimum: 0
              type: integer
          required:
            - maxPerTradeUsd
            - maxPerDayUsd
            - kind
          type: object
        - description: No execution; the price may still be shown.
          properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - disabled
              type: string
              x-extensible-enum: true
            reason:
              type: string
          required:
            - reason
            - kind
          type: object
      x-extensible-enum: true
    VenueExecutionStatus:
      description: |-
        Whether this principal can execute the card now, and why not.

        New values may be added; treat unknown values as other.
      oneOf:
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - executable
              type: string
              x-extensible-enum: true
            withinLimit:
              description: >-
                "Execute within my limit" applies: the venue's firm quote lives
                under

                about 5 s, so the person sets a minimum receive and the server
                executes only

                within it. `false`: the firm quote is confirmed before its
                expiry.
              type: boolean
          required:
            - withinLimit
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - notExecutable
              type: string
              x-extensible-enum: true
            policyRule:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuotePolicyRule'
                  description: >-
                    The rule or refusal that blocked the card when `reason` is a
                    policy

                    block, so the page can name and link it; absent otherwise
                    and when

                    the policy could not be read.
            reason:
              description: >-
                Known source reason tokens (not all apply to every status):
                `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`, `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`,
                `relayChainNotCarried`, `apiKeyAdvancedWalletUnsupported`,
                `apiKeyOrganisationWalletScopeRequired`, `grantCapExceeded`,
                `amountAboveMaximum`, `amountBelowMinimum`, `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`, `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`,
                `receiveWalletNotServed`, `referenceMidUnreadable`,
                `referencePriceUnavailable`, `registryUnavailable`,
                `releaseRecheckUnavailable`, `requestUnbuildable`,
                `routeLegChainUnknown`, `routeLegUnnamed`, `routeLegUnplanned`,
                `routeUnavailable`, `secondFactorUnreadable`,
                `shortfallUnmeasured`, `shortfallUnreadable`,
                `singleChainVenue`, `siteChainUnreadable`, `sizeNotEligible`,
                `submitOrderBlocked`, `takerOnboardingIncomplete`,
                `tierNotQuoted`, `tradePaused`, `unsupportedNative`,
                `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`, `bebopJamWalletUnsupported`,
                `bebopQuorumWalletTooSlow`, `bebopWalletQuorumUnreadable`,
                `connectionNotConfigured`, `deliveryAccountNetworkUnavailable`,
                `deliveryAccountUnavailable`, `destinationCannotSendOnChain`,
                `dexReferencePriceUnavailable`, `firmQuoteLimited`,
                `fundingAccountNetworkUnavailable`, `fundingAccountUnavailable`,
                `insufficientDepth`, `missingPermission`, `needsNativeGas`,
                `needsWallet`, `notPriced`, `payInTermsUnavailable`,
                `pilotTradeCapExceeded`, `platformFeeRateUnavailable`,
                `pricingBookPairUnserved`, `settlementDeclarationUnavailable`,
                `settlementNotAvailable`, `timedOut`, `timedOutBeforeSend`,
                `tradingSourceNetworkUnavailable`, `tradingSourceNotLinked`,
                `venueEnablementRechecking`, `venueEnablementUnavailable`,
                `venueListingTimedOut`, `venuePoliciesUnavailable`.


                New values may be added; treat unknown values as other.
              type: string
          required:
            - reason
            - kind
          type: object
      x-extensible-enum: true
    FiatDirection:
      description: |-
        Which way bank money moves at a venue.

        New values may be added; treat unknown values as other.
      enum:
        - pay_in
        - payout
      type: string
      x-extensible-enum: true
    WorkspaceVenueMovement:
      description: |-
        Which movement a workspace-venue route step makes at the LP account.

        New values may be added; treat unknown values as other.
      enum:
        - trade
        - withdrawal
        - deposit
      type: string
      x-extensible-enum: true
    VenueRfqMechanismSizeLimits:
      properties:
        maximum:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueRfqSizeLimit'
        minimum:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/VenueRfqSizeLimit'
        tag:
          type: string
      required:
        - tag
      type: object
    VenueRfqSizeLimit:
      properties:
        amount:
          type: string
        unit:
          $ref: '#/components/schemas/VenueRfqLimitUnit'
      required:
        - amount
        - unit
      type: object
    BindingDestinationKind:
      description: >-
        What a payee destination target is. Own financial accounts are not
        targets

        of this defaults store.


        New values may be added; treat unknown values as other.
      enum:
        - cryptoAddress
        - bankAccount
      type: string
      x-extensible-enum: true
    BindingTargetKind:
      description: >-
        Native wallet/default targets. Trading venue accounts and funding links
        use

        the financial-account source model, never this wallet preference
        namespace.


        New values may be added; treat unknown values as other.
      enum:
        - linkedWallet
        - workspaceWallet
        - organizationWallet
        - destination
      type: string
      x-extensible-enum: true
    BindingTargetOwnership:
      description: >-
        Native target ownership for selection guidance only, never
        authorization.

        A destination describes its address-book record, not ownership of
        external

        funds or signing authority. Unknown owner facts must stay
        distinguishable.


        New values may be added; treat unknown values as other.
      enum:
        - personal
        - workspace
        - unknown
      type: string
      x-extensible-enum: true
    PermissionRequestWalletRight:
      description: New values may be added; treat unknown values as other.
      enum:
        - trade
        - transfer
        - manageDestinations
      type: string
      x-extensible-enum: true
    LateFunds:
      description: New values may be added; treat unknown values as other.
      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.
      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
    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:
          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.
      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
    QuotePolicyRule:
      description: |-
        The rule (or named refusal) that blocked a card. Rules carry no stored
        name; readers label one by `id` from the workspace's policy read.
      properties:
        catchAll:
          type: boolean
        id:
          description: A saved rule's id, a platform-default row's id, or the refusal code.
          type: string
        position:
          description: The rule's position in its policy; absent for a refusal.
          format: int32
          type:
            - integer
            - 'null'
        source:
          $ref: '#/components/schemas/QuotePolicyRuleSource'
      required:
        - id
        - source
        - catchAll
      type: object
    VenueRfqLimitUnit:
      description: New values may be added; treat unknown values as other.
      oneOf:
        - properties:
            asset:
              type: string
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - asset
              type: string
              x-extensible-enum: true
          required:
            - asset
            - kind
          type: object
        - properties:
            kind:
              description: New values may be added; treat unknown values as other.
              enum:
                - usd
              type: string
              x-extensible-enum: true
          required:
            - kind
          type: object
      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
    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
    QuotePolicyRuleSource:
      description: |-
        Where the blocking answer came from.

        New values may be added; treat unknown values as other.
      enum:
        - saved
        - platform_default
        - refusal
      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 (`POST
        /api/v1/workspaces/{workspaceId}/users/me/api-keys/{keyId}/signing`,
        which returns the signing secret once) must also sign every request:


        - `X-Timestamp`: the current Unix time in seconds, within 300 seconds of
        the server clock.

        - `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 four lines joined by `\n`, with no trailing
        newline: the `X-Timestamp` 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 write's signature (POST, PUT, PATCH, DELETE) is accepted once: sending
        the same signed write again is refused, so a retry signs again. A read
        (GET, HEAD) changes nothing, so an identical signed read inside the
        window is admitted again and polling needs no nonce.


        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` or `SIGNATURE_REPLAYED`.
      in: header
      name: X-API-Key
      type: apiKey
      x-request-signing:
        algorithm: HMAC-SHA256
        canonicalRequest:
          - timestamp
          - method
          - pathWithQuery
          - bodySha256Hex
        canonicalSeparator: |+

        oneTimeMethods:
          - POST
          - PUT
          - PATCH
          - DELETE
        refusal:
          error: AUTH_REQUIRED
          reasons:
            - SIGNATURE_REQUIRED
            - SIGNATURE_INVALID
            - TIMESTAMP_OUT_OF_RANGE
            - SIGNATURE_REPLAYED
          status: 401
        secretEncoding: hex
        signatureEncoding: hex-lower
        signatureHeader: X-Signature
        timestampHeader: X-Timestamp
        timestampWindowSeconds: 300
    bearer_auth:
      bearerFormat: JWT
      scheme: bearer
      type: http

````

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