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

# Get transaction by ID

> Retrieves a single transaction by ID.



## OpenAPI

````yaml /api-reference/openapi.yaml get /transactions/{transactionId}
openapi: 3.0.3
info:
  title: Polygon OMS Public API
  version: v26.05.28-0001
  description: >-
    Unified API for moving money between crypto and fiat. Three ways to move
    money: Transactions (instant, wallet or card funded, including Cash-In for
    in-person cash deposits), Deposit Addresses (reusable crypto deposit
    configurations), and Virtual Accounts (dedicated bank accounts that
    auto-convert fiat to crypto). Standard transactions follow a two-step flow:
    create a Quote (pricing), then create a Transaction (execution). Cash-in
    codes generate a one-time deposit code for in-person cash deposits at retail
    locations.
  contact:
    name: Polygon OMS
    url: https://oms.polygon.technology
servers:
  - url: https://sandbox-api.polygon.technology/v0.10
    description: Sandbox
  - url: https://api.polygon.technology/v0.10
    description: Production
security:
  - BearerAuth: []
tags:
  - name: Auth
    description: Authentication via FrontEgg
  - name: Customers
    description: Customer management and KYC
  - name: Customer
  - name: Wallet
  - name: Quote
  - name: Transaction
  - name: Webhook
  - name: CashIns
  - name: CashLocation
  - name: Sandbox
  - name: VirtualAccount
  - name: Counterparty
  - name: ExternalAccount
  - name: DepositAddress
  - name: Simulation
paths:
  /transactions/{transactionId}:
    get:
      tags:
        - Transaction
      summary: Get transaction by ID
      description: Retrieves a single transaction by ID.
      operationId: getTransaction
      parameters:
        - in: path
          name: transactionId
          required: true
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transaction'
          description: The request has succeeded.
