---
title: "Create a Deposit Address"
method: POST
path: "/deposit-addresses"
tags: ["DepositAddress"]
---

# Create a Deposit Address

`POST /deposit-addresses`

Create a Deposit Address. Requires deposit addresses to be enabled for your
project and the customer to be provisioned with the banking provider. The
address starts `pending` and becomes `active` once the inbound on-chain
address is assigned.

## Headers

- `Idempotency-Key` string, required

## Request body

- DepositAddressCreateRequest — Create a Deposit Address: the expected inbound asset/network pair plus the bank destination that receives the converted funds.
  - `customerId` string, required — Owning customer (cus_… or legacy public id).
  - `expectedSourceAsset` string, required — Asset of the inbound crypto the deposit address expects. "usdc" | "usdt" (lowercase).
  - `expectedSourceNetwork` string, required — Network of the inbound crypto the deposit address expects. Drawn from the served-network enum; excludes polygon/ink/sui.
  - `destination` union, required — Deposit Address destination - where converted funds are delivered, on the shared discriminated side shape. Fiat arms (`bankUs` / `bankIban` / `bankCanada`) deliver to a registered bank-type External Account (`cryptoToFiatAccount`). Crypto arms (`walletOms` / `walletExternal`) deliver crypto onward to a registered wallet (`cryptoToCrypto`), gated by the routes table to OMS-supported networks (ethereum/base/solana - Polygon is rejected). `walletExternal` is registered-only (`ext_wlt_` EA id; raw blockchainAddress stays Cash-In-only). The reused side arms carry an optional `amount`, which is meaningless for a standing destination and rejected at validation. The server validates the side `details` (asset/network/accountHolder) against the resolved EA/wallet.
    - object — Deliver to a US bank account.
      - `type` 'bankUs', required — Type discriminator.
      - `details` BankUsSideDetails, required
        - `id` string, required — US bank ExternalAccount ID (ext_bankUs_ prefix).
        - `asset` 'usd', required — Canonical asset identifier.
        - `network` 'ach' | 'achSameDay' | 'wire', required — Network identifier.
        - `accountHolder` 'customer', required — Who holds the payout bank account (OMS closed enum). `customer` is the only valid value.
      - `amount` string — Wire-safe decimal string for financial float values (USD amounts, percentages).
    - object — Deliver to an IBAN account over SWIFT (USD).
      - `type` 'bankIban', required — Type discriminator.
      - `details` BankIbanSideDetails, required
        - `id` string, required — IBAN ExternalAccount ID (ext_bankIban_ prefix).
        - `asset` 'usd', required — Canonical asset identifier.
        - `network` 'swift' — Network identifier.
        - `accountHolder` 'customer', required — Who holds the payout bank account (OMS closed enum). `customer` is the only valid value.
      - `amount` string — Wire-safe decimal string for financial float values (USD amounts, percentages).
    - object — Deliver to a Canadian bank account. USD routes over SWIFT; CAD over local rails.
      - `type` 'bankCanada', required — Type discriminator.
      - `details` BankCanadaSideDetails, required
        - `id` string, required — Canadian bank ExternalAccount ID (ext_bankCa_ prefix).
        - `asset` 'usd' | 'cad', required — Canonical asset identifier.
        - `network` 'swift' | 'local', required — USD uses `swift`; CAD uses `local`. Always explicit.
        - `accountHolder` 'customer', required — Who holds the payout bank account (OMS closed enum). `customer` is the only valid value.
      - `amount` string — Wire-safe decimal string for financial float values (USD amounts, percentages).
    - object — Pull from / deliver to an OMS Multi-Chain Wallet owned by the customer.
      - `type` 'walletOms', required — Type discriminator.
      - `details` WalletOmsSideDetails, required
        - `id` string, required — OMS wallet ID (wlt_ prefix).
        - `asset` string, required — Crypto asset. One of: usdc, usdt.
        - `network` string, required — Network identifier.
      - `amount` string — Wire-safe decimal string for financial float values (USD amounts, percentages).
    - object — Deliver to a wallet held outside OMS, by registered ExternalAccount only (id-only; raw addresses are not accepted). Used by Virtual Account destinations; the raw-address `WalletExternalSideRequest` stays quote/transaction-only.
      - `type` 'walletExternal', required — Type discriminator.
      - `details` WalletExternalRegisteredSideDetails, required
        - `id` string, required — Registered ExternalAccount ID (ext_wlt_ prefix). Required.
        - `asset` string, required — Crypto asset. One of: usdc, usdt.
        - `network` string, required — Network identifier.
      - `amount` string — Wire-safe decimal string for financial float values (USD amounts, percentages).
  - `returnWallet` ReturnWallet — Registered crypto return destination for a Deposit Address (v0.11): where an operations-triggered return of a stranded inbound deposit is sent. `network` must be one of ethereum | base | solana; a custodial (non-multi-asset) walletOms target is rejected with 422 return_wallet_must_be_multi_asset.
    - `type` 'walletOms' | 'walletExternal', required
    - `network` string, required — Return network. Must equal the DA's expectedSourceNetwork for the return to be usable.
    - `id` string, required — walletOms: OMS wallet id (acc_…). walletExternal: registered ExternalAccount id (ext_…).
  - `sponsorGas` boolean — When `true`, OMS absorbs the on-chain gas cost for the destination delivery. Only `true` is currently supported. Ignored for non-crypto destinations (no on-chain leg).
  - `label` string — Partner display label.
  - `metadata` object — Free-form key-value pairs stored on the resource and echoed back on reads.

