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

# List Deposit Address transactions

> Returns the payment transactions that originated from this Deposit
Address, most recent first, with cursor-based pagination. Uses the same
grouped payment read model as `GET /transactions`, pinned to this deposit
address (equivalent to `GET /transactions?depositAddressId=`).

This is a collection filter: it always returns `200` with the matching
transactions. An unknown, deleted, or other-tenant `depositAddressId`
simply matches no rows and yields an empty list — it is not a `404`. Use
`GET /deposit-addresses/{depositAddressId}` to assert existence/ownership.



## OpenAPI

````yaml /api-reference/openapi.yaml get /deposit-addresses/{depositAddressId}/transactions
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.11
    description: Sandbox
  - url: https://api.polygon.technology/v0.11
    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: CashIns
  - name: CashLocation
  - name: Sandbox
  - name: VirtualAccount
  - name: Counterparty
  - name: ExternalAccount
  - name: DepositAddress
paths:
  /deposit-addresses/{depositAddressId}/transactions:
    get:
      tags:
        - DepositAddress
      summary: List Deposit Address transactions
      description: >-
        Returns the payment transactions that originated from this Deposit

        Address, most recent first, with cursor-based pagination. Uses the same

        grouped payment read model as `GET /transactions`, pinned to this
        deposit

        address (equivalent to `GET /transactions?depositAddressId=`).


        This is a collection filter: it always returns `200` with the matching

        transactions. An unknown, deleted, or other-tenant `depositAddressId`

        simply matches no rows and yields an empty list — it is not a `404`. Use

        `GET /deposit-addresses/{depositAddressId}` to assert
        existence/ownership.
      operationId: listDepositAddressTransactions
      parameters:
        - name: depositAddressId
          in: path
          required: true
          description: Deposit Address ID (`da_` prefix).
          schema:
            type: string
        - $ref: '#/components/parameters/PaginationParams.limit'
        - $ref: '#/components/parameters/PaginationParams.startingAfter'
        - $ref: '#/components/parameters/PaginationParams.endingBefore'
        - name: status
          in: query
          required: false
          description: Filter by status.
          schema:
            type: array
            items:
              $ref: '#/components/schemas/TransactionStatus'
        - name: sourceToDestination
          in: query
          required: false
          description: Filter by corridor (source/destination category composite).
          schema:
            type: array
            items:
              $ref: '#/components/schemas/SourceToDestination'
        - name: customerId
          in: query
          required: false
          description: Scope to a customer (sender or recipient). `cst_` prefix.
          schema:
            type: string
        - name: createdAfter
          in: query
          required: false
          description: Inclusive lower bound on `createdAt`.
          schema:
            type: string
            format: date-time
        - name: createdBefore
          in: query
          required: false
          description: Inclusive upper bound on `createdAt`.
          schema:
            type: string
            format: date-time
        - name: search
          in: query
          required: false
          description: >-
            Free-text search. Matches transaction id, customer id, or customer
            email.
          schema:
            type: string
        - name: q
          in: query
          required: false
          description: Alias for `search`.
          schema:
            type: string
        - name: legStatus
          in: query
          required: false
          description: >-
            Filters to payments where ANY leg's underlying status is in the
            given set.
          schema:
            type: array
            items:
              type: string
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionList'
components:
  parameters:
    PaginationParams.limit:
      name: limit
      in: query
      required: false
      description: >-
        Page size, supported range 1-100. The default and maximum are
        per-resource

        (see each endpoint's description; most endpoints default to

        50) and are resolved at runtime from configuration. Values outside the
        range

        are clamped to the nearest bound rather than rejected. The range is
        published

        machine-readably via the `x-minimum`/`x-maximum` OpenAPI extensions
        below —

        deliberately NOT via `@minValue`/`@maxValue`, which emit JSON-Schema

        `minimum`/`maximum` and make the generated SDK (Zod) reject values the
        server

        accepts and clamps. See `PaginatedList.limit` for the effective value
        applied.
      schema:
        type: integer
        format: int32
      x-maximum: 100
      x-minimum: 1
    PaginationParams.startingAfter:
      name: startingAfter
      in: query
      required: false
      schema:
        type: string
    PaginationParams.endingBefore:
      name: endingBefore
      in: query
      required: false
      schema:
        type: string
  schemas:
    TransactionStatus:
      type: string
      enum:
        - processing
        - awaitingAction
        - completed
        - failed
      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.
    SourceToDestination:
      type: string
      enum:
        - cryptoToCrypto
        - cryptoToCash
        - cryptoToFiatAccount
        - cashToCrypto
        - fiatAccountToCrypto
        - fiatAccountToFiatAccount
      description: >-
        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.
    TransactionList:
      type: object
      properties:
        object:
          type: string
          description: Resource type discriminator.
        limit:
          type: integer
          format: int32
          description: |-
            The effective page size applied to this response, after clamping an
            out-of-range or unset requested `limit` into the supported bound.
        hasMore:
          type: boolean
          description: >-
            True when more rows exist beyond this page in the direction of
            travel (forward by default, backward when `endingBefore` was
            supplied).
        nextCursor:
          type: string
          description: |-
            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:
          type: string
          description: >-
            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:
          type: array
          items:
            $ref: '#/components/schemas/Transaction'
          description: The page of results.
      description: A paginated list of transactions.
    Transaction:
      type: object
      required:
        - id
        - object
        - status
        - customerId
        - precursor
        - source
        - destination
        - pricing
      properties:
        id:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: Transaction ID (`txn_` prefix).
        object:
          type: string
          enum:
            - transaction
          description: Resource type discriminator. Always "transaction".
        sourceToDestination:
          allOf:
            - $ref: '#/components/schemas/SourceToDestination'
          description: Corridor composite derived from the two sides.
        status:
          allOf:
            - $ref: '#/components/schemas/TransactionStatus'
          description: Current lifecycle status. See `subStatus` for finer granularity.
        subStatus:
          allOf:
            - $ref: '#/components/schemas/TransactionSubStatus'
          description: >-
            Status-scoped sub-state (e.g. `processing.fundsPulled`). Absent when
            the transaction

            has no meaningful sub-state.
        customerId:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: The owning (sender) customer. OMSX customer TypeID (cst_…).
        precursor:
          allOf:
            - $ref: '#/components/schemas/Precursor'
          description: >-
            What created this transaction, carrying that origin's deposit
            instructions.

            Always present: the `manual` arm covers any transaction with no

            automated origin.
        source:
          allOf:
            - $ref: '#/components/schemas/TransactionSide'
          description: 'The funding side: a typed instrument carrying identity and detail.'
        destination:
          allOf:
            - $ref: '#/components/schemas/TransactionDestination'
          description: 'The receiving side: a typed instrument plus `payoutOrigin`.'
        pricing:
          allOf:
            - $ref: '#/components/schemas/Pricing'
          description: Consolidated economics.
        estimatedArrival:
          type: string
          format: date-time
          description: >-
            Estimated completion time. Present when the destination rail has a
            predictable

            settlement time (e.g. bank payouts and some crypto legs); null
            otherwise.
        error:
          allOf:
            - $ref: '#/components/schemas/SettlementError'
          description: >-
            Failure detail. Set when the transaction fails; includes refund or
            recovery state

            where applicable.
        hold:
          allOf:
            - $ref: '#/components/schemas/Hold'
          description: >-
            Present while status is `awaitingAction`; explains the hold +
            deadline.

            Populated when the hold model is wired.
        metadata:
          type: object
          additionalProperties:
            type: string
          description: Free-form key-value pairs supplied at creation or update.
        createdAt:
          type: string
          format: date-time
          description: When the transaction was created.
        updatedAt:
          type: string
          format: date-time
          description: When the transaction was last updated.
        expiresAt:
          type: string
          format: date-time
          description: >-
            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:
          allOf:
            - $ref: '#/components/schemas/omsxProjectId'
          description: >-
            The owning project. Populated only on the cross-project admin
            endpoints (e.g. GET /admin/transactions/redrivable) so operators can
            tell which project a stranded transaction belongs to. Omitted on
            partner endpoints, where the project is implicit from the auth
            token.
      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.
    typeId:
      type: string
      pattern: >-
        ^[a-z]+_([0-9a-hjkmnp-tv-z]{26}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$
      description: >-
        Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID
        suffixes are accepted until non-v7 rows are retired.
      x-go-type: string
    TransactionSubStatus:
      type: string
      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
        - processing.inboundPending
        - processing.inboundProcessing
        - failed.inboundFailed
        - failed.returnPending
        - failed.returnStarted
        - failed.returnComplete
        - failed.returnFailed
      description: >-
        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 BPN 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.
    Precursor:
      type: object
      oneOf:
        - $ref: '#/components/schemas/PrecursorDepositAddress'
        - $ref: '#/components/schemas/PrecursorVirtualAccount'
        - $ref: '#/components/schemas/PrecursorCashIn'
        - $ref: '#/components/schemas/PrecursorQuote'
        - $ref: '#/components/schemas/PrecursorManual'
      discriminator:
        propertyName: type
        mapping:
          depositAddress:
            $ref: '#/components/schemas/PrecursorDepositAddress'
          virtualAccount:
            $ref: '#/components/schemas/PrecursorVirtualAccount'
          cashIn:
            $ref: '#/components/schemas/PrecursorCashIn'
          quote:
            $ref: '#/components/schemas/PrecursorQuote'
          manual:
            $ref: '#/components/schemas/PrecursorManual'
      description: >-
        What created this transaction, carrying that origin's deposit
        instructions.

        Additive over the legacy
        `depositAddressId`/`virtualAccountId`/`cashInId` +

        `depositInstructions` fields, which it loosely supersedes.
    TransactionSide:
      type: object
      oneOf:
        - $ref: '#/components/schemas/WalletOmsInstrument'
        - $ref: '#/components/schemas/WalletExternalInstrument'
        - $ref: '#/components/schemas/WalletFiatInstrument'
        - $ref: '#/components/schemas/BankUsInstrument'
        - $ref: '#/components/schemas/BankIbanInstrument'
        - $ref: '#/components/schemas/BankCanadaInstrument'
        - $ref: '#/components/schemas/CardInstrument'
        - $ref: '#/components/schemas/CashInstrument'
      discriminator:
        propertyName: type
        mapping:
          walletOms:
            $ref: '#/components/schemas/WalletOmsInstrument'
          walletExternal:
            $ref: '#/components/schemas/WalletExternalInstrument'
          walletFiat:
            $ref: '#/components/schemas/WalletFiatInstrument'
          bankUs:
            $ref: '#/components/schemas/BankUsInstrument'
          bankIban:
            $ref: '#/components/schemas/BankIbanInstrument'
          bankCanada:
            $ref: '#/components/schemas/BankCanadaInstrument'
          card:
            $ref: '#/components/schemas/CardInstrument'
          cash:
            $ref: '#/components/schemas/CashInstrument'
      description: >-
        The source side of a transaction/quote (v0.10): a typed instrument
        carrying

        identity (`party`) and instrument detail. Amounts live only in
        `pricing`.
    TransactionDestination:
      type: object
      oneOf:
        - $ref: '#/components/schemas/WalletOmsDestination'
        - $ref: '#/components/schemas/WalletExternalDestination'
        - $ref: '#/components/schemas/WalletFiatDestination'
        - $ref: '#/components/schemas/BankUsDestination'
        - $ref: '#/components/schemas/BankIbanDestination'
        - $ref: '#/components/schemas/BankCanadaDestination'
        - $ref: '#/components/schemas/CardDestination'
        - $ref: '#/components/schemas/CashDestination'
      discriminator:
        propertyName: type
        mapping:
          walletOms:
            $ref: '#/components/schemas/WalletOmsDestination'
          walletExternal:
            $ref: '#/components/schemas/WalletExternalDestination'
          walletFiat:
            $ref: '#/components/schemas/WalletFiatDestination'
          bankUs:
            $ref: '#/components/schemas/BankUsDestination'
          bankIban:
            $ref: '#/components/schemas/BankIbanDestination'
          bankCanada:
            $ref: '#/components/schemas/BankCanadaDestination'
          card:
            $ref: '#/components/schemas/CardDestination'
          cash:
            $ref: '#/components/schemas/CashDestination'
      description: >-
        The destination side of a transaction/quote (v0.10): a typed instrument
        plus

        `payoutOrigin`. Amounts live only in `pricing`.
    Pricing:
      type: object
      properties:
        source:
          allOf:
            - $ref: '#/components/schemas/PricingSide'
          description: Economics for the source side, denominated in the source asset.
        destination:
          allOf:
            - $ref: '#/components/schemas/PricingSide'
          description: >-
            Economics for the destination side, denominated in the destination
            asset.
        pair:
          type: string
          description: Asset pair, e.g. "usdc/usd".
        exchangeRate:
          type: string
          description: >-
            Mid-market rate between source and destination assets. Identity:
            source.amountNet

            × exchangeRate = destination.amountGross.
        effectiveRate:
          type: string
          description: >-
            All-in rate including all fees. Identity: source.amountGross ×
            effectiveRate =

            destination.amountNet.
        fixedAmountSide:
          type: string
          enum:
            - source
            - destination
          description: >-
            The side you set `amount` on when creating the quote. OMS calculated
            the other side.
        sponsorGas:
          type: boolean
          description: >-
            When true, OMS absorbs the destination gas cost. Currently always
            true.
        sponsorGasCost:
          type: string
          description: >-
            Gas absorbed by the developer when sponsorGas is true. Currently
            always `0.00`.
      description: |-
        Consolidated economics for a quote/transaction: per-side amounts + fees,
        the rate pair, and gas sponsorship, all in one place.
    SettlementError:
      type: object
      required:
        - code
        - message
        - occurredAt
        - recoverable
      properties:
        code:
          type: string
          description: Machine-readable code.
        message:
          type: string
          description: Human-readable detail.
        occurredAt:
          type: string
          format: date-time
          description: When the error occurred.
        recoverable:
          type: boolean
          description: Whether the failure can be recovered.
        manualRecovery:
          allOf:
            - $ref: '#/components/schemas/ManualRecovery'
          description: >-
            Populated only for terminal failures with no resolved refund/return
            path (v0.11).
      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.
    Hold:
      type: object
      oneOf:
        - $ref: '#/components/schemas/HoldSenderAttribution'
        - $ref: '#/components/schemas/HoldDepositAddressFrozen'
        - $ref: '#/components/schemas/HoldDepositAddressInactive'
      discriminator:
        propertyName: type
        mapping:
          senderAttribution:
            $ref: '#/components/schemas/HoldSenderAttribution'
          depositAddressFrozen:
            $ref: '#/components/schemas/HoldDepositAddressFrozen'
          depositAddressInactive:
            $ref: '#/components/schemas/HoldDepositAddressInactive'
      description: >-
        Why an `awaitingAction` transaction is held, and the deadline to
        resolve.

        Discriminated by `type`; each arm carries the fields that apply.
    omsxProjectId:
      type: string
      pattern: ^prj_.+$
      description: Opaque OMSX project ID, e.g. `prj_01kpxxa7esk9a`.
      x-go-type: string
    PrecursorDepositAddress:
      type: object
      required:
        - type
        - details
      properties:
        type:
          type: string
          enum:
            - depositAddress
          description: Type discriminator.
        details:
          $ref: '#/components/schemas/PrecursorDepositAddressDetails'
      description: Created by a deposit address.
      title: Deposit address
    PrecursorVirtualAccount:
      type: object
      required:
        - type
        - details
      properties:
        type:
          type: string
          enum:
            - virtualAccount
          description: Type discriminator.
        details:
          $ref: '#/components/schemas/PrecursorVirtualAccountDetails'
      description: Created by a virtual account.
      title: Virtual account
    PrecursorCashIn:
      type: object
      required:
        - type
        - details
      properties:
        type:
          type: string
          enum:
            - cashIn
          description: Type discriminator.
        details:
          $ref: '#/components/schemas/PrecursorCashInDetails'
      description: Created by a cash-in.
      title: Cash-in
    PrecursorQuote:
      type: object
      required:
        - type
        - details
      properties:
        type:
          type: string
          enum:
            - quote
          description: Type discriminator.
        details:
          $ref: '#/components/schemas/PrecursorQuoteDetails'
      description: Created by accepting a quote.
      title: Quote
    PrecursorManual:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - manual
      description: >-
        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.
      title: Manual
    WalletOmsInstrument:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          allOf:
            - $ref: '#/components/schemas/Party'
          description: Structured identity of who is on this side.
        type:
          type: string
          enum:
            - walletOms
          description: Type discriminator.
        category:
          type: string
          enum:
            - crypto
          description: >-
            High-level grouping: `fiatAccount` for bank or card accounts,
            `crypto` for wallets.
        details:
          $ref: '#/components/schemas/WalletOmsDetails'
      description: OMS-custodied crypto wallet instrument.
      title: OMS wallet
    WalletExternalInstrument:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          $ref: '#/components/schemas/Party'
        type:
          type: string
          enum:
            - walletExternal
          description: Type discriminator.
        category:
          type: string
          enum:
            - crypto
          description: >-
            High-level grouping: `fiatAccount` for bank or card accounts,
            `crypto` for wallets.
        details:
          $ref: '#/components/schemas/WalletExternalDetails'
      description: Externally-custodied crypto wallet instrument.
      title: External wallet
    WalletFiatInstrument:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          $ref: '#/components/schemas/Party'
        type:
          type: string
          enum:
            - walletFiat
          description: Type discriminator.
        category:
          type: string
          enum:
            - fiatAccount
          description: >-
            High-level grouping: `fiatAccount` for bank or card accounts,
            `crypto` for wallets.
        details:
          $ref: '#/components/schemas/WalletFiatInstrumentDetails'
      description: |-
        Fiat balance wallet instrument — a USD balance held at a partner bank
        (Erebor Bank, N.A.). No network or on-chain address; an internal ledger.
      title: Fiat wallet
    BankUsInstrument:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          $ref: '#/components/schemas/Party'
        type:
          type: string
          enum:
            - bankUs
          description: Type discriminator.
        category:
          type: string
          enum:
            - fiatAccount
          description: >-
            High-level grouping: `fiatAccount` for bank or card accounts,
            `crypto` for wallets.
        details:
          $ref: '#/components/schemas/BankUsDetails'
      description: US bank account instrument.
      title: US bank account
    BankIbanInstrument:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          $ref: '#/components/schemas/Party'
        type:
          type: string
          enum:
            - bankIban
          description: Type discriminator.
        category:
          type: string
          enum:
            - fiatAccount
          description: >-
            High-level grouping: `fiatAccount` for bank or card accounts,
            `crypto` for wallets.
        details:
          $ref: '#/components/schemas/BankIbanDetails'
      description: IBAN bank account instrument.
      title: IBAN bank account
    BankCanadaInstrument:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          $ref: '#/components/schemas/Party'
        type:
          type: string
          enum:
            - bankCanada
          description: Type discriminator.
        category:
          type: string
          enum:
            - fiatAccount
          description: >-
            High-level grouping: `fiatAccount` for bank or card accounts,
            `crypto` for wallets.
        details:
          $ref: '#/components/schemas/BankCanadaDetails'
      description: Canadian bank account instrument.
      title: Canadian bank account
    CardInstrument:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          $ref: '#/components/schemas/Party'
        type:
          type: string
          enum:
            - card
          description: Type discriminator.
        category:
          type: string
          enum:
            - fiatAccount
          description: >-
            High-level grouping: `fiatAccount` for bank or card accounts,
            `crypto` for wallets.
        details:
          $ref: '#/components/schemas/CardDetails'
      description: Card instrument.
      title: Card
    CashInstrument:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          $ref: '#/components/schemas/Party'
        type:
          type: string
          enum:
            - cash
          description: Type discriminator.
        category:
          type: string
          enum:
            - cash
          description: 'High-level grouping: always `cash` for cash pickups and drops.'
        details:
          $ref: '#/components/schemas/CashDetails'
      description: Cash instrument.
      title: Cash
    WalletOmsDestination:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          allOf:
            - $ref: '#/components/schemas/Party'
          description: Structured identity of who is on this side.
        type:
          type: string
          enum:
            - walletOms
          description: Type discriminator.
        category:
          type: string
          enum:
            - crypto
          description: >-
            High-level grouping: `fiatAccount` for bank or card accounts,
            `crypto` for wallets.
        details:
          $ref: '#/components/schemas/WalletOmsDetails'
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
      title: OMS wallet
    WalletExternalDestination:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          $ref: '#/components/schemas/Party'
        type:
          type: string
          enum:
            - walletExternal
          description: Type discriminator.
        category:
          type: string
          enum:
            - crypto
          description: >-
            High-level grouping: `fiatAccount` for bank or card accounts,
            `crypto` for wallets.
        details:
          $ref: '#/components/schemas/WalletExternalDetails'
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
      title: External wallet
    WalletFiatDestination:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          $ref: '#/components/schemas/Party'
        type:
          type: string
          enum:
            - walletFiat
          description: Type discriminator.
        category:
          type: string
          enum:
            - fiatAccount
          description: >-
            High-level grouping: `fiatAccount` for bank or card accounts,
            `crypto` for wallets.
        details:
          $ref: '#/components/schemas/WalletFiatInstrumentDetails'
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
      description: >-
        Fiat balance wallet destination — the wallet-as-destination projection
        used to

        render an inbound fiat-wallet deposit (design §4.2/§16, #2363).
        RENDERING

        OUTPUT ONLY: this arm exists so a settled deposit into a customer's USD
        fiat

        wallet renders `destination.walletFiat`. It does NOT re-open walletFiat
        as a

        user-SPECIFIABLE input destination — that input deferral (crediting
        VA/DA

        deposits into a wallet, design §16) still holds; only the output shape
        is

        restored here. Over-cut from Task 1 (#2340); returned for Task 10.
      title: Fiat wallet
    BankUsDestination:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          $ref: '#/components/schemas/Party'
        type:
          type: string
          enum:
            - bankUs
          description: Type discriminator.
        category:
          type: string
          enum:
            - fiatAccount
          description: >-
            High-level grouping: `fiatAccount` for bank or card accounts,
            `crypto` for wallets.
        details:
          $ref: '#/components/schemas/BankUsDetails'
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
      title: US bank account
    BankIbanDestination:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          $ref: '#/components/schemas/Party'
        type:
          type: string
          enum:
            - bankIban
          description: Type discriminator.
        category:
          type: string
          enum:
            - fiatAccount
          description: >-
            High-level grouping: `fiatAccount` for bank or card accounts,
            `crypto` for wallets.
        details:
          $ref: '#/components/schemas/BankIbanDetails'
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
      title: IBAN bank account
    BankCanadaDestination:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          $ref: '#/components/schemas/Party'
        type:
          type: string
          enum:
            - bankCanada
          description: Type discriminator.
        category:
          type: string
          enum:
            - fiatAccount
          description: >-
            High-level grouping: `fiatAccount` for bank or card accounts,
            `crypto` for wallets.
        details:
          $ref: '#/components/schemas/BankCanadaDetails'
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
      title: Canadian bank account
    CardDestination:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          $ref: '#/components/schemas/Party'
        type:
          type: string
          enum:
            - card
          description: Type discriminator.
        category:
          type: string
          enum:
            - fiatAccount
          description: >-
            High-level grouping: `fiatAccount` for bank or card accounts,
            `crypto` for wallets.
        details:
          $ref: '#/components/schemas/CardDetails'
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
      title: Card
    CashDestination:
      type: object
      required:
        - type
        - category
        - details
      properties:
        party:
          $ref: '#/components/schemas/Party'
        type:
          type: string
          enum:
            - cash
          description: Type discriminator.
        category:
          type: string
          enum:
            - cash
          description: 'High-level grouping: always `cash` for cash pickups and drops.'
        details:
          $ref: '#/components/schemas/CashDetails'
        payoutOrigin:
          $ref: '#/components/schemas/PayoutOrigin'
      title: Cash
    PricingSide:
      type: object
      properties:
        asset:
          type: string
          description: >-
            Currency these amounts are in. Same as the side's instrument asset,
            repeated here

            so pricing is self-contained.
        amountGross:
          type: string
          description: Amount on this side before fees are applied.
        amountNet:
          type: string
          description: >-
            Amount after fees: what is actually pulled from a source, or
            delivered to a destination.
        feesDeducted:
          allOf:
            - $ref: '#/components/schemas/FeesDeducted'
          description: Itemized fees deducted on this side.
      description: |-
        Per-side economics for the `pricing` object: the side carries identity,
        the amounts and fees live here.
    ManualRecovery:
      type: object
      properties:
        type:
          type: string
          enum:
            - manualRecovery
        custodian:
          $ref: '#/components/schemas/DestinationCustodian'
        instructions:
          type: string
        referenceFields:
          $ref: '#/components/schemas/RecoveryReferenceFields'
      description: v0.11 manual-recovery detail (renamed from Recovery/operatorRecovery).
    HoldSenderAttribution:
      type: object
      required:
        - type
      properties:
        required:
          type: boolean
          description: Whether the hold is still blocking; false once resolved.
        since:
          type: string
          format: date-time
          description: When the hold started.
        deadline:
          type: string
          format: date-time
          description: Deadline to resolve before timeout.
        resolvedAt:
          type: string
          format: date-time
          description: When the hold was resolved; null while outstanding.
        type:
          type: string
          enum:
            - senderAttribution
          description: Type discriminator.
        txHash:
          type: string
          description: The transaction hash of the unattributed inbound deposit.
        matchableExternalAccountCriteria:
          allOf:
            - $ref: '#/components/schemas/MatchableExternalAccountCriteria'
          description: Registering a matching walletExternal EA releases this hold.
      description: DA received crypto from an address not linked to a counterparty.
      title: Sender attribution
    HoldDepositAddressFrozen:
      type: object
      required:
        - type
      properties:
        required:
          type: boolean
          description: Whether the hold is still blocking; false once resolved.
        since:
          type: string
          format: date-time
          description: When the hold started.
        deadline:
          type: string
          format: date-time
          description: Deadline to resolve before timeout.
        resolvedAt:
          type: string
          format: date-time
          description: When the hold was resolved; null while outstanding.
        type:
          type: string
          enum:
            - depositAddressFrozen
          description: Type discriminator.
      description: The parent deposit address is in a compliance freeze.
      title: Deposit address frozen
    HoldDepositAddressInactive:
      type: object
      required:
        - type
      properties:
        required:
          type: boolean
          description: Whether the hold is still blocking; false once resolved.
        since:
          type: string
          format: date-time
          description: When the hold started.
        deadline:
          type: string
          format: date-time
          description: Deadline to resolve before timeout.
        resolvedAt:
          type: string
          format: date-time
          description: When the hold was resolved; null while outstanding.
        type:
          type: string
          enum:
            - depositAddressInactive
          description: Type discriminator.
        cause:
          $ref: '#/components/schemas/HoldInactiveCause'
      description: The destination external account went deleted/invalid.
      title: Deposit address inactive
    PrecursorDepositAddressDetails:
      type: object
      required:
        - depositAddressId
      properties:
        depositAddressId:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: Deposit Address ID (`da_` prefix).
        depositInstructions:
          $ref: '#/components/schemas/DepositAddressDepositInstructions'
      description: >-
        depositAddress origin payload: the DA id + its on-chain inlet
        instructions.
    PrecursorVirtualAccountDetails:
      type: object
      required:
        - virtualAccountId
      properties:
        virtualAccountId:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: Virtual Account ID (`va_` prefix).
        depositInstructions:
          $ref: '#/components/schemas/VirtualAccountInstructions'
      description: 'virtualAccount origin payload: the VA id + its bank routing block(s).'
    PrecursorCashInDetails:
      type: object
      required:
        - cashInId
      properties:
        cashInId:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: Cash-in ID (`ci_` prefix).
        depositInstructions:
          $ref: '#/components/schemas/CashInDepositInstructions'
        expiresAt:
          type: string
          format: date-time
          description: >-
            When the cash-in deposit code expires. Mirrors the originating
            cash-in's

            top-level expiresAt (#2144: the per-instruction expiresAt was
            removed).
      description: >-
        cashIn origin payload: the cash-in id + the retail deposit code +
        location.
    PrecursorQuoteDetails:
      type: object
      required:
        - quoteId
      properties:
        quoteId:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: Quote ID (`qt_` prefix).
      description: 'quote origin payload: the quote id (no deposit instructions).'
    Party:
      type: object
      oneOf:
        - $ref: '#/components/schemas/PartyCustomer'
        - $ref: '#/components/schemas/PartyOtherCustomer'
        - $ref: '#/components/schemas/PartyExternalRegistered'
        - $ref: '#/components/schemas/PartyExternalUnregistered'
      discriminator:
        propertyName: relationship
        mapping:
          customer:
            $ref: '#/components/schemas/PartyCustomer'
          otherCustomer:
            $ref: '#/components/schemas/PartyOtherCustomer'
          externalRegistered:
            $ref: '#/components/schemas/PartyExternalRegistered'
          externalUnregistered:
            $ref: '#/components/schemas/PartyExternalUnregistered'
    WalletOmsDetails:
      type: object
      properties:
        id:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: >-
            Internal OMS wallet (`wlt_` prefix; legacy `acc_` also accepted on
            input).
        asset:
          type: string
          description: Canonical asset identifier.
        network:
          type: string
          description: Network identifier.
        blockchainAddress:
          type: string
          description: On-chain address.
        custodyType:
          type: string
          enum:
            - custodial
            - embedded
          description: 'How the wallet is held: `custodial` or `embedded`.'
        txHash:
          type: string
          description: On-chain transaction hash.
        blockchainAsset:
          allOf:
            - $ref: '#/components/schemas/BlockchainAsset'
          description: >-
            BPN extension: resolved on-chain asset identity
            (protocol/chainId/tokenId).
      description: 'WalletOms instrument details: an OMS-custodied crypto wallet.'
    WalletExternalDetails:
      type: object
      properties:
        id:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: Unique identifier.
        asset:
          type: string
          description: Canonical asset identifier.
        network:
          type: string
          description: Network identifier.
        blockchainAddress:
          type: string
          description: On-chain address.
        custodian:
          type: string
          description: Custodian holding the funds.
        otherCustodian:
          type: string
          description: Free-text custodian name when `custodian` is `other`.
        txHash:
          type: string
          description: On-chain transaction hash.
        blockchainAsset:
          allOf:
            - $ref: '#/components/schemas/BlockchainAsset'
          description: >-
            BPN extension: resolved on-chain asset identity
            (protocol/chainId/tokenId).
      description: >-
        WalletExternal instrument details: a crypto wallet held in external
        custody.
    WalletFiatInstrumentDetails:
      type: object
      properties:
        id:
          type: string
          description: >-
            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:
          type: string
          enum:
            - usd
          description: Fiat currency of the balance. Only `usd` today.
        provider:
          type: string
          description: >-
            Legal entity holding the balance (e.g. "Erebor Bank, N.A.").
            Read-only.
      description: >-
        WalletFiat instrument details: a fiat balance wallet held at a partner
        bank

        (e.g. USD at Erebor Bank, N.A.). No network or on-chain address — an

        internal ledger balance.
    BankUsDetails:
      type: object
      properties:
        id:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: Unique identifier.
        asset:
          type: string
          enum:
            - usd
          description: Canonical asset identifier.
        network:
          type: string
          enum:
            - ach
            - achSameDay
            - wire
            - rtp
          description: Network identifier.
        secCode:
          allOf:
            - $ref: '#/components/schemas/SecCode'
          description: ACH SEC code (populated only on ach/achSameDay).
        accountNumberLast4:
          type: string
          description: Last four digits of the account number.
        routingNumber:
          type: string
          description: US ABA routing number.
        bankName:
          type: string
          description: Bank display name.
        accountType:
          type: string
          enum:
            - checking
            - savings
          description: checking or savings.
        memo:
          type: string
          description: Payment memo.
      description: US bank account instrument details.
    BankIbanDetails:
      type: object
      properties:
        id:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: Unique identifier.
        asset:
          type: string
          description: Canonical asset identifier.
        network:
          type: string
          enum:
            - swift
          description: Network identifier.
        ibanLast4:
          type: string
          description: Last four characters of the IBAN.
        BIC:
          type: string
          description: SWIFT BIC.
        bankAddress:
          $ref: '#/components/schemas/Address'
        countryCode:
          type: string
          description: ISO 3166-1 alpha-2 country code.
        memo:
          type: string
          description: Payment memo.
      description: IBAN bank account instrument details.
    BankCanadaDetails:
      type: object
      properties:
        id:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: Unique identifier.
        asset:
          type: string
          enum:
            - usd
            - cad
          description: Canonical asset identifier.
        network:
          type: string
          enum:
            - swift
            - local
          description: Network identifier.
        institutionNumber:
          type: string
          description: Canadian 3-digit institution number.
        transitNumber:
          type: string
          description: Canadian 5-digit transit number.
        accountNumberLast4:
          type: string
          description: Last four digits of the account number.
        bankName:
          type: string
          description: Bank display name.
        memo:
          type: string
          description: Payment memo.
      description: Canadian bank account instrument details.
    CardDetails:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier.
        asset:
          type: string
          enum:
            - usd
          description: Canonical asset identifier.
        network:
          type: string
          enum:
            - card
          description: Network identifier.
        cardNumberLast4:
          type: string
          description: Last four digits of the card number.
        cardProvider:
          type: string
          description: Card network/provider.
        memo:
          type: string
          description: Payment memo.
      description: Card instrument details.
    CashDetails:
      type: object
      properties:
        asset:
          type: string
          description: Canonical asset identifier.
        cashLocationId:
          type: string
          description: Cash location ID from `GET /cash-locations`.
        cashLocationReference:
          type: string
          description: Provider reference for the location, from `GET /cash-locations`.
        pickupCode:
          type: string
          description: >-
            Retail pickup code for a cash payout. Populated only on the cash-out
            (pickup) side.
        expiresAt:
          type: string
          format: date-time
          description: Pickup-code expiry. Populated only on the cash-out (pickup) side.
        locationName:
          type: string
          description: >-
            Display name of the retail pickup location. Populated only on the
            cash-out (pickup) side.
        locationAddress:
          type: string
          description: >-
            Street address of the retail pickup location. Populated only on the
            cash-out (pickup) side.
      description: Cash pickup/drop instrument details.
    PayoutOrigin:
      type: object
      oneOf:
        - $ref: '#/components/schemas/PayoutOriginBank'
        - $ref: '#/components/schemas/PayoutOriginBlockchain'
      discriminator:
        propertyName: type
        mapping:
          bank:
            $ref: '#/components/schemas/PayoutOriginBank'
          blockchain:
            $ref: '#/components/schemas/PayoutOriginBlockchain'
      description: >-
        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

        Erebor, so the field is forward-compatible but single-valued.
    FeesDeducted:
      type: object
      required:
        - total
        - developer
        - oms
        - gas
      properties:
        total:
          type: string
        developer:
          type: string
          description: |-
            Per-side aggregated developer fee total in this side's asset.
            Always "0" in alpha - alpha invariant, mirrors the gas line.
        oms:
          type: string
        gas:
          type: string
      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.
    DestinationCustodian:
      type: string
      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
    RecoveryReferenceFields:
      type: object
      properties:
        transactionId:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: Transaction ID (`txn_` prefix).
        sourceTxHash:
          type: string
          description: Transaction hash of the originating inbound transfer.
      description: Reference identifiers for an operator-driven recovery.
    MatchableExternalAccountCriteria:
      type: object
      properties:
        type:
          type: string
          enum:
            - walletExternal
          description: Always `walletExternal` — the EA type that resolves the hold.
        customerId:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: The OMS customer that owns this record (`cst_` prefix).
        blockchainAddress:
          type: string
          description: On-chain address.
        networkFamily:
          type: string
          description: Network family (e.g. evm).
      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.
    HoldInactiveCause:
      type: object
      properties:
        type:
          type: string
          enum:
            - destinationExternalAccount
          description: Always `destinationExternalAccount`.
        externalAccountId:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: External Account ID (`ext_` prefix).
        externalAccountStatus:
          $ref: '#/components/schemas/ExternalAccountStatusReason'
        invalidReason:
          type: string
          description: Machine-readable reason the destination became invalid.
      description: >-
        Why a depositAddressInactive hold's destination external account went
        unusable.
    DepositAddressDepositInstructions:
      type: object
      required:
        - asset
        - network
        - address
      properties:
        asset:
          type: string
          description: Same value as expectedSourceAsset.
        network:
          type: string
          description: Same value as expectedSourceNetwork.
        address:
          type: string
          description: Erebor-owned on-chain inlet address for this DA.
        expiresAt:
          type: string
          format: date-time
          description: >-
            Placeholder for a future provider-imposed inlet expiry. Null for
            Erebor

            DDAs today; surfaced now so adding it later is not a breaking
            change.
      description: The on-chain address senders deposit to, with its asset and network.
    VirtualAccountInstructions:
      type: object
      properties:
        bankUs:
          type: array
          items:
            $ref: '#/components/schemas/BankRoutingBlock'
      description: >-
        Spec-mandated (v0.11/v0.11) VA deposit-instructions wrapper. bankUs
        holds

        zero, one, or two routing blocks (domestic + SWIFT), depending on which

        incoming rails the partner has enabled.
    CashInDepositInstructions:
      type: object
      required:
        - cashInCode
      properties:
        cashInCode:
          type: string
          description: Machine-readable code the customer presents at the register.
        locationName:
          type: string
          description: Display name of the retail location.
        locationAddress:
          type: string
          description: Street address of the retail location.
      description: >-
        The deposit code and retail location a customer uses to complete a
        cash-in.
    PartyCustomer:
      type: object
      required:
        - relationship
        - customerId
      properties:
        relationship:
          type: string
          enum:
            - customer
          description: Relationship discriminator.
        entityType:
          $ref: '#/components/schemas/OwnerType'
        customerId:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: The OMS customer that owns this record (`cst_` prefix).
      description: The owning OMS customer is on this side.
      title: Customer
    PartyOtherCustomer:
      type: object
      required:
        - relationship
        - customerId
      properties:
        relationship:
          type: string
          enum:
            - otherCustomer
          description: Relationship discriminator.
        entityType:
          $ref: '#/components/schemas/OwnerType'
        customerId:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: The OMS customer that owns this record (`cst_` prefix).
        name:
          type: string
          nullable: true
          description: Display name.
      description: A different OMS customer is on this side.
      title: Another customer
    PartyExternalRegistered:
      type: object
      required:
        - relationship
        - counterpartyId
      properties:
        relationship:
          type: string
          enum:
            - externalRegistered
          description: Relationship discriminator.
        entityType:
          $ref: '#/components/schemas/OwnerType'
        counterpartyId:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: Counterparty ID (`ctp_` prefix).
        name:
          type: string
          nullable: true
          description: Display name.
        address:
          type: object
          allOf:
            - $ref: '#/components/schemas/Address'
          nullable: true
          description: Postal address.
      description: A registered counterparty (saved third party) is on this side.
      title: Registered external account
    PartyExternalUnregistered:
      type: object
      required:
        - relationship
      properties:
        relationship:
          type: string
          enum:
            - externalUnregistered
          description: Relationship discriminator.
        name:
          type: string
          nullable: true
          description: Display name.
        address:
          type: object
          allOf:
            - $ref: '#/components/schemas/Address'
          nullable: true
          description: Postal address.
      description: >-
        An unrecognized external party (no saved record) is on this side. There
        is no

        OMS record behind it, so it carries no entityType.
      title: Unregistered external account
    BlockchainAsset:
      type: object
      required:
        - protocol
        - chainId
        - tokenId
      properties:
        protocol:
          $ref: '#/components/schemas/BlockchainProtocol'
        chainId:
          type: string
        tokenId:
          type: string
    SecCode:
      type: string
      enum:
        - ccd
        - ppd
        - web
      description: >-
        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`.
    Address:
      type: object
      properties:
        line1:
          type: string
          description: Street address, line 1.
        line2:
          type: string
          description: Street address, line 2.
        city:
          type: string
          description: City.
        state:
          type: string
          description: State / province / region.
        country:
          type: string
          description: ISO 3166-1 alpha-2
        zipCode:
          type: string
          description: ZIP / postal code.
      description: A postal address. country is an ISO 3166-1 alpha-2 country code.
    PayoutOriginBank:
      type: object
      required:
        - type
        - details
      properties:
        type:
          type: string
          enum:
            - bank
          description: Type discriminator.
        details:
          $ref: '#/components/schemas/PayoutOriginBankDetails'
      description: >-
        Payout originates from a bank account. v0.10 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).
      title: Bank
    PayoutOriginBlockchain:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - blockchain
          description: Type discriminator.
        blockchainAddress:
          type: string
          description: On-chain address.
        network:
          type: string
          description: Network identifier.
        txHash:
          type: string
          description: On-chain transaction hash.
        custodian:
          type: string
          description: Custodian holding the funds.
      description: Payout originates from an on-chain address.
      title: Blockchain
    ExternalAccountStatusReason:
      type: string
      enum:
        - deleted
        - invalid
    BankRoutingBlock:
      type: object
      required:
        - bankName
        - bankAddress
        - accountNumber
        - routingNumber
        - accountType
        - BIC
        - beneficiary
        - memo
      properties:
        supportedSources:
          type: array
          items:
            $ref: '#/components/schemas/AssetNetworkPair'
          description: Asset/network pairs this routing block accepts deposits for.
        bankName:
          type: string
        bankAddress:
          type: string
        accountNumber:
          type: string
        routingNumber:
          type: string
          nullable: true
          description: US domestic only; null for SWIFT.
        accountType:
          type: string
          nullable: true
          description: US domestic only; null for SWIFT. Always "checking" when present.
        BIC:
          type: string
          nullable: true
          description: SWIFT only; null for US domestic.
        beneficiary:
          $ref: '#/components/schemas/BankRoutingBlockBeneficiary'
        memo:
          type: string
          nullable: true
          description: |-
            SWIFT only; null for US domestic. OMS-generated:
            "FFC <customerName> <ereborDdaAccountNumber>".
      description: >-
        One bank-routing entry within VirtualAccountInstructions.bankUs.
        US-domestic

        fields (routingNumber, accountType) are null on a SWIFT entry;
        SWIFT-only

        fields (BIC, memo) are null on a domestic entry.
    OwnerType:
      type: string
      enum:
        - individual
        - business
    BlockchainProtocol:
      type: string
      enum:
        - evm
        - svm
        - sui
    PayoutOriginBankDetails:
      type: object
      properties:
        accountHolder:
          $ref: '#/components/schemas/AccountHolder'
        accountHolderName:
          type: string
          description: Name of the sending account holder.
        accountNumber:
          type: string
          nullable: true
          description: Bank account number.
        routingNumber:
          type: string
          nullable: true
          description: US ABA routing number.
        virtualAccountId:
          type: string
          allOf:
            - $ref: '#/components/schemas/typeId'
          nullable: true
          description: Virtual Account ID (`va_` prefix).
      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.
    AssetNetworkPair:
      type: object
      required:
        - asset
        - network
      properties:
        asset:
          type: string
        network:
          type: string
      description: 'One (asset, network) tuple — e.g. `{ asset: "usd", network: "ach" }`.'
    BankRoutingBlockBeneficiary:
      type: object
      required:
        - name
        - address
      properties:
        name:
          type: string
        address:
          type: string
      description: |-
        Beneficiary on a bank routing block - the entity to which the funds
        are ultimately credited. For SWIFT this is Erebor (the bank);
        for domestic rails this is the customer. Response-only,
        system-synthesised (Erebor entity or customer counterparty). The address
        is a single formatted display line (spec §BankRoutingBlock), e.g.
        "6 Acme Way, Bentonville, AR 72712 US".
    AccountHolder:
      type: string
      enum:
        - customer
      description: >-
        Who holds the payout bank account (OMS closed enum). `customer` is the
        only

        valid value.
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Token from POST /auth/token

````