---
title: "List transactions with filters"
method: GET
path: "/transactions"
tags: ["Transaction"]
---

# List transactions with filters

`GET /transactions`

List transactions with filters.

Results are ordered newest-first (by createdAt desc, id desc). `limit`
defaults to 50 and is capped at 100.

Date filters `createdAfter` and `createdBefore` are **inclusive**
(treated as `>=` and `<=` against `createdAt`).

Pagination returns opaque `nextCursor` / `previousCursor` tokens in the
response whenever the page is non-empty: use `startingAfter=nextCursor`
to fetch the next page, or `endingBefore=previousCursor` to page
backward. `hasMore` tells the client whether more rows exist in the
current direction of travel; an empty response in the other direction
signals the start of the list.

## Query parameters

- `limit` integer
- `startingAfter` string
- `endingBefore` string
- `status` TransactionStatus[]
- `sourceToDestination` SourceToDestination[]
- `customerId` string
- `walletId` string
- `virtualAccountId` string
- `depositAddressId` string
- `cashInId` string
- `createdAfter` string, date-time
- `createdBefore` string, date-time
- `search` string
- `q` string
- `legStatus` string[]

## Response `200`

The request has succeeded.

- TransactionList — A paginated list of transactions.
  - `object` string — Resource type discriminator.
  - `hasMore` boolean — True when more rows exist beyond this page in the direction of travel (forward by default, backward when `endingBefore` was supplied).
  - `nextCursor` string — Opaque cursor pointing at the last item in this page. Present when `data` is non-empty. Pass as `startingAfter` to fetch the next page; `hasMore=false` signals no more pages forward.
  - `previousCursor` string — Opaque cursor pointing at the first item in this page. Present when `data` is non-empty. Pass as `endingBefore` to page backward; when this yields an empty response the client is at the start of the list.
  - `data` Transaction[] — The page of results.
    - `id` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
    - `object` 'transaction', required — Resource type discriminator. Always "transaction".
    - `sourceToDestination` 'cryptoToCrypto' | 'cryptoToCash' | 'cryptoToFiatAccount' | 'cashToCrypto' | 'fiatAccountToCrypto' | 'fiatAccountToFiatAccount' — Composite of source and destination instrument categories, inferred from each side. The cash corridors (`cryptoToCash`, `cashToCrypto`) are derived from a cash-pickup destination / cash-in source respectively; the rest map straight from the internal corridor type.
    - `status` 'processing' | 'awaitingAction' | 'completed' | 'failed', required — Lifecycle of a transaction. processing: funds in motion. awaitingAction: non-terminal, blocked on developer/upstream/compliance (see `hold`); returns to processing once cleared. completed: delivered. failed: terminal failure.
    - `subStatus` 'processing.fundsPulled' | 'processing.cashPickupReady' | 'processing.underReview' | 'completed.cashPickupCollected' | 'completed.cashPickupExpired' | 'awaitingAction.awaitingSenderAttribution' | 'awaitingAction.depositAddressFrozen' | 'awaitingAction.depositAddressInactive' | 'failed.attributionTimeout' | 'failed.depositAddressFrozenTimeout' | 'failed.depositAddressInactiveTimeout' | 'failed.depositAddressClosed' | 'processing.awaitingCryptoOut' | 'processing.cryptoOut' | 'processing.awaitingFiatOut' | 'processing.fiatOut' | 'processing.inboundPending' | 'processing.inboundProcessing' | 'failed.inboundFailed' | 'failed.returnPending' | 'failed.returnStarted' | 'failed.returnComplete' | 'failed.returnFailed' — Finer-grained, status-scoped sub-state of a transaction (v0.10). Each member is namespaced by its parent `status` (e.g. `processing.cashPickupReady`). Largely a closed set aligned to the v0.11 spec; the inbound-leg lifecycle values (`processing.inboundPending`, `processing.inboundProcessing`, `failed.inboundFailed`) are deliberate extensions mirroring the already-exposed outbound states, while the `failed.return*` family conforms to the spec. Absent when there is no meaningful sub-state. (2026-07-17, product-agreed vocabulary): `failed.returned` is RETIRED - its meaning is absorbed by `failed.returnComplete`, which now covers both the OPS-triggered crypto send-back lane and the vendor-side ACH/WIRE bounce + clawback lane (isReturnedProviderStatus) under one wire value. `failed.refundPending` is DELIBERATELY NOT added - product agreed to collapse the OMS-wallet-refund and crypto-return status families into one (this `failed.return*` set); a committed OMS spec snapshot still lists `failed.refundPending` separately, which is a documented divergence pending that spec's revision.
    - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
    - `precursor` union, required — What created this transaction, carrying that origin's deposit instructions. Additive over the legacy `depositAddressId`/`virtualAccountId`/`cashInId` + `depositInstructions` fields, which it loosely supersedes.
      - object — Created by a deposit address.
        - `type` 'depositAddress', required — Type discriminator.
        - `details` PrecursorDepositAddressDetails, required — depositAddress origin payload: the DA id + its on-chain inlet instructions.
          - `depositAddressId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `depositInstructions` DepositAddressDepositInstructions — The on-chain address senders deposit to, with its asset and network.
            - `asset` string, required — Same value as expectedSourceAsset.
            - `network` string, required — Same value as expectedSourceNetwork.
            - `address` string, required — OMS-owned on-chain inlet address for this deposit address.
            - `expiresAt` string, date-time — Placeholder for a future provider-imposed inlet expiry. Null today; surfaced now so adding it later is not a breaking change.
      - object — Created by a virtual account.
        - `type` 'virtualAccount', required — Type discriminator.
        - `details` PrecursorVirtualAccountDetails, required — virtualAccount origin payload: the VA id + its bank routing block(s).
          - `virtualAccountId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `depositInstructions` VirtualAccountInstructions — Spec-mandated (v0.10/v0.10) VA deposit-instructions wrapper. bankUs holds zero, one, or two routing blocks (domestic + SWIFT), depending on which incoming rails the partner has enabled.
            - `bankUs` BankRoutingBlock[]
              - …
      - object — Created by a cash-in.
        - `type` 'cashIn', required — Type discriminator.
        - `details` PrecursorCashInDetails, required — cashIn origin payload: the cash-in id + the retail deposit code + location.
          - `cashInId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `depositInstructions` CashInDepositInstructions — The deposit code and retail location a customer uses to complete a cash-in.
            - `code` string, required — Machine-readable code.
            - `expiresAt` string, date-time, required — Expiration time.
            - `locationName` string — Display name of the retail location.
            - `locationAddress` string — Street address of the retail location.
      - object — Created by accepting a quote.
        - `type` 'quote', required — Type discriminator.
        - `details` PrecursorQuoteDetails, required — quote origin payload: the quote id (no deposit instructions).
          - `quoteId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
      - object — Created outside the automated flows - origin not tracked (manual/ops-initiated). Carries no `details`: there is nothing origin-specific to report. Covers any transaction whose origin FKs (depositAddress/virtualAccount/cashIn/quote) are all unset, so `precursor` can be required without a legacy-row escape hatch.
        - `type` 'manual', required
    - `source` union, required — The source side of a transaction/quote (v0.10): a typed instrument carrying identity (`party`) and instrument detail. Amounts live only in `pricing`.
      - object — OMS-custodied crypto wallet instrument.
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'walletOms', required — Type discriminator.
        - `category` 'crypto', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
        - `details` WalletOmsDetails, required — WalletOms instrument details: an OMS-custodied crypto wallet.
          - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `asset` string — Canonical asset identifier.
          - `network` string — Network identifier.
          - `blockchainAddress` string — On-chain address.
          - `custodyType` 'custodial' | 'embedded' — How the wallet is held: `custodial` or `embedded`.
          - `txHash` string — On-chain transaction hash.
          - `blockchainAsset` BlockchainAsset
            - `protocol` 'evm' | 'svm' | 'sui', required
            - `chainId` string, required
            - `tokenId` string, required
      - object — Externally-custodied crypto wallet instrument.
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'walletExternal', required — Type discriminator.
        - `category` 'crypto', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
        - `details` WalletExternalDetails, required — WalletExternal instrument details: a crypto wallet held in external custody.
          - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `asset` string — Canonical asset identifier.
          - `network` string — Network identifier.
          - `blockchainAddress` string — On-chain address.
          - `custodian` string — Custodian holding the funds.
          - `otherCustodian` string — Free-text custodian name when `custodian` is `other`.
          - `txHash` string — On-chain transaction hash.
          - `blockchainAsset` BlockchainAsset
            - `protocol` 'evm' | 'svm' | 'sui', required
            - `chainId` string, required
            - `tokenId` string, required
      - object — Fiat balance wallet instrument - a USD balance held at a partner bank (a settlement bank). No network or on-chain address; an internal ledger.
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'walletFiat', required — Type discriminator.
        - `category` 'fiatAccount', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
        - `details` WalletFiatInstrumentDetails, required — WalletFiat instrument details: a fiat balance wallet held at a partner bank (e.g. USD at a settlement bank). No network or on-chain address - an internal ledger balance.
          - `id` string — OMS fiat wallet ID (`wlt_fiat_` prefix). Look up via `GET /wallets`. Plain string, not the `typeId` scalar: `wlt_fiat_` is a two-token prefix, which the single-underscore `typeId` pattern cannot validate. Matches the sibling `WalletFiatSideDetails.id` in quote.tsp.
          - `asset` 'usd' — Fiat currency of the balance. Only `usd` today.
          - `provider` string — Legal entity holding the balance (e.g. "the settlement bank"). Read-only.
      - object — US bank account instrument.
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'bankUs', required — Type discriminator.
        - `category` 'fiatAccount', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
        - `details` BankUsDetails, required — US bank account instrument details.
          - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `asset` 'usd' — Canonical asset identifier.
          - `network` 'ach' | 'achSameDay' | 'wire' | 'rtp' — Network identifier.
          - `secCode` 'ccd' | 'ppd' | 'web' — ACH SEC code. Populated only when the destination bank network is `ach`/`achSameDay`; null otherwise. Server-derived from the destination owner's and the source customer's `entityType`.
          - `accountNumberLast4` string — Last four digits of the account number.
          - `routingNumber` string — US ABA routing number.
          - `bankName` string — Bank display name.
          - `accountType` 'checking' | 'savings' — checking or savings.
          - `memo` string — Payment memo.
      - object — IBAN bank account instrument.
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'bankIban', required — Type discriminator.
        - `category` 'fiatAccount', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
        - `details` BankIbanDetails, required — IBAN bank account instrument details.
          - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `asset` string — Canonical asset identifier.
          - `network` 'swift' — Network identifier.
          - `ibanLast4` string — Last four characters of the IBAN.
          - `BIC` string — SWIFT BIC.
          - `bankAddress` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
          - `countryCode` string — ISO 3166-1 alpha-2 country code.
          - `memo` string — Payment memo.
      - object — Canadian bank account instrument.
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'bankCanada', required — Type discriminator.
        - `category` 'fiatAccount', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
        - `details` BankCanadaDetails, required — Canadian bank account instrument details.
          - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `asset` 'usd' | 'cad' — Canonical asset identifier.
          - `network` 'swift' | 'local' — Network identifier.
          - `institutionNumber` string — Canadian 3-digit institution number.
          - `transitNumber` string — Canadian 5-digit transit number.
          - `accountNumberLast4` string — Last four digits of the account number.
          - `bankName` string — Bank display name.
          - `memo` string — Payment memo.
      - object — Card instrument.
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'card', required — Type discriminator.
        - `category` 'fiatAccount', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
        - `details` CardDetails, required — Card instrument details.
          - `id` string — Unique identifier.
          - `asset` 'usd' — Canonical asset identifier.
          - `network` 'card' — Network identifier.
          - `cardNumberLast4` string — Last four digits of the card number.
          - `cardProvider` string — Card network/provider.
          - `memo` string — Payment memo.
      - object — Cash instrument.
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'cash', required — Type discriminator.
        - `category` 'cash', required — High-level grouping: always `cash` for cash pickups and drops.
        - `details` CashDetails, required — Cash pickup/drop instrument details.
          - `asset` string — Canonical asset identifier.
          - `cashLocationId` string — Cash location ID from `GET /cash-locations`.
          - `cashLocationReference` string — Provider reference for the location, from `GET /cash-locations`.
          - `code` string — Machine-readable code.
          - `expiresAt` string, date-time — Expiration time.
          - `locationName` string — Display name of the retail location.
          - `locationAddress` string — Street address of the retail location.
    - `destination` union, required — The destination side of a transaction/quote (v0.10): a typed instrument plus `payoutOrigin`. Amounts live only in `pricing`.
      - object
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'walletOms', required — Type discriminator.
        - `category` 'crypto', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
        - `details` WalletOmsDetails, required — WalletOms instrument details: an OMS-custodied crypto wallet.
          - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `asset` string — Canonical asset identifier.
          - `network` string — Network identifier.
          - `blockchainAddress` string — On-chain address.
          - `custodyType` 'custodial' | 'embedded' — How the wallet is held: `custodial` or `embedded`.
          - `txHash` string — On-chain transaction hash.
          - `blockchainAsset` BlockchainAsset
            - `protocol` 'evm' | 'svm' | 'sui', required
            - `chainId` string, required
            - `tokenId` string, required
        - `payoutOrigin` union — Where last-mile delivery is sent *from*. Tiered: Quote & Deposit Address echo the choice only; the Transaction carries full detail (`accountNumber`/`routingNumber`/`txHash`). At launch all payouts route through a single provider, so the field is forward-compatible but single-valued.
          - object — Payout originates from a bank account. the response wraps the fields in a `details` envelope (matches the `precursor` shape). `accountNumber`/`routingNumber` are full sending-account detail rendered on the Transaction only, null on Quote/Deposit Address (choice-only).
            - `type` 'bank', required — Type discriminator.
            - `details` PayoutOriginBankDetails, required — Bank payout-origin detail. `accountHolder`(+`Name`) is the chosen sender identity (echoed on Quote/DA too); `accountNumber`/`routingNumber` are the full sending-account coordinates (Transaction only, else null); `virtualAccountId` is the VA the funds were pulled from.
              - …
          - object — Payout originates from an on-chain address.
            - `type` 'blockchain', required — Type discriminator.
            - `blockchainAddress` string — On-chain address.
            - `network` string — Network identifier.
            - `txHash` string — On-chain transaction hash.
            - `custodian` string — Custodian holding the funds.
      - object
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'walletExternal', required — Type discriminator.
        - `category` 'crypto', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
        - `details` WalletExternalDetails, required — WalletExternal instrument details: a crypto wallet held in external custody.
          - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `asset` string — Canonical asset identifier.
          - `network` string — Network identifier.
          - `blockchainAddress` string — On-chain address.
          - `custodian` string — Custodian holding the funds.
          - `otherCustodian` string — Free-text custodian name when `custodian` is `other`.
          - `txHash` string — On-chain transaction hash.
          - `blockchainAsset` BlockchainAsset
            - `protocol` 'evm' | 'svm' | 'sui', required
            - `chainId` string, required
            - `tokenId` string, required
        - `payoutOrigin` union — Where last-mile delivery is sent *from*. Tiered: Quote & Deposit Address echo the choice only; the Transaction carries full detail (`accountNumber`/`routingNumber`/`txHash`). At launch all payouts route through a single provider, so the field is forward-compatible but single-valued.
          - object — Payout originates from a bank account. the response wraps the fields in a `details` envelope (matches the `precursor` shape). `accountNumber`/`routingNumber` are full sending-account detail rendered on the Transaction only, null on Quote/Deposit Address (choice-only).
            - `type` 'bank', required — Type discriminator.
            - `details` PayoutOriginBankDetails, required — Bank payout-origin detail. `accountHolder`(+`Name`) is the chosen sender identity (echoed on Quote/DA too); `accountNumber`/`routingNumber` are the full sending-account coordinates (Transaction only, else null); `virtualAccountId` is the VA the funds were pulled from.
              - …
          - object — Payout originates from an on-chain address.
            - `type` 'blockchain', required — Type discriminator.
            - `blockchainAddress` string — On-chain address.
            - `network` string — Network identifier.
            - `txHash` string — On-chain transaction hash.
            - `custodian` string — Custodian holding the funds.
      - object
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'bankUs', required — Type discriminator.
        - `category` 'fiatAccount', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
        - `details` BankUsDetails, required — US bank account instrument details.
          - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `asset` 'usd' — Canonical asset identifier.
          - `network` 'ach' | 'achSameDay' | 'wire' | 'rtp' — Network identifier.
          - `secCode` 'ccd' | 'ppd' | 'web' — ACH SEC code. Populated only when the destination bank network is `ach`/`achSameDay`; null otherwise. Server-derived from the destination owner's and the source customer's `entityType`.
          - `accountNumberLast4` string — Last four digits of the account number.
          - `routingNumber` string — US ABA routing number.
          - `bankName` string — Bank display name.
          - `accountType` 'checking' | 'savings' — checking or savings.
          - `memo` string — Payment memo.
        - `payoutOrigin` union — Where last-mile delivery is sent *from*. Tiered: Quote & Deposit Address echo the choice only; the Transaction carries full detail (`accountNumber`/`routingNumber`/`txHash`). At launch all payouts route through a single provider, so the field is forward-compatible but single-valued.
          - object — Payout originates from a bank account. the response wraps the fields in a `details` envelope (matches the `precursor` shape). `accountNumber`/`routingNumber` are full sending-account detail rendered on the Transaction only, null on Quote/Deposit Address (choice-only).
            - `type` 'bank', required — Type discriminator.
            - `details` PayoutOriginBankDetails, required — Bank payout-origin detail. `accountHolder`(+`Name`) is the chosen sender identity (echoed on Quote/DA too); `accountNumber`/`routingNumber` are the full sending-account coordinates (Transaction only, else null); `virtualAccountId` is the VA the funds were pulled from.
              - …
          - object — Payout originates from an on-chain address.
            - `type` 'blockchain', required — Type discriminator.
            - `blockchainAddress` string — On-chain address.
            - `network` string — Network identifier.
            - `txHash` string — On-chain transaction hash.
            - `custodian` string — Custodian holding the funds.
      - object
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'bankIban', required — Type discriminator.
        - `category` 'fiatAccount', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
        - `details` BankIbanDetails, required — IBAN bank account instrument details.
          - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `asset` string — Canonical asset identifier.
          - `network` 'swift' — Network identifier.
          - `ibanLast4` string — Last four characters of the IBAN.
          - `BIC` string — SWIFT BIC.
          - `bankAddress` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
          - `countryCode` string — ISO 3166-1 alpha-2 country code.
          - `memo` string — Payment memo.
        - `payoutOrigin` union — Where last-mile delivery is sent *from*. Tiered: Quote & Deposit Address echo the choice only; the Transaction carries full detail (`accountNumber`/`routingNumber`/`txHash`). At launch all payouts route through a single provider, so the field is forward-compatible but single-valued.
          - object — Payout originates from a bank account. the response wraps the fields in a `details` envelope (matches the `precursor` shape). `accountNumber`/`routingNumber` are full sending-account detail rendered on the Transaction only, null on Quote/Deposit Address (choice-only).
            - `type` 'bank', required — Type discriminator.
            - `details` PayoutOriginBankDetails, required — Bank payout-origin detail. `accountHolder`(+`Name`) is the chosen sender identity (echoed on Quote/DA too); `accountNumber`/`routingNumber` are the full sending-account coordinates (Transaction only, else null); `virtualAccountId` is the VA the funds were pulled from.
              - …
          - object — Payout originates from an on-chain address.
            - `type` 'blockchain', required — Type discriminator.
            - `blockchainAddress` string — On-chain address.
            - `network` string — Network identifier.
            - `txHash` string — On-chain transaction hash.
            - `custodian` string — Custodian holding the funds.
      - object
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'bankCanada', required — Type discriminator.
        - `category` 'fiatAccount', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
        - `details` BankCanadaDetails, required — Canadian bank account instrument details.
          - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `asset` 'usd' | 'cad' — Canonical asset identifier.
          - `network` 'swift' | 'local' — Network identifier.
          - `institutionNumber` string — Canadian 3-digit institution number.
          - `transitNumber` string — Canadian 5-digit transit number.
          - `accountNumberLast4` string — Last four digits of the account number.
          - `bankName` string — Bank display name.
          - `memo` string — Payment memo.
        - `payoutOrigin` union — Where last-mile delivery is sent *from*. Tiered: Quote & Deposit Address echo the choice only; the Transaction carries full detail (`accountNumber`/`routingNumber`/`txHash`). At launch all payouts route through a single provider, so the field is forward-compatible but single-valued.
          - object — Payout originates from a bank account. the response wraps the fields in a `details` envelope (matches the `precursor` shape). `accountNumber`/`routingNumber` are full sending-account detail rendered on the Transaction only, null on Quote/Deposit Address (choice-only).
            - `type` 'bank', required — Type discriminator.
            - `details` PayoutOriginBankDetails, required — Bank payout-origin detail. `accountHolder`(+`Name`) is the chosen sender identity (echoed on Quote/DA too); `accountNumber`/`routingNumber` are the full sending-account coordinates (Transaction only, else null); `virtualAccountId` is the VA the funds were pulled from.
              - …
          - object — Payout originates from an on-chain address.
            - `type` 'blockchain', required — Type discriminator.
            - `blockchainAddress` string — On-chain address.
            - `network` string — Network identifier.
            - `txHash` string — On-chain transaction hash.
            - `custodian` string — Custodian holding the funds.
      - object
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'card', required — Type discriminator.
        - `category` 'fiatAccount', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
        - `details` CardDetails, required — Card instrument details.
          - `id` string — Unique identifier.
          - `asset` 'usd' — Canonical asset identifier.
          - `network` 'card' — Network identifier.
          - `cardNumberLast4` string — Last four digits of the card number.
          - `cardProvider` string — Card network/provider.
          - `memo` string — Payment memo.
        - `payoutOrigin` union — Where last-mile delivery is sent *from*. Tiered: Quote & Deposit Address echo the choice only; the Transaction carries full detail (`accountNumber`/`routingNumber`/`txHash`). At launch all payouts route through a single provider, so the field is forward-compatible but single-valued.
          - object — Payout originates from a bank account. the response wraps the fields in a `details` envelope (matches the `precursor` shape). `accountNumber`/`routingNumber` are full sending-account detail rendered on the Transaction only, null on Quote/Deposit Address (choice-only).
            - `type` 'bank', required — Type discriminator.
            - `details` PayoutOriginBankDetails, required — Bank payout-origin detail. `accountHolder`(+`Name`) is the chosen sender identity (echoed on Quote/DA too); `accountNumber`/`routingNumber` are the full sending-account coordinates (Transaction only, else null); `virtualAccountId` is the VA the funds were pulled from.
              - …
          - object — Payout originates from an on-chain address.
            - `type` 'blockchain', required — Type discriminator.
            - `blockchainAddress` string — On-chain address.
            - `network` string — Network identifier.
            - `txHash` string — On-chain transaction hash.
            - `custodian` string — Custodian holding the funds.
      - object
        - `party` union
          - object — The owning OMS customer is on this side.
            - `relationship` 'customer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - object — A different OMS customer is on this side.
            - `relationship` 'otherCustomer', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
          - object — A registered counterparty (saved third party) is on this side.
            - `relationship` 'externalRegistered', required — Relationship discriminator.
            - `entityType` 'individual' | 'business'
            - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
          - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
            - `relationship` 'externalUnregistered', required — Relationship discriminator.
            - `name` string, nullable — Display name.
            - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
              - …
        - `type` 'cash', required — Type discriminator.
        - `category` 'cash', required — High-level grouping: always `cash` for cash pickups and drops.
        - `details` CashDetails, required — Cash pickup/drop instrument details.
          - `asset` string — Canonical asset identifier.
          - `cashLocationId` string — Cash location ID from `GET /cash-locations`.
          - `cashLocationReference` string — Provider reference for the location, from `GET /cash-locations`.
          - `code` string — Machine-readable code.
          - `expiresAt` string, date-time — Expiration time.
          - `locationName` string — Display name of the retail location.
          - `locationAddress` string — Street address of the retail location.
        - `payoutOrigin` union — Where last-mile delivery is sent *from*. Tiered: Quote & Deposit Address echo the choice only; the Transaction carries full detail (`accountNumber`/`routingNumber`/`txHash`). At launch all payouts route through a single provider, so the field is forward-compatible but single-valued.
          - object — Payout originates from a bank account. the response wraps the fields in a `details` envelope (matches the `precursor` shape). `accountNumber`/`routingNumber` are full sending-account detail rendered on the Transaction only, null on Quote/Deposit Address (choice-only).
            - `type` 'bank', required — Type discriminator.
            - `details` PayoutOriginBankDetails, required — Bank payout-origin detail. `accountHolder`(+`Name`) is the chosen sender identity (echoed on Quote/DA too); `accountNumber`/`routingNumber` are the full sending-account coordinates (Transaction only, else null); `virtualAccountId` is the VA the funds were pulled from.
              - …
          - object — Payout originates from an on-chain address.
            - `type` 'blockchain', required — Type discriminator.
            - `blockchainAddress` string — On-chain address.
            - `network` string — Network identifier.
            - `txHash` string — On-chain transaction hash.
            - `custodian` string — Custodian holding the funds.
    - `pricing` Pricing, required — Consolidated economics for a quote/transaction: per-side amounts + fees, the rate pair, and gas sponsorship, all in one place.
      - `source` PricingSide — Per-side economics for the `pricing` object: the side carries identity, the amounts and fees live here.
        - `asset` string — Currency these amounts are in. Same as the side's instrument asset, repeated here so pricing is self-contained.
        - `amountGross` string — Amount on this side before fees are applied.
        - `amountNet` string — Amount after fees: what is actually pulled from a source, or delivered to a destination.
        - `feesDeducted` FeesDeducted — Per-side breakdown of fees deducted in-line from the transaction. End-of-month billable fees will be reported separately in the future (planned `feesInvoice` sibling). Denominated in that side's asset.
          - `total` string, required
          - `developer` string, required — Per-side aggregated developer fee total in this side's asset. Always "0" in alpha - alpha invariant, mirrors the gas line.
          - `oms` string, required
          - `gas` string, required
      - `destination` PricingSide — Per-side economics for the `pricing` object: the side carries identity, the amounts and fees live here.
        - `asset` string — Currency these amounts are in. Same as the side's instrument asset, repeated here so pricing is self-contained.
        - `amountGross` string — Amount on this side before fees are applied.
        - `amountNet` string — Amount after fees: what is actually pulled from a source, or delivered to a destination.
        - `feesDeducted` FeesDeducted — Per-side breakdown of fees deducted in-line from the transaction. End-of-month billable fees will be reported separately in the future (planned `feesInvoice` sibling). Denominated in that side's asset.
          - `total` string, required
          - `developer` string, required — Per-side aggregated developer fee total in this side's asset. Always "0" in alpha - alpha invariant, mirrors the gas line.
          - `oms` string, required
          - `gas` string, required
      - `pair` string — Asset pair, e.g. "usdc/usd".
      - `exchangeRate` string — Mid-market rate between source and destination assets. Identity: source.amountNet × exchangeRate = destination.amountGross.
      - `effectiveRate` string — All-in rate including all fees. Identity: source.amountGross × effectiveRate = destination.amountNet.
      - `fixedAmountSide` 'source' | 'destination' — The side you set `amount` on when creating the quote. OMS calculated the other side.
      - `sponsorGas` boolean — When true, OMS absorbs the destination gas cost. Currently always true.
      - `sponsorGasCost` string — Gas absorbed by the developer when sponsorGas is true. Currently always `0.00`.
    - `estimatedArrival` string, date-time — Estimated completion time. Present when the destination rail has a predictable settlement time (e.g. bank payouts and some crypto legs); null otherwise.
    - `error` SettlementError — Details of an asynchronous settlement failure on a transaction (e.g. a downstream payout that failed after the initial request succeeded). Present only once a failure has occurred.
      - `code` string, required — Machine-readable code.
      - `message` string, required — Human-readable detail.
      - `occurredAt` string, date-time, required — When the error occurred.
      - `recoverable` boolean, required — Whether the failure can be recovered.
      - `manualRecovery` ManualRecovery — v0.11 manual-recovery detail (renamed from Recovery/operatorRecovery).
        - `type` 'manualRecovery'
        - `custodian` 'ANCHORAGE_SG' | 'ANCHORAGE_US' | 'AQUANOW_CA' | 'B2C2_UK' | 'B2C2_US' | 'BITGO_SG' | 'BITGO_US' | 'BITSTAMP_US' | 'BVNK_US' | 'CIRCLE_FR' | 'CIRCLE_US' | 'CITIBANK_US' | 'COINBASE_US' | 'COINSMART_CA' | 'COPPER_CH' | 'COPPER_UK' | 'CUMBERLAND_DRW_LLC_US' | 'CUMBERLAND_SG' | 'EREBOR_BANK_US' | 'FALCONX_US' | 'FIDELITY_UK' | 'FIDELITY_US' | 'FIREBLOCKS_APAC' | 'FIREBLOCKS_US' | 'GALAXY_KY' | 'GEMINI_US' | 'KRAKEN_BVI' | 'KRAKEN_EU_IE' | 'KRAKEN_UK' | 'KRAKEN_US' | 'NUBANK_BR' | 'PAXOS_US' | 'RAMP_NETWORK_US' | 'ROBINHOOD_US' | 'WINTERMUTE_GB' | 'SELF_HOSTED' | 'OTHER'
        - `instructions` string
        - `referenceFields` RecoveryReferenceFields — Reference identifiers for an operator-driven recovery.
          - `transactionId` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `sourceTxHash` string — Transaction hash of the originating inbound transfer.
    - `hold` union — Why an `awaitingAction` transaction is held, and the deadline to resolve. Discriminated by `type`; each arm carries the fields that apply.
      - object — DA received crypto from an address not linked to a counterparty.
        - `required` boolean — Whether the hold is still blocking; false once resolved.
        - `since` string, date-time — When the hold started.
        - `deadline` string, date-time — Deadline to resolve before timeout.
        - `resolvedAt` string, date-time — When the hold was resolved; null while outstanding.
        - `type` 'senderAttribution', required — Type discriminator.
        - `txHash` string — The transaction hash of the unattributed inbound deposit.
        - `matchableExternalAccountCriteria` MatchableExternalAccountCriteria — The wallet criteria a held inbound matches against to release: registering a walletExternal external account with this (customer, address, networkFamily) clears the sender-attribution hold.
          - `type` 'walletExternal' — Always `walletExternal` - the EA type that resolves the hold.
          - `customerId` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `blockchainAddress` string — On-chain address.
          - `networkFamily` string — Network family (e.g. evm).
      - object — The parent deposit address is in a compliance freeze.
        - `required` boolean — Whether the hold is still blocking; false once resolved.
        - `since` string, date-time — When the hold started.
        - `deadline` string, date-time — Deadline to resolve before timeout.
        - `resolvedAt` string, date-time — When the hold was resolved; null while outstanding.
        - `type` 'depositAddressFrozen', required — Type discriminator.
      - object — The destination external account went deleted/invalid.
        - `required` boolean — Whether the hold is still blocking; false once resolved.
        - `since` string, date-time — When the hold started.
        - `deadline` string, date-time — Deadline to resolve before timeout.
        - `resolvedAt` string, date-time — When the hold was resolved; null while outstanding.
        - `type` 'depositAddressInactive', required — Type discriminator.
        - `cause` HoldInactiveCause — Why a depositAddressInactive hold's destination external account went unusable.
          - `type` 'destinationExternalAccount' — Always `destinationExternalAccount`.
          - `externalAccountId` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `externalAccountStatus` 'deleted' | 'invalid'
          - `invalidReason` string — Machine-readable reason the destination became invalid.
    - `metadata` object — Free-form key-value pairs supplied at creation or update.
    - `createdAt` string, date-time — When the transaction was created.
    - `updatedAt` string, date-time — When the transaction was last updated.
    - `expiresAt` string, date-time — Expiry of the transaction's actionable window: present on auto-created transactions and on cash payouts (the pickup-code expiry), and retained after completion for audit. Null for other quote-initiated transactions.
    - `projectId` string — Opaque OMSX project ID, e.g. `prj_01kpxxa7esk9a`.

---

[API](https://skmtc.net/polygon-technology/apis/polygon-oms-public-api.md) · [All operations](https://skmtc.net/polygon-technology/apis/polygon-oms-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/polygon-technology/polygon-oms-public-api/revisions/18fdaebf64e5/schema)