## Response `201`

The request has succeeded and a new resource has been created as a result.

- DepositAddress — A reusable crypto deposit configuration. Senders deposit the expected asset/network to the assigned on-chain address; OMS converts and delivers the funds to the configured bank destination automatically, creating a transaction per inbound deposit.
  - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
  - `object` 'depositAddress' — Resource type discriminator. Always "depositAddress".
  - `customerId` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
  - `status` 'pending' | 'active' | 'frozen' | 'closed' | 'failed' | 'inactiveActionRequired' — Lifecycle of a Deposit Address. pending: awaiting on-chain address assignment. active: accepting deposits. frozen: deposits held by compliance. inactiveActionRequired: destination unusable, re-point `destination` to recover. closed: permanently disabled. failed: provisioning failed.
  - `statusReason` string — Human-readable explanation of the current status.
  - `expectedSourceAsset` string — Asset of the inbound crypto the deposit address expects.
  - `expectedSourceNetwork` string — Network of the inbound crypto the deposit address expects.
  - `depositInstructions` DepositAddressDepositInstructions — The on-chain address senders deposit to, with its asset and network.
    - `asset` string, required — Same value as expectedSourceAsset.
    - `network` string, required — Same value as expectedSourceNetwork.
    - `address` string, required — OMS-owned on-chain inlet address for this deposit address.
    - `expiresAt` string, date-time — Placeholder for a future provider-imposed inlet expiry. Null today; surfaced now so adding it later is not a breaking change.
  - `destination` union — The destination side of a transaction/quote (v0.10): a typed instrument plus `payoutOrigin`. Amounts live only in `pricing`.
    - object
      - `party` union
        - object — The owning OMS customer is on this side.
          - `relationship` 'customer', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - object — A different OMS customer is on this side.
          - `relationship` 'otherCustomer', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `name` string, nullable — Display name.
        - object — A registered counterparty (saved third party) is on this side.
          - `relationship` 'externalRegistered', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `name` string, nullable — Display name.
          - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
        - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
          - `relationship` 'externalUnregistered', required — Relationship discriminator.
          - `name` string, nullable — Display name.
          - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
      - `type` 'walletOms', required — Type discriminator.
      - `category` 'crypto', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
      - `details` WalletOmsDetails, required — WalletOms instrument details: an OMS-custodied crypto wallet.
        - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - `asset` string — Canonical asset identifier.
        - `network` string — Network identifier.
        - `blockchainAddress` string — On-chain address.
        - `custodyType` 'custodial' | 'embedded' — How the wallet is held: `custodial` or `embedded`.
        - `txHash` string — On-chain transaction hash.
        - `blockchainAsset` BlockchainAsset
          - `protocol` 'evm' | 'svm' | 'sui', required
          - `chainId` string, required
          - `tokenId` string, required
      - `payoutOrigin` union — Where last-mile delivery is sent *from*. Tiered: Quote & Deposit Address echo the choice only; the Transaction carries full detail (`accountNumber`/`routingNumber`/`txHash`). At launch all payouts route through a single provider, so the field is forward-compatible but single-valued.
        - object — Payout originates from a bank account. the response wraps the fields in a `details` envelope (matches the `precursor` shape). `accountNumber`/`routingNumber` are full sending-account detail rendered on the Transaction only, null on Quote/Deposit Address (choice-only).
          - `type` 'bank', required — Type discriminator.
          - `details` PayoutOriginBankDetails, required — Bank payout-origin detail. `accountHolder`(+`Name`) is the chosen sender identity (echoed on Quote/DA too); `accountNumber`/`routingNumber` are the full sending-account coordinates (Transaction only, else null); `virtualAccountId` is the VA the funds were pulled from.
            - `accountHolder` 'customer' — Who holds the payout bank account (OMS closed enum). `customer` is the only valid value.
            - `accountHolderName` string — Name of the sending account holder.
            - `accountNumber` string, nullable — Bank account number.
            - `routingNumber` string, nullable — US ABA routing number.
            - `virtualAccountId` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - object — Payout originates from an on-chain address.
          - `type` 'blockchain', required — Type discriminator.
          - `blockchainAddress` string — On-chain address.
          - `network` string — Network identifier.
          - `txHash` string — On-chain transaction hash.
          - `custodian` string — Custodian holding the funds.
    - object
      - `party` union
        - object — The owning OMS customer is on this side.
          - `relationship` 'customer', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - object — A different OMS customer is on this side.
          - `relationship` 'otherCustomer', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `name` string, nullable — Display name.
        - object — A registered counterparty (saved third party) is on this side.
          - `relationship` 'externalRegistered', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `name` string, nullable — Display name.
          - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
        - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
          - `relationship` 'externalUnregistered', required — Relationship discriminator.
          - `name` string, nullable — Display name.
          - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
      - `type` 'walletExternal', required — Type discriminator.
      - `category` 'crypto', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
      - `details` WalletExternalDetails, required — WalletExternal instrument details: a crypto wallet held in external custody.
        - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - `asset` string — Canonical asset identifier.
        - `network` string — Network identifier.
        - `blockchainAddress` string — On-chain address.
        - `custodian` string — Custodian holding the funds.
        - `otherCustodian` string — Free-text custodian name when `custodian` is `other`.
        - `txHash` string — On-chain transaction hash.
        - `blockchainAsset` BlockchainAsset
          - `protocol` 'evm' | 'svm' | 'sui', required
          - `chainId` string, required
          - `tokenId` string, required
      - `payoutOrigin` union — Where last-mile delivery is sent *from*. Tiered: Quote & Deposit Address echo the choice only; the Transaction carries full detail (`accountNumber`/`routingNumber`/`txHash`). At launch all payouts route through a single provider, so the field is forward-compatible but single-valued.
        - object — Payout originates from a bank account. the response wraps the fields in a `details` envelope (matches the `precursor` shape). `accountNumber`/`routingNumber` are full sending-account detail rendered on the Transaction only, null on Quote/Deposit Address (choice-only).
          - `type` 'bank', required — Type discriminator.
          - `details` PayoutOriginBankDetails, required — Bank payout-origin detail. `accountHolder`(+`Name`) is the chosen sender identity (echoed on Quote/DA too); `accountNumber`/`routingNumber` are the full sending-account coordinates (Transaction only, else null); `virtualAccountId` is the VA the funds were pulled from.
            - `accountHolder` 'customer' — Who holds the payout bank account (OMS closed enum). `customer` is the only valid value.
            - `accountHolderName` string — Name of the sending account holder.
            - `accountNumber` string, nullable — Bank account number.
            - `routingNumber` string, nullable — US ABA routing number.
            - `virtualAccountId` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - object — Payout originates from an on-chain address.
          - `type` 'blockchain', required — Type discriminator.
          - `blockchainAddress` string — On-chain address.
          - `network` string — Network identifier.
          - `txHash` string — On-chain transaction hash.
          - `custodian` string — Custodian holding the funds.
    - object
      - `party` union
        - object — The owning OMS customer is on this side.
          - `relationship` 'customer', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - object — A different OMS customer is on this side.
          - `relationship` 'otherCustomer', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `name` string, nullable — Display name.
        - object — A registered counterparty (saved third party) is on this side.
          - `relationship` 'externalRegistered', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `name` string, nullable — Display name.
          - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
        - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
          - `relationship` 'externalUnregistered', required — Relationship discriminator.
          - `name` string, nullable — Display name.
          - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
      - `type` 'bankUs', required — Type discriminator.
      - `category` 'fiatAccount', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
      - `details` BankUsDetails, required — US bank account instrument details.
        - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - `asset` 'usd' — Canonical asset identifier.
        - `network` 'ach' | 'achSameDay' | 'wire' | 'rtp' — Network identifier.
        - `secCode` 'ccd' | 'ppd' | 'web' — ACH SEC code. Populated only when the destination bank network is `ach`/`achSameDay`; null otherwise. Server-derived from the destination owner's and the source customer's `entityType`.
        - `accountNumberLast4` string — Last four digits of the account number.
        - `routingNumber` string — US ABA routing number.
        - `bankName` string — Bank display name.
        - `accountType` 'checking' | 'savings' — checking or savings.
        - `memo` string — Payment memo.
      - `payoutOrigin` union — Where last-mile delivery is sent *from*. Tiered: Quote & Deposit Address echo the choice only; the Transaction carries full detail (`accountNumber`/`routingNumber`/`txHash`). At launch all payouts route through a single provider, so the field is forward-compatible but single-valued.
        - object — Payout originates from a bank account. the response wraps the fields in a `details` envelope (matches the `precursor` shape). `accountNumber`/`routingNumber` are full sending-account detail rendered on the Transaction only, null on Quote/Deposit Address (choice-only).
          - `type` 'bank', required — Type discriminator.
          - `details` PayoutOriginBankDetails, required — Bank payout-origin detail. `accountHolder`(+`Name`) is the chosen sender identity (echoed on Quote/DA too); `accountNumber`/`routingNumber` are the full sending-account coordinates (Transaction only, else null); `virtualAccountId` is the VA the funds were pulled from.
            - `accountHolder` 'customer' — Who holds the payout bank account (OMS closed enum). `customer` is the only valid value.
            - `accountHolderName` string — Name of the sending account holder.
            - `accountNumber` string, nullable — Bank account number.
            - `routingNumber` string, nullable — US ABA routing number.
            - `virtualAccountId` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - object — Payout originates from an on-chain address.
          - `type` 'blockchain', required — Type discriminator.
          - `blockchainAddress` string — On-chain address.
          - `network` string — Network identifier.
          - `txHash` string — On-chain transaction hash.
          - `custodian` string — Custodian holding the funds.
    - object
      - `party` union
        - object — The owning OMS customer is on this side.
          - `relationship` 'customer', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - object — A different OMS customer is on this side.
          - `relationship` 'otherCustomer', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `name` string, nullable — Display name.
        - object — A registered counterparty (saved third party) is on this side.
          - `relationship` 'externalRegistered', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `name` string, nullable — Display name.
          - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
        - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
          - `relationship` 'externalUnregistered', required — Relationship discriminator.
          - `name` string, nullable — Display name.
          - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
      - `type` 'bankIban', required — Type discriminator.
      - `category` 'fiatAccount', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
      - `details` BankIbanDetails, required — IBAN bank account instrument details.
        - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - `asset` string — Canonical asset identifier.
        - `network` 'swift' — Network identifier.
        - `ibanLast4` string — Last four characters of the IBAN.
        - `BIC` string — SWIFT BIC.
        - `bankAddress` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
          - `line1` string — Street address, line 1.
          - `line2` string — Street address, line 2.
          - `city` string — City.
          - `state` string — State / province / region.
          - `country` string — ISO 3166-1 alpha-2
          - `zipCode` string — ZIP / postal code.
        - `countryCode` string — ISO 3166-1 alpha-2 country code.
        - `memo` string — Payment memo.
      - `payoutOrigin` union — Where last-mile delivery is sent *from*. Tiered: Quote & Deposit Address echo the choice only; the Transaction carries full detail (`accountNumber`/`routingNumber`/`txHash`). At launch all payouts route through a single provider, so the field is forward-compatible but single-valued.
        - object — Payout originates from a bank account. the response wraps the fields in a `details` envelope (matches the `precursor` shape). `accountNumber`/`routingNumber` are full sending-account detail rendered on the Transaction only, null on Quote/Deposit Address (choice-only).
          - `type` 'bank', required — Type discriminator.
          - `details` PayoutOriginBankDetails, required — Bank payout-origin detail. `accountHolder`(+`Name`) is the chosen sender identity (echoed on Quote/DA too); `accountNumber`/`routingNumber` are the full sending-account coordinates (Transaction only, else null); `virtualAccountId` is the VA the funds were pulled from.
            - `accountHolder` 'customer' — Who holds the payout bank account (OMS closed enum). `customer` is the only valid value.
            - `accountHolderName` string — Name of the sending account holder.
            - `accountNumber` string, nullable — Bank account number.
            - `routingNumber` string, nullable — US ABA routing number.
            - `virtualAccountId` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - object — Payout originates from an on-chain address.
          - `type` 'blockchain', required — Type discriminator.
          - `blockchainAddress` string — On-chain address.
          - `network` string — Network identifier.
          - `txHash` string — On-chain transaction hash.
          - `custodian` string — Custodian holding the funds.
    - object
      - `party` union
        - object — The owning OMS customer is on this side.
          - `relationship` 'customer', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - object — A different OMS customer is on this side.
          - `relationship` 'otherCustomer', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `name` string, nullable — Display name.
        - object — A registered counterparty (saved third party) is on this side.
          - `relationship` 'externalRegistered', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `name` string, nullable — Display name.
          - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
        - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
          - `relationship` 'externalUnregistered', required — Relationship discriminator.
          - `name` string, nullable — Display name.
          - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
      - `type` 'bankCanada', required — Type discriminator.
      - `category` 'fiatAccount', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
      - `details` BankCanadaDetails, required — Canadian bank account instrument details.
        - `id` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - `asset` 'usd' | 'cad' — Canonical asset identifier.
        - `network` 'swift' | 'local' — Network identifier.
        - `institutionNumber` string — Canadian 3-digit institution number.
        - `transitNumber` string — Canadian 5-digit transit number.
        - `accountNumberLast4` string — Last four digits of the account number.
        - `bankName` string — Bank display name.
        - `memo` string — Payment memo.
      - `payoutOrigin` union — Where last-mile delivery is sent *from*. Tiered: Quote & Deposit Address echo the choice only; the Transaction carries full detail (`accountNumber`/`routingNumber`/`txHash`). At launch all payouts route through a single provider, so the field is forward-compatible but single-valued.
        - object — Payout originates from a bank account. the response wraps the fields in a `details` envelope (matches the `precursor` shape). `accountNumber`/`routingNumber` are full sending-account detail rendered on the Transaction only, null on Quote/Deposit Address (choice-only).
          - `type` 'bank', required — Type discriminator.
          - `details` PayoutOriginBankDetails, required — Bank payout-origin detail. `accountHolder`(+`Name`) is the chosen sender identity (echoed on Quote/DA too); `accountNumber`/`routingNumber` are the full sending-account coordinates (Transaction only, else null); `virtualAccountId` is the VA the funds were pulled from.
            - `accountHolder` 'customer' — Who holds the payout bank account (OMS closed enum). `customer` is the only valid value.
            - `accountHolderName` string — Name of the sending account holder.
            - `accountNumber` string, nullable — Bank account number.
            - `routingNumber` string, nullable — US ABA routing number.
            - `virtualAccountId` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - object — Payout originates from an on-chain address.
          - `type` 'blockchain', required — Type discriminator.
          - `blockchainAddress` string — On-chain address.
          - `network` string — Network identifier.
          - `txHash` string — On-chain transaction hash.
          - `custodian` string — Custodian holding the funds.
    - object
      - `party` union
        - object — The owning OMS customer is on this side.
          - `relationship` 'customer', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - object — A different OMS customer is on this side.
          - `relationship` 'otherCustomer', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `name` string, nullable — Display name.
        - object — A registered counterparty (saved third party) is on this side.
          - `relationship` 'externalRegistered', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `name` string, nullable — Display name.
          - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
        - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
          - `relationship` 'externalUnregistered', required — Relationship discriminator.
          - `name` string, nullable — Display name.
          - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
      - `type` 'card', required — Type discriminator.
      - `category` 'fiatAccount', required — High-level grouping: `fiatAccount` for bank or card accounts, `crypto` for wallets.
      - `details` CardDetails, required — Card instrument details.
        - `id` string — Unique identifier.
        - `asset` 'usd' — Canonical asset identifier.
        - `network` 'card' — Network identifier.
        - `cardNumberLast4` string — Last four digits of the card number.
        - `cardProvider` string — Card network/provider.
        - `memo` string — Payment memo.
      - `payoutOrigin` union — Where last-mile delivery is sent *from*. Tiered: Quote & Deposit Address echo the choice only; the Transaction carries full detail (`accountNumber`/`routingNumber`/`txHash`). At launch all payouts route through a single provider, so the field is forward-compatible but single-valued.
        - object — Payout originates from a bank account. the response wraps the fields in a `details` envelope (matches the `precursor` shape). `accountNumber`/`routingNumber` are full sending-account detail rendered on the Transaction only, null on Quote/Deposit Address (choice-only).
          - `type` 'bank', required — Type discriminator.
          - `details` PayoutOriginBankDetails, required — Bank payout-origin detail. `accountHolder`(+`Name`) is the chosen sender identity (echoed on Quote/DA too); `accountNumber`/`routingNumber` are the full sending-account coordinates (Transaction only, else null); `virtualAccountId` is the VA the funds were pulled from.
            - `accountHolder` 'customer' — Who holds the payout bank account (OMS closed enum). `customer` is the only valid value.
            - `accountHolderName` string — Name of the sending account holder.
            - `accountNumber` string, nullable — Bank account number.
            - `routingNumber` string, nullable — US ABA routing number.
            - `virtualAccountId` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - object — Payout originates from an on-chain address.
          - `type` 'blockchain', required — Type discriminator.
          - `blockchainAddress` string — On-chain address.
          - `network` string — Network identifier.
          - `txHash` string — On-chain transaction hash.
          - `custodian` string — Custodian holding the funds.
    - object
      - `party` union
        - object — The owning OMS customer is on this side.
          - `relationship` 'customer', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - object — A different OMS customer is on this side.
          - `relationship` 'otherCustomer', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `customerId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `name` string, nullable — Display name.
        - object — A registered counterparty (saved third party) is on this side.
          - `relationship` 'externalRegistered', required — Relationship discriminator.
          - `entityType` 'individual' | 'business'
          - `counterpartyId` string, required — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
          - `name` string, nullable — Display name.
          - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
        - object — An unrecognized external party (no saved record) is on this side. There is no OMS record behind it, so it carries no entityType.
          - `relationship` 'externalUnregistered', required — Relationship discriminator.
          - `name` string, nullable — Display name.
          - `address` Address — A postal address. country is an ISO 3166-1 alpha-2 country code.
            - `line1` string — Street address, line 1.
            - `line2` string — Street address, line 2.
            - `city` string — City.
            - `state` string — State / province / region.
            - `country` string — ISO 3166-1 alpha-2
            - `zipCode` string — ZIP / postal code.
      - `type` 'cash', required — Type discriminator.
      - `category` 'cash', required — High-level grouping: always `cash` for cash pickups and drops.
      - `details` CashDetails, required — Cash pickup/drop instrument details.
        - `asset` string — Canonical asset identifier.
        - `cashLocationId` string — Cash location ID from `GET /cash-locations`.
        - `cashLocationReference` string — Provider reference for the location, from `GET /cash-locations`.
        - `code` string — Machine-readable code.
        - `expiresAt` string, date-time — Expiration time.
        - `locationName` string — Display name of the retail location.
        - `locationAddress` string — Street address of the retail location.
      - `payoutOrigin` union — Where last-mile delivery is sent *from*. Tiered: Quote & Deposit Address echo the choice only; the Transaction carries full detail (`accountNumber`/`routingNumber`/`txHash`). At launch all payouts route through a single provider, so the field is forward-compatible but single-valued.
        - object — Payout originates from a bank account. the response wraps the fields in a `details` envelope (matches the `precursor` shape). `accountNumber`/`routingNumber` are full sending-account detail rendered on the Transaction only, null on Quote/Deposit Address (choice-only).
          - `type` 'bank', required — Type discriminator.
          - `details` PayoutOriginBankDetails, required — Bank payout-origin detail. `accountHolder`(+`Name`) is the chosen sender identity (echoed on Quote/DA too); `accountNumber`/`routingNumber` are the full sending-account coordinates (Transaction only, else null); `virtualAccountId` is the VA the funds were pulled from.
            - `accountHolder` 'customer' — Who holds the payout bank account (OMS closed enum). `customer` is the only valid value.
            - `accountHolderName` string — Name of the sending account holder.
            - `accountNumber` string, nullable — Bank account number.
            - `routingNumber` string, nullable — US ABA routing number.
            - `virtualAccountId` string — Public TypeID, e.g. `txn_01h455vb4pex5vsknk084sn02q`; legacy UUID suffixes are accepted until non-v7 rows are retired.
        - object — Payout originates from an on-chain address.
          - `type` 'blockchain', required — Type discriminator.
          - `blockchainAddress` string — On-chain address.
          - `network` string — Network identifier.
          - `txHash` string — On-chain transaction hash.
          - `custodian` string — Custodian holding the funds.
  - `returnWallet` ReturnWallet — Registered crypto return destination for a Deposit Address (v0.11): where an operations-triggered return of a stranded inbound deposit is sent. `network` must be one of ethereum | base | solana; a custodial (non-multi-asset) walletOms target is rejected with 422 return_wallet_must_be_multi_asset.
    - `type` 'walletOms' | 'walletExternal', required
    - `network` string, required — Return network. Must equal the DA's expectedSourceNetwork for the return to be usable.
    - `id` string, required — walletOms: OMS wallet id (acc_…). walletExternal: registered ExternalAccount id (ext_…).
  - `failureReason` 'provisioningTimeout' | 'systemError' | 'ereborRejected' | 'intlBankAccountCreateRejected' | 'noMatchingNetwork' | 'blockchainAddressInUse' | 'bankAccountInUse' — Closed enum carried on DA when status = "failed". camelCase per partner channel naming convention.
  - `sourceToDestination` 'cryptoToCrypto' | 'cryptoToCash' | 'cryptoToFiatAccount' | 'cashToCrypto' | 'fiatAccountToCrypto' | 'fiatAccountToFiatAccount' — Composite of source and destination instrument categories, inferred from each side. The cash corridors (`cryptoToCash`, `cashToCrypto`) are derived from a cash-pickup destination / cash-in source respectively; the rest map straight from the internal corridor type.
  - `sponsorGas` boolean — Whether OMS absorbs the on-chain gas cost for the destination delivery. Persisted from the create/update request (currently only `true` is accepted).
  - `label` string — Partner display label.
  - `metadata` object — Free-form key-value pairs supplied at creation or update.
  - `createdAt` string, date-time — When the deposit address was created.
  - `updatedAt` string, date-time — When the deposit address was last updated.

## Other responses

- `422` — Returned by the Virtual Account / Deposit Address create when the provider terminally rejects the provisioning call. No resource is created - provisioning happens before any row is inserted.

---

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