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

# `GET /api/v1/prices/stream`: `snapshot` events per pair on change.



## OpenAPI

````yaml /api-reference/openapi.json get /api/v1/prices/stream
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/prices/stream:
    get:
      tags:
        - trading
      summary: '`GET /api/v1/prices/stream`: `snapshot` events per pair on change.'
      operationId: get_prices_stream
      parameters:
        - $ref: '#/components/parameters/WorkspaceId'
        - description: 1 to 25 comma-separated SELL:BUY Asset pairs (USDC:USDT,USDC:ZAR)
          in: query
          name: pairs
          required: true
          schema:
            type: string
        - description: As GET /prices, applied to every pair
          in: query
          name: sellAmount
          required: false
          schema:
            type: string
        - description: As GET /prices, applied to every pair
          in: query
          name: buyAmount
          required: false
          schema:
            type: string
        - description: >-
            1 to 8 comma-separated positive sell amounts, applied to every pair;
            pairs × sizes at most 125
          in: query
          name: sizes
          required: false
          schema:
            type: string
        - description: CAIP-2 pin for the sell side
          in: query
          name: sell.chain
          required: false
          schema:
            type: string
        - description: CAIP-2 pin for the buy side
          in: query
          name: buy.chain
          required: false
          schema:
            type: string
        - description: Comma-separated venue ids to keep
          in: query
          name: venues.include
          required: false
          schema:
            type: string
        - description: Comma-separated venue ids to drop
          in: query
          name: venues.exclude
          required: false
          schema:
            type: string
        - description: any | nativeOnly
          in: query
          name: variants.sell
          required: false
          schema:
            type: string
        - description: any | nativeOnly
          in: query
          name: variants.buy
          required: false
          schema:
            type: string
        - description: Comma-separated singleChain, crossChain, offChain
          in: query
          name: locations
          required: false
          schema:
            type: string
        - description: Comma-separated amm, solver, bridge, rfq, orderBook, fiat
          in: query
          name: modalities
          required: false
          schema:
            type: string
      responses:
        '200':
          content:
            text/event-stream:
              schema:
                $ref: '#/components/schemas/PricesResponse'
          description: >-
            text/event-stream: a `snapshot` event (a GET /prices body for one
            pair) when that pair's rows change, a keep-alive comment every 15 s;
            the stream ends after 10 minutes
          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
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: More than 25 pairs, or a query GET /prices refuses
          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: Missing or invalid credentials
          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: As GET /prices
          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
        '408':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: The request timed out before a response was ready.
          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: >-
            PRICES_RATE_LIMIT, or PRICES_STREAM_LIMIT above 4 subscriptions per
            principal
          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
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
          description: Something went wrong on our side.
          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: As GET /prices
          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
      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:
    PricesResponse:
      description: '`GET /prices` 200, and each `snapshot` event of `GET /prices/stream`.'
      properties:
        buy:
          $ref: '#/components/schemas/AssetId'
        computedAt:
          description: >-
            When the server built this snapshot (it reuses one for about a
            second).
          format: date-time
          type: string
        referenceMid:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/ReferenceMid'
              description: >-
                The pair's indicative reference mid, from the same source as
                POST /quotes. null only when the read failed, with the cause in
                referenceMidUnavailable; never zero, stale or guessed. Never a
                quote input.
        referenceMidUnavailable:
          description: >-
            Why `referenceMid` is `null`: `marketDataUnavailable` (a market-data
            refusal or outage),

            `notPriced` (no reference price exists for an asset) or `timedOut`
            (past the read's budget).
          type:
            - string
            - 'null'
        rows:
          description: >-
            Sorted like quotes: `netReceived` at the first size descending, an
            unavailable value

            last, then by venue id (there is no `best`).
          items:
            $ref: '#/components/schemas/PriceRow'
          type: array
        sell:
          $ref: '#/components/schemas/AssetId'
        sellBalances:
          description: >-
            The sell Asset in the caller's own Default-binding wallets, one
            memory-only read

            per deployment (only the pinned chain when `sell.chain` is set).
            Display only, never a

            quote input. Empty for an API key, before the first warm, or with no
            bound wallet:

            unknown, never zero. A client totals the `fresh` entries and names
            every other entry

            as not read, never a silent partial total.
          items:
            $ref: '#/components/schemas/PayBalance'
          type: array
      required:
        - sell
        - buy
        - computedAt
        - rows
        - sellBalances
        - referenceMid
      type: object
    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
    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
    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
    PriceRow:
      allOf:
        - $ref: '#/components/schemas/PriceRowStatus'
        - $ref: '#/components/schemas/CardFirmness'
          description: >-
            Written as `firm` and `lastLook`, both always false: a price binds
            no venue. Uses the

            card's one firmness writer, so a row and a card never disagree on
            the shape.
        - properties:
            basis:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/QuoteBasis'
                  description: '`levels` or `model`; `null` when the row holds no price.'
            blockNumber:
              format: int64
              minimum: 0
              type:
                - integer
                - 'null'
            buyVariant:
              $ref: '#/components/schemas/AssetVariant'
            ladderSemantics:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/LadderSemantics'
                  description: '`incremental` whenever `levels` is present.'
            levels:
              description: >-
                The venue's own levels, normalized to incremental, in sell
                units.
              items:
                $ref: '#/components/schemas/PricesLadderLevel'
              type:
                - array
                - 'null'
            location:
              oneOf:
                - type: 'null'
                - $ref: '#/components/schemas/LegLocation'
                  description: >-
                    Where the price executes; `null` on a row with no cached
                    corridor (a venue that

                    holds nothing for the pair).
            observedAt:
              format: date-time
              type:
                - string
                - 'null'
            sellVariant:
              $ref: '#/components/schemas/AssetVariant'
            sizes:
              description: >-
                One entry per requested size, in request order; empty when the
                row holds no price.
              items:
                $ref: '#/components/schemas/PriceSize'
              type: array
            spreadFromMidBps:
              $ref: '#/components/schemas/SpreadFromMid'
              description: >-
                At the first size, against the Reference mid; `unavailable` when
                the mid cannot be

                read, never 0.
            staleAfter:
              format: date-time
              type:
                - string
                - 'null'
            venue:
              $ref: '#/components/schemas/QuoteVenue'
          required:
            - venue
            - location
            - sellVariant
            - buyVariant
            - basis
            - observedAt
            - staleAfter
            - blockNumber
            - sizes
            - levels
            - ladderSemantics
            - spreadFromMidBps
          type: object
      description: One venue's price for one location and variant pair.
    PayBalance:
      description: >-
        One chain's read of the sell Asset in the caller's Default-binding
        wallet.


        New values may be added; treat unknown values as other.
      oneOf:
        - properties:
            amount:
              $ref: '#/components/schemas/DecimalAmount'
            chain:
              description: CAIP-2 chain of the deployment read.
              type: string
            observedAt:
              format: date-time
              type: string
            state:
              description: New values may be added; treat unknown values as other.
              enum:
                - fresh
              type: string
              x-extensible-enum: true
          required:
            - chain
            - amount
            - observedAt
            - state
          type: object
        - description: >-
            No measured amount is usable: `cold` (the first read is in flight),
            `expired`,

            `failed`, `noRpc`, `noFetcher` or `unsupportedNative`.
          properties:
            chain:
              type: string
            reason:
              type: string
            state:
              description: New values may be added; treat unknown values as other.
              enum:
                - unavailable
              type: string
              x-extensible-enum: true
          required:
            - chain
            - reason
            - state
          type: object
      x-extensible-enum: true
    ApiErrorDetails:
      additionalProperties:
        description: >-
          Any further detail the code carries (for example `stepUpSubject`,
          `balanceShortfall`,

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

        carry further fields, named in camelCase, which a client may ignore.
      properties:
        capabilityBlockers:
          description: >-
            `CAPABILITY_BLOCKED` and the other capability refusals: what blocks
            the workspace.
          items:
            $ref: '#/components/schemas/CapabilityBlocker'
          type:
            - array
            - 'null'
        conflicts:
          description: '`REQUOTE_FIELDS_CONFLICT`: the fields that cannot go with `requote`.'
          items:
            type: string
          type:
            - array
            - 'null'
        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
    PriceRowStatus:
      description: >-
        A row's outcome:


        | status | meaning |

        |---|---|

        | `priced` | a fresh cached price |

        | `stale` | past `staleAfter`, or a private source still warming; any
        price kept |

        | `unsupported` | `pairNotServed`: the venue holds nothing for the pair;
        `priceSourceNone`: it publishes no price (asked only on `POST /quotes`);
        `buyAmountUnsupported` |

        | `belowMin` | the first size is under the source's minimum |

        | `insufficientDepth` | the source cannot fill the first size |

        | `needsWallet` | the venue prices only for a wallet |

        | `restricted` | a gate keeps the desk price from this principal |

        | `unavailable` | a read failed, or a fee could not be computed;
        `notYetPublished`: the venue publishes this pair and nothing is cached
        for it yet |


        New values may be added; treat unknown values as other.
      oneOf:
        - properties:
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - priced
              type: string
              x-extensible-enum: true
          required:
            - status
          type: object
        - properties:
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - stale
              type: string
              x-extensible-enum: true
          required:
            - status
          type: object
        - properties:
            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:
                - unsupported
              type: string
              x-extensible-enum: true
          required:
            - reason
            - status
          type: object
        - properties:
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - belowMin
              type: string
              x-extensible-enum: true
          required:
            - status
          type: object
        - properties:
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - insufficientDepth
              type: string
              x-extensible-enum: true
          required:
            - status
          type: object
        - properties:
            status:
              description: New values may be added; treat unknown values as other.
              enum:
                - needsWallet
              type: string
              x-extensible-enum: true
          required:
            - status
          type: object
        - properties:
            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
          required:
            - reason
            - status
          type: object
        - properties:
            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:
                - unavailable
              type: string
              x-extensible-enum: true
          required:
            - reason
            - status
          type: object
      x-extensible-enum: true
    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
    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
    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
    LadderSemantics:
      description: New values may be added; treat unknown values as other.
      enum:
        - incremental
      type: string
      x-extensible-enum: true
    PricesLadderLevel:
      description: >-
        One incremental level: `size` more sell units, each buying `price` buy
        units.
      properties:
        price:
          $ref: '#/components/schemas/DecimalAmount'
        size:
          $ref: '#/components/schemas/DecimalAmount'
      required:
        - size
        - price
      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
    PriceSize:
      description: >-
        One requested size, with a quote's meanings: `buy` is what lands after
        every

        `included` fee taken in the buy Asset, `netReceived` is for comparison
        only.
      properties:
        buy:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DecimalAmount'
              description: >-
                The buy amount: the request's on a `buyAmount` read; on a
                `sellAmount` read, what the sell

                amount buys, `null` when nothing could be priced at this size,
                never `0`.
        feeObservedAt:
          description: >-
            When the included account commission was observed; display only, not
            quote consent.
          format: date-time
          type:
            - string
            - 'null'
        fees:
          items:
            $ref: '#/components/schemas/QuoteFee'
          type: array
        filled:
          $ref: '#/components/schemas/SizeFill'
        netReceived:
          $ref: '#/components/schemas/NetReceived'
        sell:
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/DecimalAmount'
              description: >-
                The sell amount: the request's on a `sellAmount` read, rounded
                down to the source's

                precision; on a `buyAmount` read, what the buy amount costs,
                `null` when nothing could be

                priced at this size, never `0`.
      required:
        - sell
        - buy
        - netReceived
        - filled
        - fees
      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
    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
    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
    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
    IsoDuration:
      description: An ISO 8601 duration, e.g. PT3S or PT2M.
      examples:
        - PT120S
      format: duration
      pattern: >-
        ^PT(?:[0-9]+H(?:[0-9]+M)?(?:[0-9]+(?:\.[0-9]{1,3})?S)?|[0-9]+M(?:[0-9]+(?:\.[0-9]{1,3})?S)?|[0-9]+(?:\.[0-9]{1,3})?S)$
      type: string
    TakerTransaction:
      description: One transaction the Taker sends itself (an approval included).
      properties:
        chain:
          $ref: '#/components/schemas/Caip2Chain'
        data:
          description: Hex calldata (`0x…`).
          type: string
        to:
          type: string
        value:
          description: Native value in base units, as a decimal string.
          type: string
      required:
        - chain
        - data
        - to
        - value
      type: object
    FundInstructions:
      description: >-
        What to fund and how. Bank funding carries only a privacy-safe summary
        and a

        non-bearer reference to the separately authorized reveal read.


        New values may be added; treat unknown values as other.
      discriminator:
        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
    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
    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
    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
    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
    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
    SizeFill:
      description: |-
        How much of a size the source fills.

        New values may be added; treat unknown values as other.
      enum:
        - full
        - partial
        - none
      type: string
      x-extensible-enum: true
    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
    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
    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
    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
    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
  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.