> ## 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 all Virtual Accounts

> List all Virtual Accounts across the organization. Spans every customer
in the caller's organization; optionally filter by status and/or customer.



## OpenAPI

````yaml /api-reference/openapi.yaml get /virtual-accounts
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.12
    description: Sandbox
  - url: https://api.polygon.technology/v0.12
    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: Reference
  - name: DepositAddress
paths:
  /virtual-accounts:
    get:
      tags:
        - VirtualAccount
      summary: List all Virtual Accounts
      description: >-
        List all Virtual Accounts across the organization. Spans every customer

        in the caller's organization; optionally filter by status and/or
        customer.
      operationId: listVirtualAccounts
      parameters:
        - $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:
            $ref: '#/components/schemas/VirtualAccountStatus'
        - name: customerId
          in: query
          required: false
          description: Filter to a single customer (`cst_` prefix).
          schema:
            type: string
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualAccountList'
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:
    VirtualAccountStatus:
      type: string
      enum:
        - pending
        - active
        - frozen
        - closed
        - deleted
        - failed
        - inactiveActionRequired
      description: >-
        Lifecycle of a Virtual Account. pending: awaiting bank provisioning.
        active: accepting

        deposits. frozen: deposits held by compliance. inactiveActionRequired:
        destination unusable -

        re-point `destination` to recover. closed: permanently disabled.
        deleted: close flow finalized.

        failed: provisioning failed.
    VirtualAccountList:
      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/VirtualAccount'
          description: The page of results.
      description: Paginated list of VirtualAccount resources.
    VirtualAccount:
      type: object
      properties:
        id:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: Virtual Account ID (`va_` prefix).
        object:
          type: string
          enum:
            - virtualAccount
          description: Resource type discriminator. Always "virtualAccount".
        customerId:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: The OMS customer that owns this record (`cst_` prefix).
        customer:
          allOf:
            - $ref: '#/components/schemas/CustomerSummary'
          description: |-
            Resolved id + display name of the owning customer, so list/detail
            rendering needs no follow-up customer fetch (v0.12, #2665).
        status:
          allOf:
            - $ref: '#/components/schemas/VirtualAccountStatus'
          description: Current lifecycle status of the virtual account.
        sourceToDestination:
          allOf:
            - $ref: '#/components/schemas/SourceToDestination'
          description: >-
            Corridor composite derived from the destination type —
            `fiatAccountToCrypto`

            for a crypto-wallet destination (inbound fiat auto-converts), or

            `fiatAccountToFiatAccount` for a bank or walletFiat destination
            (inbound

            USD forwarded onward — the same token for both; walletFiat
            introduces no

            new corridor).
        statusReason:
          type: string
          description: Human-readable explanation of the current status.
        source:
          allOf:
            - $ref: '#/components/schemas/VirtualAccountSource'
          description: Expected inbound rail detail.
        depositInstructions:
          allOf:
            - $ref: '#/components/schemas/VirtualAccountInstructions'
          description: Null until Erebor provisions the DDA (DEPOSIT_ACCOUNT.OPEN).
        destination:
          allOf:
            - $ref: '#/components/schemas/TransactionSide'
          description: 'V0.10: unified side shape.'
        returnDestination:
          allOf:
            - $ref: '#/components/schemas/FiatReturnDestination'
          description: >-
            The configured fiat return destination (v0.11-8) for failed outbound

            legs; absent/null when none is set (the project return policy
            applies

            instead, once T13 wires the waterfall).
        sponsorGas:
          type: boolean
          description: >-
            Whether OMS absorbs the on-chain gas cost for the destination
            delivery.

            Persisted from the create/update request (currently only `true` is

            accepted).
        bankMemo:
          type: string
          description: Wire/ACH memo the customer can include with deposits.
        label:
          type: string
          description: Partner display label.
        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 virtual account was created.
        updatedAt:
          type: string
          format: date-time
          description: When the virtual account was last updated.
        failureReason:
          allOf:
            - $ref: '#/components/schemas/VirtualAccountFailureReason'
          description: >-
            Set when status = `failed`; closed enum identifying the failure
            category.
        deletionRequestedAt:
          type: string
          format: date-time
          description: >-
            Set when DELETE has been requested but the close webhook has not yet
            finalized.
        deletionRequestedBy:
          type: string
          description: Identity (JWT subject claim) of the caller who invoked DELETE.
        finalBalance:
          allOf:
            - $ref: '#/components/schemas/AmountObject'
          description: DDA balance snapshot at the moment the VA flipped to `deleted`.
      description: >-
        A dedicated bank account number issued for a customer. Inbound fiat
        deposits are

        automatically converted and delivered to the configured destination,
        creating a

        transaction per deposit.
    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
    CustomerSummary:
      type: object
      required:
        - id
        - name
      properties:
        id:
          allOf:
            - $ref: '#/components/schemas/typeId'
          description: The OMS customer id (`cst_` prefix).
        name:
          type: string
          description: Customer display name.
      description: >-
        A minimal, resolved reference to the owning OMS customer — id plus
        display

        name, for list/detail rendering without a follow-up customer fetch

        (v0.12 list enrichment, #2665). Distinct from `Party`: this is always
        the

        record's OWNING customer (Transaction.customerId /
        VirtualAccount.customerId

        / DepositAddress.customerId), not whichever side a party sits on.
    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.
    VirtualAccountSource:
      type: object
      required:
        - asset
        - network
      properties:
        asset:
          type: string
          description: 'Fixed for Alpha: "usd".'
        network:
          type: string
          description: 'Fixed for Alpha: "usBank".'
      description: >-
        Expected inbound rail for the virtual account: fiat asset and bank
        network.
    VirtualAccountInstructions:
      type: object
      properties:
        bankUs:
          type: array
          items:
            $ref: '#/components/schemas/BankRoutingBlock'
      description: >-
        Spec-mandated (v0.11/v0.12) VA deposit-instructions wrapper. bankUs
        holds

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

        incoming rails the partner has enabled.
    TransactionSide:
      type: object
      oneOf:
        - $ref: '#/components/schemas/WalletCryptoInstrument'
        - $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:
          walletCrypto:
            $ref: '#/components/schemas/WalletCryptoInstrument'
          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`.
    FiatReturnDestination:
      type: object
      oneOf:
        - $ref: '#/components/schemas/FiatReturnDestinationBankUs'
        - $ref: '#/components/schemas/FiatReturnDestinationBankIban'
        - $ref: '#/components/schemas/FiatReturnDestinationBankCanada'
        - $ref: '#/components/schemas/FiatReturnDestinationWalletFiat'
      discriminator:
        propertyName: type
        mapping:
          bankUs:
            $ref: '#/components/schemas/FiatReturnDestinationBankUs'
          bankIban:
            $ref: '#/components/schemas/FiatReturnDestinationBankIban'
          bankCanada:
            $ref: '#/components/schemas/FiatReturnDestinationBankCanada'
          walletFiat:
            $ref: '#/components/schemas/FiatReturnDestinationWalletFiat'
      description: >-
        Where inbound fiat is returned when its outbound leg can't be completed

        (v0.11-8). Pick a `type`: a bank account (`bankUs` / `bankIban` /

        `bankCanada`, each with a required `network` naming the rail) or a fiat

        balance wallet (`walletFiat` — no network, internal ledger). Shared by
        the

        Virtual Account `returnDestination` and (later) the return policy's

        `fiat.returnDestinations`. `walletFiat`, and `bankCanada` with a `local`

        network (CAD), are rejected with 422 `railNotSupported` in v1 — bank
        rails

        (USD) only.
    VirtualAccountFailureReason:
      type: string
      enum:
        - provisioningTimeout
        - systemError
        - ereborRejected
        - deletePendingTimeout
      description: >-
        Closed enum stamped by failVA when a VA flips to terminal `failed`
        state.
    AmountObject:
      type: object
      required:
        - value
        - currency
        - display
      properties:
        value:
          allOf:
            - $ref: '#/components/schemas/int64String'
          description: Amount in fiat minor units (e.g. cents).
        currency:
          type: string
          description: ISO 4217 currency code.
        display:
          type: string
          description: Human-readable rendering (e.g. "12.34 USD").
      description: >-
        Single-amount snapshot - value in minor units, plus the currency code
        and

        a human-readable display string. Used wherever the API exposes a
        one-shot

        amount (e.g. virtualAccount.finalBalance), as distinct from balance
        shapes

        with available/pending/reserved components.
    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.
    WalletCryptoInstrument:
      type: object
      required:
        - type
        - category
        - details
        - displayName
      properties:
        party:
          allOf:
            - $ref: '#/components/schemas/Party'
          description: Structured identity of who is on this side.
        type:
          type: string
          enum:
            - walletCrypto
          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/WalletCryptoDetails'
        displayName:
          type: string
          description: >-
            Opaque, render-only summary of this instrument for list/detail
            display

            (v0.12, #2665) — format is not contractual and may change without a

            version bump. Never a full account number/IBAN/PAN.
      description: OMS-custodied crypto wallet instrument.
      title: OMS wallet
    WalletExternalInstrument:
      type: object
      required:
        - type
        - category
        - details
        - displayName
      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'
        displayName:
          type: string
          description: >-
            Opaque, render-only summary of this instrument for list/detail
            display

            (v0.12, #2665) — format is not contractual and may change without a

            version bump. Never a full account number/IBAN/PAN.
      description: Externally-custodied crypto wallet instrument.
      title: External wallet
    WalletFiatInstrument:
      type: object
      required:
        - type
        - category
        - details
        - displayName
      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'
        displayName:
          type: string
          description: >-
            Opaque, render-only summary of this instrument for list/detail
            display

            (v0.12, #2665) — format is not contractual and may change without a

            version bump. Never a full account number/IBAN/PAN.
      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
        - displayName
      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'
        displayName:
          type: string
          description: >-
            Opaque, render-only summary of this instrument for list/detail
            display

            (v0.12, #2665) — format is not contractual and may change without a

            version bump. Never a full account number/IBAN/PAN.
      description: US bank account instrument.
      title: US bank account
    BankIbanInstrument:
      type: object
      required:
        - type
        - category
        - details
        - displayName
      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'
        displayName:
          type: string
          description: >-
            Opaque, render-only summary of this instrument for list/detail
            display

            (v0.12, #2665) — format is not contractual and may change without a

            version bump. Never a full account number/IBAN/PAN.
      description: IBAN bank account instrument.
      title: IBAN bank account
    BankCanadaInstrument:
      type: object
      required:
        - type
        - category
        - details
        - displayName
      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'
        displayName:
          type: string
          description: >-
            Opaque, render-only summary of this instrument for list/detail
            display

            (v0.12, #2665) — format is not contractual and may change without a

            version bump. Never a full account number/IBAN/PAN.
      description: Canadian bank account instrument.
      title: Canadian bank account
    CardInstrument:
      type: object
      required:
        - type
        - category
        - details
        - displayName
      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'
        displayName:
          type: string
          description: >-
            Opaque, render-only summary of this instrument for list/detail
            display

            (v0.12, #2665) — format is not contractual and may change without a

            version bump. Never a full account number/IBAN/PAN.
      description: Card instrument.
      title: Card
    CashInstrument:
      type: object
      required:
        - type
        - category
        - details
        - displayName
      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'
        displayName:
          type: string
          description: >-
            Opaque, render-only summary of this instrument for list/detail
            display

            (v0.12, #2665) — format is not contractual and may change without a

            version bump. Never a full account number/IBAN/PAN.
      description: Cash instrument.
      title: Cash
    FiatReturnDestinationBankUs:
      type: object
      required:
        - type
        - network
        - id
      properties:
        type:
          type: string
          enum:
            - bankUs
          description: Type discriminator.
        network:
          type: string
          enum:
            - ach
            - achSameDay
            - wire
          description: Rail to return on.
        id:
          type: string
          description: US bank ExternalAccount id (ext_ prefix).
      description: Registered US bank fiat return destination (v0.11-8).
      title: US bank account
    FiatReturnDestinationBankIban:
      type: object
      required:
        - type
        - network
        - id
      properties:
        type:
          type: string
          enum:
            - bankIban
          description: Type discriminator.
        network:
          type: string
          enum:
            - swift
        id:
          type: string
          description: IBAN ExternalAccount id (ext_ prefix).
      description: Registered IBAN fiat return destination (v0.11-8).
      title: IBAN bank account
    FiatReturnDestinationBankCanada:
      type: object
      required:
        - type
        - network
        - id
      properties:
        type:
          type: string
          enum:
            - bankCanada
          description: Type discriminator.
        network:
          type: string
          enum:
            - swift
            - local
          description: USD uses swift; CAD uses local (CAD rejected 422 in v1).
        id:
          type: string
          description: Canadian bank ExternalAccount id (ext_ prefix).
      description: >-
        Registered Canadian bank fiat return destination (v0.11-8). USD uses
        `swift`;

        CAD (`local`) is rejected with 422 in v1 (USD-only).
      title: Canadian bank account
    FiatReturnDestinationWalletFiat:
      type: object
      required:
        - type
        - id
      properties:
        type:
          type: string
          enum:
            - walletFiat
          description: Type discriminator.
        id:
          type: string
          description: OMS fiat wallet id (wlt_fiat_ prefix). Rejected 422 in v1.
      description: >-
        Fiat balance wallet return destination (v0.11-8). Rejected with 422 in
        v1 —

        holding a return as a fiat balance is planned for v0.12 (mirrors the

        `walletFiat` VA-destination rejection).
      title: Fiat wallet
    int64String:
      type: string
      description: Wire-safe integer string for fiat amounts within int64 range.
      x-go-type-import:
        path: github.com/0xPolygon/bpn-lib/numeric
      x-go-type: numeric.Int64String
    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".
    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'
    WalletCryptoDetails:
      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: 'WalletCrypto 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.
        network:
          type: string
          enum:
            - bookTransfer
          description: >-
            Read-only settlement rail marker (ratified v0.12): `bookTransfer`
            when

            this walletFiat is the destination of a Virtual Account / Deposit
            Address

            book-transfer credit — an internal ledger movement at the partner
            bank,

            no external rail. Absent when the walletFiat is a funding source.
        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 on-chain address — an internal
        ledger

        balance. `network` is `bookTransfer` only when the wallet is a VA/DA

        destination credited by internal book transfer (v0.12, #2504).
    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
          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.
        companyDiscretionaryData:
          type: string
          description: >-
            Optional ACH-only field for the originator's internal use (NACHA
            batch

            header). See the companyDiscretionaryData scalar doc (quote.tsp).
            Echoed

            back only when the stored deposit-address destination carries one
            (ach/

            achSameDay only — never on wire).
      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.
    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.
    OwnerType:
      type: string
      enum:
        - individual
        - business
    BlockchainProtocol:
      type: string
      enum:
        - evm
        - svm
        - sui
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Token from POST /auth/token

````