components:
  schemas:
    Transaction:
      description: >-
        A single movement of money from a source to a destination. Created by
        accepting a quote, or generated automatically by a deposit address,
        virtual account, or cash-in. Track its progress with status.
      properties:
        createdAt:
          type: string
          format: date-time
        customerId:
          description: The owning (sender) customer. OMSX customer TypeID (cst_…).
          type: string
        destination:
          $ref: '#/components/schemas/TransactionDestination'
        error:
          $ref: '#/components/schemas/SettlementError'
        estimatedArrival:
          type: string
          format: date-time
        expiresAt:
          type: string
          format: date-time
        hold:
          allOf:
            - $ref: '#/components/schemas/Hold'
          description: >-
            Present while status is `awaitingAction`; explains the hold and
            deadline to resolve it.
        id:
          type: string
        metadata:
          type: object
          additionalProperties:
            type: string
        object:
          enum:
            - transaction
          type: string
        precursor:
          allOf:
            - $ref: '#/components/schemas/Precursor'
          description: >-
            What created this transaction, carrying that origin's deposit
            instructions.
        pricing:
          allOf:
            - $ref: '#/components/schemas/Pricing'
          description: Consolidated economics.
        projectId:
          description: >-
            The owning project. Populated only on cross-project operator
            endpoints; omitted on partner endpoints, where the project is
            implicit from the auth token.
          type: string
        source:
          $ref: '#/components/schemas/TransactionSide'
        sourceToDestination:
          $ref: '#/components/schemas/SourceToDestination'
        status:
          $ref: '#/components/schemas/TransactionStatus'
        subStatus:
          $ref: '#/components/schemas/TransactionSubStatus'
        updatedAt:
          type: string
          format: date-time
      required:
        - id
        - object
        - status
        - customerId
        - source
        - destination
        - pricing
      type: object
    TransactionDestination:
      description: >-
        The destination side of a transaction or quote: a typed instrument plus
        `payoutOrigin`. Amounts live only in `pricing`.
      discriminator:
        mapping:
          bankCanada:
            $ref: '#/components/schemas/BankCanadaDestination'
          bankIban:
            $ref: '#/components/schemas/BankIbanDestination'
          bankUs:
            $ref: '#/components/schemas/BankUsDestination'
          card:
            $ref: '#/components/schemas/CardDestination'
          cash:
            $ref: '#/components/schemas/CashDestination'
          walletExternal:
            $ref: '#/components/schemas/WalletExternalDestination'
          walletOms:
            $ref: '#/components/schemas/WalletOmsDestination'
        propertyName: type
      oneOf:
        - $ref: '#/components/schemas/WalletOmsDestination'
        - $ref: '#/components/schemas/WalletExternalDestination'
        - $ref: '#/components/schemas/BankUsDestination'
        - $ref: '#/components/schemas/BankIbanDestination'
        - $ref: '#/components/schemas/BankCanadaDestination'
        - $ref: '#/components/schemas/CardDestination'
        - $ref: '#/components/schemas/CashDestination'
      type: object
    SettlementError:
      description: >-
        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.
      properties:
        code:
          type: string
        message:
          type: string
        occurredAt:
          type: string
          format: date-time
        recoverable:
          type: boolean
        recovery:
          allOf:
            - $ref: '#/components/schemas/Recovery'
          description: Operator-recovery path; mutually exclusive with `refund`.
        refund:
          $ref: '#/components/schemas/Refund'
      required:
        - code
        - message
        - occurredAt
        - recoverable
      type: object
    Hold:
      description: >-
        Why an `awaitingAction` transaction is held, and the deadline to resolve
        it. Discriminated by `type`; each arm carries the fields that apply.
      discriminator:
        mapping:
          depositAddressFrozen:
            $ref: '#/components/schemas/HoldDepositAddressFrozen'
          depositAddressInactive:
            $ref: '#/components/schemas/HoldDepositAddressInactive'
          senderAttribution:
            $ref: '#/components/schemas/HoldSenderAttribution'
        propertyName: type
      oneOf:
        - $ref: '#/components/schemas/HoldSenderAttribution'
        - $ref: '#/components/schemas/HoldDepositAddressFrozen'
        - $ref: '#/components/schemas/HoldDepositAddressInactive'
      type: object
    Precursor:
      description: >-
        What created this transaction, carrying that origin's deposit
        instructions. Discriminated by `type`: `quote` (accepted quote),
        `depositAddress`, `virtualAccount`, or `cashIn`.
      discriminator:
        mapping:
          cashIn:
            $ref: '#/components/schemas/PrecursorCashIn'
          depositAddress:
            $ref: '#/components/schemas/PrecursorDepositAddress'
          quote:
            $ref: '#/components/schemas/PrecursorQuote'
          virtualAccount:
            $ref: '#/components/schemas/PrecursorVirtualAccount'
        propertyName: type
      oneOf:
        - $ref: '#/components/schemas/PrecursorDepositAddress'
        - $ref: '#/components/schemas/PrecursorVirtualAccount'
        - $ref: '#/components/schemas/PrecursorCashIn'
        - $ref: '#/components/schemas/PrecursorQuote'
      type: object
    Pricing:
      description: >-
        Consolidated economics for a quote or transaction: per-side amounts and
        fees, the rate pair, and gas sponsorship, all in one place.
      properties:
        destination:
          $ref: '#/components/schemas/PricingSide'
        effectiveRate:
          type: string
        exchangeRate:
          type: string
        fixedAmountSide:
          enum:
            - source
            - destination
          type: string
        pair:
          description: Asset pair, e.g. "usdc/usd".
          type: string
        source:
          $ref: '#/components/schemas/PricingSide'
        sponsorGas:
          type: boolean
        sponsorGasCost:
          type: string
      type: object
    TransactionSide:
      description: >-
        The source side of a transaction or quote: a typed instrument carrying
        identity (`party`) and instrument detail. Amounts live only in
        `pricing`.
      discriminator:
        mapping:
          bankCanada:
            $ref: '#/components/schemas/BankCanadaInstrument'
          bankIban:
            $ref: '#/components/schemas/BankIbanInstrument'
          bankUs:
            $ref: '#/components/schemas/BankUsInstrument'
          card:
            $ref: '#/components/schemas/CardInstrument'
          cash:
            $ref: '#/components/schemas/CashInstrument'
          walletExternal:
            $ref: '#/components/schemas/WalletExternalInstrument'
          walletOms:
            $ref: '#/components/schemas/WalletOmsInstrument'
        propertyName: type
      oneOf:
        - $ref: '#/components/schemas/WalletOmsInstrument'
        - $ref: '#/components/schemas/WalletExternalInstrument'
        - $ref: '#/components/schemas/BankUsInstrument'
        - $ref: '#/components/schemas/BankIbanInstrument'
        - $ref: '#/components/schemas/BankCanadaInstrument'
        - $ref: '#/components/schemas/CardInstrument'
        - $ref: '#/components/schemas/CashInstrument'
      type: object
    SourceToDestination:
      description: >-
        Composite of source and destination instrument categories, inferred from
        each side. Replaces the older `TransferType`. The cash corridors
        (`cryptoToCash`, `cashToCrypto`) are derived from a cash-pickup
        destination or cash-in source respectively; the rest map straight from
        the internal corridor type.
      enum:
        - cryptoToCrypto
        - cryptoToCash
        - cryptoToFiatAccount
        - cashToCrypto
        - fiatAccountToCrypto
      type: string
    TransactionStatus:
      description: >-
        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.
      enum:
        - processing
        - awaitingAction
        - completed
        - failed
      type: string
    TransactionSubStatus:
      description: >-
        Finer-grained, status-scoped sub-state of a transaction. Each member is
        namespaced by its parent `status` (e.g. `processing.cashPickupReady`).
        The

        closed set; absent when the transaction has no meaningful sub-state.
      enum:
        - 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
      type: string
    BankCanadaDestination:
      properties:
        category:
          enum:
            - fiatAccount
          type: string
        details:
          $ref: '#/components/schemas/BankCanadaDetails'
        party:
          $ref: '#/components/schemas/Party'
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
        type:
          enum:
            - bankCanada
          type: string
      required:
        - type
        - category
        - details
      type: object
    BankIbanDestination:
      properties:
        category:
          enum:
            - fiatAccount
          type: string
        details:
          $ref: '#/components/schemas/BankIbanDetails'
        party:
          $ref: '#/components/schemas/Party'
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
        type:
          enum:
            - bankIban
          type: string
      required:
        - type
        - category
        - details
      type: object
    BankUsDestination:
      properties:
        category:
          enum:
            - fiatAccount
          type: string
        details:
          $ref: '#/components/schemas/BankUsDetails'
        party:
          $ref: '#/components/schemas/Party'
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
        type:
          enum:
            - bankUs
          type: string
      required:
        - type
        - category
        - details
      type: object
    CardDestination:
      properties:
        category:
          enum:
            - fiatAccount
          type: string
        details:
          $ref: '#/components/schemas/CardDetails'
        party:
          $ref: '#/components/schemas/Party'
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
        type:
          enum:
            - card
          type: string
      required:
        - type
        - category
        - details
      type: object
    CashDestination:
      properties:
        category:
          enum:
            - cash
          type: string
        details:
          $ref: '#/components/schemas/CashDetails'
        party:
          $ref: '#/components/schemas/Party'
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
        type:
          enum:
            - cash
          type: string
      required:
        - type
        - category
        - details
      type: object
    WalletExternalDestination:
      properties:
        category:
          enum:
            - crypto
          type: string
        details:
          $ref: '#/components/schemas/WalletExternalDetails'
        party:
          $ref: '#/components/schemas/Party'
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
        type:
          enum:
            - walletExternal
          type: string
      required:
        - type
        - category
        - details
      type: object
    WalletOmsDestination:
      properties:
        category:
          enum:
            - crypto
          type: string
        details:
          $ref: '#/components/schemas/WalletOmsDetails'
        party:
          allOf:
            - $ref: '#/components/schemas/Party'
          description: Structured identity of who is on this side.
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
        type:
          enum:
            - walletOms
          type: string
      required:
        - type
        - category
        - details
      type: object
    Recovery:
      description: >-
        Operator-driven recovery path for terminal failures where funds sit
        unattributed at the provider and cannot be auto-refunded on-chain
        (deposit-address inbound timeouts). Mutually exclusive with `refund`.
        Populated for a sender-attribution timeout.
      properties:
        custodian:
          allOf:
            - $ref: '#/components/schemas/DestinationCustodian'
          description: >-
            The upstream custody holding the unattributed funds (`Custodian`
            enum, reused from virtual accounts), for example `EREBOR_BANK_US`
            for an unattributed deposit-address inbound.
        instructions:
          type: string
        referenceFields:
          allOf:
            - $ref: '#/components/schemas/RecoveryReferenceFields'
          description: >-
            Identifiers an operator uses to locate the unattributed funds and
            initiate manual recovery.
        type:
          description: Always `operatorRecovery`.
          enum:
            - operatorRecovery
          type: string
      type: object
    Refund:
      description: >-
        An automatic refund issued when a transaction fails after funds were
        pulled from the source.
      properties:
        amount:
          type: string
        asset:
          type: string
        destinationWallet:
          type: string
        network:
          type: string
        status:
          $ref: '#/components/schemas/RefundStatus'
        txHash:
          type: string
      type: object
    HoldDepositAddressFrozen:
      description: The parent deposit address is in a compliance freeze.
      properties:
        deadline:
          type: string
          format: date-time
        required:
          type: boolean
        resolvedAt:
          type: string
          format: date-time
        since:
          type: string
          format: date-time
        type:
          enum:
            - depositAddressFrozen
          type: string
      required:
        - type
      type: object
    HoldDepositAddressInactive:
      description: The destination external account went deleted/invalid.
      properties:
        cause:
          $ref: '#/components/schemas/HoldInactiveCause'
        deadline:
          type: string
          format: date-time
        required:
          type: boolean
        resolvedAt:
          type: string
          format: date-time
        since:
          type: string
          format: date-time
        type:
          enum:
            - depositAddressInactive
          type: string
      required:
        - type
      type: object
    HoldSenderAttribution:
      description: DA received crypto from an address not linked to a counterparty.
      properties:
        deadline:
          type: string
          format: date-time
        matchableExternalAccountCriteria:
          allOf:
            - $ref: '#/components/schemas/MatchableExternalAccountCriteria'
          description: Registering a matching walletExternal EA releases this hold.
        required:
          type: boolean
        resolvedAt:
          type: string
          format: date-time
        since:
          type: string
          format: date-time
        txHash:
          description: The transaction hash of the unattributed inbound deposit.
          type: string
        type:
          enum:
            - senderAttribution
          type: string
      required:
        - type
      type: object
    PrecursorCashIn:
      description: Created by a cash-in.
      properties:
        details:
          $ref: '#/components/schemas/PrecursorCashInDetails'
        type:
          enum:
            - cashIn
          type: string
      required:
        - type
        - details
      type: object
    PrecursorDepositAddress:
      description: Created by a deposit address.
      properties:
        details:
          $ref: '#/components/schemas/PrecursorDepositAddressDetails'
        type:
          enum:
            - depositAddress
          type: string
      required:
        - type
        - details
      type: object
    PrecursorQuote:
      description: Created by accepting a quote.
      properties:
        details:
          $ref: '#/components/schemas/PrecursorQuoteDetails'
        type:
          enum:
            - quote
          type: string
      required:
        - type
        - details
      type: object
    PrecursorVirtualAccount:
      description: Created by a virtual account.
      properties:
        details:
          $ref: '#/components/schemas/PrecursorVirtualAccountDetails'
        type:
          enum:
            - virtualAccount
          type: string
      required:
        - type
        - details
      type: object
    PricingSide:
      description: >-
        Per-side economics for the `pricing` object: identity lives on the
        source/destination side; the amounts and fees live here.
      properties:
        amountGross:
          type: string
        amountNet:
          type: string
        asset:
          type: string
        feesDeducted:
          $ref: '#/components/schemas/FeesDeducted'
      type: object
    BankCanadaInstrument:
      description: Canadian bank account instrument.
      properties:
        category:
          enum:
            - fiatAccount
          type: string
        details:
          $ref: '#/components/schemas/BankCanadaDetails'
        party:
          $ref: '#/components/schemas/Party'
        type:
          enum:
            - bankCanada
          type: string
      required:
        - type
        - category
        - details
      type: object
    BankIbanInstrument:
      description: IBAN bank account instrument.
      properties:
        category:
          enum:
            - fiatAccount
          type: string
        details:
          $ref: '#/components/schemas/BankIbanDetails'
        party:
          $ref: '#/components/schemas/Party'
        type:
          enum:
            - bankIban
          type: string
      required:
        - type
        - category
        - details
      type: object
    BankUsInstrument:
      description: US bank account instrument.
      properties:
        category:
          enum:
            - fiatAccount
          type: string
        details:
          $ref: '#/components/schemas/BankUsDetails'
        party:
          $ref: '#/components/schemas/Party'
        type:
          enum:
            - bankUs
          type: string
      required:
        - type
        - category
        - details
      type: object
    CardInstrument:
      description: Card instrument.
      properties:
        category:
          enum:
            - fiatAccount
          type: string
        details:
          $ref: '#/components/schemas/CardDetails'
        party:
          $ref: '#/components/schemas/Party'
        type:
          enum:
            - card
          type: string
      required:
        - type
        - category
        - details
      type: object
    CashInstrument:
      description: Cash instrument.
      properties:
        category:
          enum:
            - cash
          type: string
        details:
          $ref: '#/components/schemas/CashDetails'
        party:
          $ref: '#/components/schemas/Party'
        type:
          enum:
            - cash
          type: string
      required:
        - type
        - category
        - details
      type: object
    WalletExternalInstrument:
      description: Externally-custodied crypto wallet instrument.
      properties:
        category:
          enum:
            - crypto
          type: string
        details:
          $ref: '#/components/schemas/WalletExternalDetails'
        party:
          $ref: '#/components/schemas/Party'
        type:
          enum:
            - walletExternal
          type: string
      required:
        - type
        - category
        - details
      type: object
    WalletOmsInstrument:
      description: OMS-custodied crypto wallet instrument.
      properties:
        category:
          enum:
            - crypto
          type: string
        details:
          $ref: '#/components/schemas/WalletOmsDetails'
        party:
          allOf:
            - $ref: '#/components/schemas/Party'
          description: Structured identity of who is on this side.
        type:
          enum:
            - walletOms
          type: string
      required:
        - type
        - category
        - details
      type: object
    BankCanadaDetails:
      description: Canadian bank account instrument details.
      properties:
        accountNumberLast4:
          type: string
        asset:
          enum:
            - usd
            - cad
          type: string
        bankName:
          type: string
        id:
          type: string
        institutionNumber:
          type: string
        memo:
          type: string
        network:
          enum:
            - swift
            - local
          type: string
        transitNumber:
          type: string
      type: object
    Party:
      discriminator:
        mapping:
          customer:
            $ref: '#/components/schemas/PartyCustomer'
          externalRegistered:
            $ref: '#/components/schemas/PartyExternalRegistered'
          externalUnregistered:
            $ref: '#/components/schemas/PartyExternalUnregistered'
          otherCustomer:
            $ref: '#/components/schemas/PartyOtherCustomer'
        propertyName: relationship
      oneOf:
        - $ref: '#/components/schemas/PartyCustomer'
        - $ref: '#/components/schemas/PartyOtherCustomer'
        - $ref: '#/components/schemas/PartyExternalRegistered'
        - $ref: '#/components/schemas/PartyExternalUnregistered'
      type: object
    PayoutOrigin:
      description: >-
        Where last-mile delivery is sent from. Quote and deposit-address
        responses echo the choice only; the transaction response carries full
        detail (`accountNumber`/`routingNumber`/`txHash`).
      discriminator:
        mapping:
          bank:
            $ref: '#/components/schemas/PayoutOriginBank'
          blockchain:
            $ref: '#/components/schemas/PayoutOriginBlockchain'
        propertyName: type
      oneOf:
        - $ref: '#/components/schemas/PayoutOriginBank'
        - $ref: '#/components/schemas/PayoutOriginBlockchain'
      type: object
    BankIbanDetails:
      description: IBAN bank account instrument details.
      properties:
        BIC:
          type: string
        asset:
          type: string
        bankAddress:
          $ref: '#/components/schemas/Address'
        countryCode:
          type: string
        ibanLast4:
          type: string
        id:
          type: string
        memo:
          type: string
        network:
          enum:
            - swift
          type: string
      type: object
    BankUsDetails:
      description: US bank account instrument details.
      properties:
        accountNumberLast4:
          type: string
        accountType:
          enum:
            - checking
            - savings
          type: string
        asset:
          enum:
            - usd
          type: string
        bankName:
          type: string
        id:
          type: string
        memo:
          type: string
        network:
          enum:
            - ach
            - achSameDay
            - wire
            - rtp
          type: string
        routingNumber:
          type: string
        secCode:
          allOf:
            - $ref: '#/components/schemas/SecCode'
          description: ACH SEC code. Populated only when network is ach or achSameDay.
      type: object
    CardDetails:
      description: Card instrument details.
      properties:
        asset:
          enum:
            - usd
          type: string
        cardNumberLast4:
          type: string
        cardProvider:
          type: string
        id:
          type: string
        memo:
          type: string
        network:
          enum:
            - card
          type: string
      type: object
    CashDetails:
      description: Cash pickup/drop instrument details.
      properties:
        asset:
          type: string
        cashLocationId:
          type: string
        cashLocationReference:
          type: string
        code:
          type: string
        expiresAt:
          type: string
          format: date-time
        locationAddress:
          type: string
        locationName:
          type: string
      type: object
    WalletExternalDetails:
      description: >-
        WalletExternal instrument details: a crypto wallet held in external
        custody.
      properties:
        asset:
          type: string
        blockchainAddress:
          type: string
        blockchainAsset:
          allOf:
            - $ref: '#/components/schemas/BlockchainAsset'
          description: Resolved on-chain asset identity (protocol/chainId/tokenId).
        custodian:
          type: string
        id:
          type: string
        network:
          type: string
        otherCustodian:
          type: string
        txHash:
          type: string
      type: object
    WalletOmsDetails:
      description: 'WalletOms instrument details: an OMS-custodied crypto wallet.'
      properties:
        asset:
          type: string
        blockchainAddress:
          type: string
        blockchainAsset:
          allOf:
            - $ref: '#/components/schemas/BlockchainAsset'
          description: Resolved on-chain asset identity (protocol/chainId/tokenId).
        custodyType:
          enum:
            - custodial
            - embedded
          type: string
        id:
          description: Internal OMS wallet (acc_ prefix).
          type: string
        network:
          type: string
        txHash:
          type: string
      type: object
    DestinationCustodian:
      enum:
        - 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
      type: string
    RecoveryReferenceFields:
      description: Reference identifiers for an operator-driven recovery.
      properties:
        sourceTxHash:
          type: string
        transactionId:
          type: string
      type: object
    RefundStatus:
      enum:
        - pending
        - completed
        - failed
      type: string
    HoldInactiveCause:
      description: >-
        Why a depositAddressInactive hold's destination external account went
        unusable.
      properties:
        externalAccountId:
          type: string
        externalAccountStatus:
          $ref: '#/components/schemas/ExternalAccountStatusReason'
        invalidReason:
          type: string
        type:
          description: Always `destinationExternalAccount`.
          enum:
            - destinationExternalAccount
          type: string
      type: object
    MatchableExternalAccountCriteria:
      description: >-
        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.
      properties:
        blockchainAddress:
          type: string
        customerId:
          type: string
        networkFamily:
          type: string
        type:
          description: >-
            Always `walletExternal`: the external account type that resolves the
            hold.
          enum:
            - walletExternal
          type: string
      type: object
    PrecursorCashInDetails:
      description: >-
        cashIn origin payload: the cash-in id + the retail deposit code +
        location.
      properties:
        cashInId:
          type: string
        depositInstructions:
          $ref: '#/components/schemas/CashInDepositInstructions'
      required:
        - cashInId
      type: object
    PrecursorDepositAddressDetails:
      description: >-
        depositAddress origin payload: the DA id + its on-chain inlet
        instructions.
      properties:
        depositAddressId:
          type: string
        depositInstructions:
          $ref: '#/components/schemas/DepositAddressDepositInstructions'
      required:
        - depositAddressId
      type: object
    PrecursorQuoteDetails:
      description: 'quote origin payload: the quote id (no deposit instructions).'
      properties:
        quoteId:
          type: string
      required:
        - quoteId
      type: object
    PrecursorVirtualAccountDetails:
      description: >-
        virtualAccount origin payload: the VA id and its bank routing block. The
        `depositInstructions` block is schema-present and will be populated once
        a virtual-account read is available.
      properties:
        depositInstructions:
          $ref: '#/components/schemas/VirtualAccountBankDetails'
        virtualAccountId:
          type: string
      required:
        - virtualAccountId
      type: object
    FeesDeducted:
      description: |-
        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.
      properties:
        developer:
          description: |-
            Per-side aggregated developer fee total in this side's asset.
            Always "0" in alpha - alpha invariant, mirrors the gas line.
          type: string
        gas:
          type: string
        oms:
          type: string
        total:
          type: string
      required:
        - total
        - developer
        - oms
        - gas
      type: object
    PartyCustomer:
      description: The owning OMS customer is on this side.
      properties:
        customerId:
          type: string
        entityType:
          $ref: '#/components/schemas/OwnerType'
        relationship:
          enum:
            - customer
          type: string
      required:
        - relationship
        - customerId
      type: object
    PartyExternalRegistered:
      description: A registered counterparty (saved third party) is on this side.
      properties:
        address:
          allOf:
            - $ref: '#/components/schemas/Address'
          nullable: true
          type: object
        counterpartyId:
          type: string
        entityType:
          $ref: '#/components/schemas/OwnerType'
        name:
          nullable: true
          type: string
        relationship:
          enum:
            - externalRegistered
          type: string
      required:
        - relationship
        - counterpartyId
      type: object
    PartyExternalUnregistered:
      description: >-
        An unrecognized external party (no saved record) is on this side. There
        is no

        OMS record behind it, so it carries no entityType.
      properties:
        address:
          allOf:
            - $ref: '#/components/schemas/Address'
          nullable: true
          type: object
        name:
          nullable: true
          type: string
        relationship:
          enum:
            - externalUnregistered
          type: string
      required:
        - relationship
      type: object
    PartyOtherCustomer:
      description: A different OMS customer is on this side.
      properties:
        customerId:
          type: string
        entityType:
          $ref: '#/components/schemas/OwnerType'
        name:
          nullable: true
          type: string
        relationship:
          enum:
            - otherCustomer
          type: string
      required:
        - relationship
        - customerId
      type: object
    PayoutOriginBank:
      description: >-
        Payout originates from a bank account. Fields are wrapped in a `details`
        envelope (matches the `precursor` shape).
        `accountNumber`/`routingNumber` are full sending-account detail rendered
        on the transaction only; null on quote and deposit-address responses.
      properties:
        details:
          $ref: '#/components/schemas/PayoutOriginBankDetails'
        type:
          enum:
            - bank
          type: string
      required:
        - type
        - details
      type: object
    PayoutOriginBlockchain:
      description: Payout originates from an on-chain address.
      properties:
        blockchainAddress:
          type: string
        custodian:
          type: string
        network:
          type: string
        txHash:
          type: string
        type:
          enum:
            - blockchain
          type: string
      required:
        - type
      type: object
    Address:
      description: A postal address. country is an ISO 3166-1 alpha-2 country code.
      properties:
        city:
          type: string
        country:
          description: ISO 3166-1 alpha-2
          type: string
        line1:
          type: string
        line2:
          type: string
        state:
          type: string
        zipCode:
          type: string
      type: object
    SecCode:
      description: >-
        ACH SEC code. Populated only when the destination bank network is `ach`
        or `achSameDay`; null otherwise. Server-derived from the destination
        owner's and the source customer's `entityType`.
      enum:
        - ccd
        - ppd
        - web
      type: string
    BlockchainAsset:
      description: >-
        On-chain identity for an asset: the chain it lives on, the wire-level
        protocol (EVM, SVM, Sui), and the token identifier within that chain.
      properties:
        chainId:
          description: >-
            Chain identifier within the protocol (for example, an EVM chain ID
            or a Solana cluster name).
          type: string
        protocol:
          $ref: '#/components/schemas/BlockchainProtocol'
        tokenId:
          description: >-
            Token identifier on the chain (for example, an ERC-20 contract
            address or an SPL mint address). Use the chain's canonical
            representation for the native asset.
          type: string
      required:
        - protocol
        - chainId
        - tokenId
      type: object
    ExternalAccountStatusReason:
      enum:
        - deleted
        - invalid
      type: string
    CashInDepositInstructions:
      description: >-
        The deposit code and retail location a customer uses to complete a
        cash-in.
      properties:
        code:
          type: string
        expiresAt:
          type: string
          format: date-time
        locationAddress:
          type: string
        locationName:
          type: string
      required:
        - code
        - expiresAt
      type: object
    DepositAddressDepositInstructions:
      properties:
        address:
          description: OMS-owned on-chain inlet address for this deposit address.
          type: string
        asset:
          description: Same value as expectedSourceAsset.
          type: string
        expiresAt:
          description: >-
            Placeholder for a future provider-imposed inlet expiry. Null today;
            surfaced now so adding it later is not a breaking change.
          format: date-time
          type: string
        network:
          description: Same value as expectedSourceNetwork.
          type: string
      required:
        - asset
        - network
        - address
      type: object
    VirtualAccountBankDetails:
      description: |-
        Dual-rail bank deposit instructions. Both fields are optional so
        future program variants can support only one rail family; at launch
        both are populated.
      properties:
        domestic:
          $ref: '#/components/schemas/DomesticDepositInstruction'
        swift:
          $ref: '#/components/schemas/SwiftDepositInstruction'
      type: object
    OwnerType:
      enum:
        - individual
        - business
      type: string
    PayoutOriginBankDetails:
      description: >-
        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.
      properties:
        accountHolder:
          $ref: '#/components/schemas/AccountHolder'
        accountHolderName:
          type: string
        accountNumber:
          nullable: true
          type: string
        routingNumber:
          nullable: true
          type: string
        virtualAccountId:
          nullable: true
          type: string
      type: object
    BlockchainProtocol:
      description: >-
        Wire-level protocol family for a chain. `evm` covers Ethereum-compatible
        chains, `svm` covers the Solana virtual machine, and `sui` covers the
        Sui Move VM.
      enum:
        - evm
        - svm
        - sui
      type: string
    DomesticDepositInstruction:
      description: |-
        Domestic deposit instruction (ACH, wire, book transfer, future RTP).
        Funds route directly to the OMS bank partner with the customer as
        the beneficiary.
      properties:
        accountNumber:
          description: Account number for the OMS-provisioned account.
          type: string
        accountType:
          description: Always "checking" for OMS-provisioned accounts.
          type: string
        bankAddress:
          description: Address of the OMS bank partner.
          type: string
        bankName:
          description: Name of the OMS bank partner.
          type: string
        beneficiary:
          allOf:
            - $ref: '#/components/schemas/DepositBeneficiary'
          description: Customer as beneficiary on the domestic route.
        network:
          description: Supported domestic payment rails for this account number.
          items:
            $ref: '#/components/schemas/BankDepositNetworkType'
          type: array
        routingNumber:
          description: Routing number for the OMS-provisioned account.
          type: string
      required:
        - bankName
        - bankAddress
        - accountNumber
        - routingNumber
        - accountType
        - beneficiary
        - network
      type: object
    SwiftDepositInstruction:
      description: |-
        SWIFT (international wire) deposit instruction. Funds route via the
        OMS bank partner's correspondent / intermediary bank with the OMS
        bank partner as the beneficiary; the OMS-provisioned account number
        is referenced in the memo so the receiving bank can credit the
        correct customer account.
      properties:
        accountNumber:
          description: >-
            Intermediary bank account number: static across all OMS-provisioned
            virtual accounts in the program.
          type: string
        bankAddress:
          description: Intermediary bank address.
          type: string
        bankName:
          description: Intermediary bank name.
          type: string
        beneficiary:
          allOf:
            - $ref: '#/components/schemas/DepositBeneficiary'
          description: OMS bank partner as beneficiary on the SWIFT route.
        bic:
          description: Intermediary bank BIC / SWIFT code.
          type: string
        memo:
          description: OMS-generated memo of the form `FFC <customerName> <accountNumber>`.
          type: string
      required:
        - bankName
        - bankAddress
        - accountNumber
        - bic
        - beneficiary
        - memo
      type: object
    AccountHolder:
      description: Who holds the payout bank account. `customer` is the only valid value.
      enum:
        - customer
      type: string
    DepositBeneficiary:
      description: |-
        Beneficiary on a deposit instruction: the entity to which the funds
        are ultimately credited. For SWIFT this is the OMS bank partner;
        for domestic rails this is the customer. Response-only, rendered
        into the developer-facing bankDetails response.
      properties:
        address:
          $ref: '#/components/schemas/VirtualAccountCounterpartyAddress'
        name:
          type: string
      required:
        - name
        - address
      type: object
    BankDepositNetworkType:
      enum:
        - ACH
        - WIRE
        - DOMESTIC_WIRE
        - ALL
      type: string
    VirtualAccountCounterpartyAddress:
      properties:
        city:
          type: string
        country:
          description: ISO 3166-1 alpha-2.
          type: string
        countryArea:
          description: State / province / region. Required when country = "US".
          type: string
        postalCode:
          type: string
        streetAddress:
          type: string
      required:
        - streetAddress
        - city
        - postalCode
        - country
      type: object
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Token from POST /auth/token

````