fixed-routes

Create a virtual wallet fixed route

Changed on

Creates an Infinite Wallet (inw_, wallet type VIRTUAL) that automatically sweeps crypto deposits. This is a dedicated deposit mailbox, not a treasury vault and not a vwa_ virtual wallet. Route type is inferred from the sweep target: a bank account, a USD balance account, or another wallet. Use the Idempotency-Key header to safely retry on network failure.

post/v1/fixed-routes/virtual-wallets

Request

Headers

X-API-Keystring

API key

Idempotency-Keystring

Optional idempotency key. When supplied, a retry with the same key replays the original response (24h TTL) instead of being rejected as a duplicate.

Request body

correspondentBankNamestring

Correspondent/intermediary bank name

correspondentBankSwiftCodestring

Correspondent/intermediary bank SWIFT/BIC code (8 or 11 characters)

correspondentAccountNumberstring

Correspondent/intermediary account number

customerIdstring required

Customer ID

sweepTargetAccountIdstring required

Target account for sweep. Must be a bank account (for crypto→fiat), a USD balance account (for crypto deposits that convert and credit that balance), or a wallet — EXTERNAL_WALLET, INFINITE_WALLET, or VIRTUAL_WALLET — (for crypto→crypto) that belongs to the same customer.

chainType'EVM' | 'TRON' | 'BITCOIN' | 'SOLANA' required

Chain type for the wallet address

sourceRail'ACH' | 'ACH_SAME_DAY' | 'WIRE' | 'FED_NOW' | 'RTP' | 'EREBOR' | 'EREBOR_RAIL' | 'BALANCE' | 'SWIFT' | 'SEPA' | 'SEPA_INSTANT' | 'TIPS' | 'FASTER_PAYMENTS' | 'BACS' | 'CHAPS' | 'ELIXIR' | 'NICS' | 'EFT' | 'INTERAC' | 'NPP' | 'BECS' | 'UPI' | 'IMPS' | 'IMPS_WITH_FIRC' | 'NEFT' | 'RTGS' | 'BI_FAST' | 'ARTAJASA' | 'PIX' | 'TED' | 'TEF' | 'SPEI' | 'COELSA' | 'SINPE' | 'CNAPS' | 'CIPS' | 'CFXPS' | 'CHATS' | 'ZENGIN' | 'KFTC' | 'FAST_SG' | 'MEPS' | 'DUITNOW' | 'PROMPTPAY' | 'INSTAPAY' | 'PESONET' | 'NAPAS' | 'BEFTN' | 'SLIPS' | 'ZAHAV' | 'GHIPSS' | 'NIBSS' | 'PESALINK' | 'RTC_ZA' | 'TZS_RTGS' | 'EGP_ACH' | 'JOD_ACH' | 'NPSS' | 'MADA' | 'QPS' | 'DOP_ACH' | 'GTQ_ACH' | 'HNL_ACH' | 'PEN_ACH' | 'JMD_ACH' | 'USD_ACH_SV' | 'USD_ACH_EC' | 'CLP_TEF' | 'PSE' | 'COP_ACH' | 'BOB_RTGS' | 'PYG_ACH' | 'CERTIS' | 'DKK_TIPS' | 'SENT' | 'NKS' | 'BANKGIROT' | 'HKD_FPS' | 'IBFT' | 'TRY_FAST' | 'ETHEREUM' | 'BASE' | 'POLYGON' | 'SOLANA' | 'TRON' | 'BITCOIN' | 'ARBITRUM'

Source rail - chain where deposits are received

sourceCurrencystring

Source currency accepted for deposits

destinationRail'ACH' | 'ACH_SAME_DAY' | 'WIRE' | 'FED_NOW' | 'RTP' | 'EREBOR' | 'EREBOR_RAIL' | 'BALANCE' | 'SWIFT' | 'SEPA' | 'SEPA_INSTANT' | 'TIPS' | 'FASTER_PAYMENTS' | 'BACS' | 'CHAPS' | 'ELIXIR' | 'NICS' | 'EFT' | 'INTERAC' | 'NPP' | 'BECS' | 'UPI' | 'IMPS' | 'IMPS_WITH_FIRC' | 'NEFT' | 'RTGS' | 'BI_FAST' | 'ARTAJASA' | 'PIX' | 'TED' | 'TEF' | 'SPEI' | 'COELSA' | 'SINPE' | 'CNAPS' | 'CIPS' | 'CFXPS' | 'CHATS' | 'ZENGIN' | 'KFTC' | 'FAST_SG' | 'MEPS' | 'DUITNOW' | 'PROMPTPAY' | 'INSTAPAY' | 'PESONET' | 'NAPAS' | 'BEFTN' | 'SLIPS' | 'ZAHAV' | 'GHIPSS' | 'NIBSS' | 'PESALINK' | 'RTC_ZA' | 'TZS_RTGS' | 'EGP_ACH' | 'JOD_ACH' | 'NPSS' | 'MADA' | 'QPS' | 'DOP_ACH' | 'GTQ_ACH' | 'HNL_ACH' | 'PEN_ACH' | 'JMD_ACH' | 'USD_ACH_SV' | 'USD_ACH_EC' | 'CLP_TEF' | 'PSE' | 'COP_ACH' | 'BOB_RTGS' | 'PYG_ACH' | 'CERTIS' | 'DKK_TIPS' | 'SENT' | 'NKS' | 'BANKGIROT' | 'HKD_FPS' | 'IBFT' | 'TRY_FAST' | 'ETHEREUM' | 'BASE' | 'POLYGON' | 'SOLANA' | 'TRON' | 'BITCOIN' | 'ARBITRUM'

Destination rail - payment network or chain for sweep

destinationCurrencystring

Destination currency to convert to

destinationAchReferencestring

Reference message for ACH transactions (max 10 characters)

destinationWireMessagestring

Message for wire transfers (max 140 characters)

destinationSepaReferencestring

Reference for SEPA transactions (6-140 characters)

destinationSpeiReferencestring

Reference for SPEI transactions (max 40 characters)

developerFeeFixedstring

Fixed fee in minor units of source currency

developerFeePercentnumber

Variable fee as decimal percentage (0.01 = 1%)

refundAccountIdstring

Customer wallet account ID (inw_xxx or ewa_xxx) for refunds on failed transfers or when fees exceed deposit. Must have a wallet address; validated at request time. Falls back to org config if not set.

externalReferencestring

Client-provided external reference

documentIdsstring[]

Standing supporting agreement document ID. Required when the destination is a third-party SWIFT bank account. The agreement is collected once and applied to each transfer created by this route.

Example request

{
  "correspondentBankName": "Bank of America",
  "correspondentBankSwiftCode": "IRVTUS3NXXX",
  "correspondentAccountNumber": "9876543210",
  "customerId": "cus_abc123",
  "sweepTargetAccountId": "eba_xyz789",
  "chainType": "EVM",
  "sourceRail": "BASE",
  "sourceCurrency": "USDC",
  "destinationRail": "ACH",
  "destinationCurrency": "USD",
  "destinationAchReference": "PAY123",
  "destinationWireMessage": "Payment for services",
  "destinationSepaReference": "Invoice-2024-001",
  "destinationSpeiReference": "Payment123",
  "developerFeeFixed": "100000",
  "developerFeePercent": 0.01,
  "refundAccountId": "inw_abc123",
  "externalReference": "550e8400-e29b-41d4-a716-446655440000",
  "metadata": {
    "nickname": "Main Checking Account",
    "purpose": "Business operations",
    "tags": [
      "primary",
      "operations"
    ]
  }
}

Response

Fixed route created successfully

idstring required

Fixed route ID (same as source account ID)

customerIdstring required
type'FIAT_TO_CRYPTO' | 'CRYPTO_TO_FIAT' | 'CRYPTO_TO_BALANCE' | 'CRYPTO_TO_CRYPTO' | 'FIAT_TO_FIAT' | 'FIAT_TO_CRYPTO_TO_FIAT' required
statusstring required
enabledboolean required

Whether the fixed route is enabled. When false, deposits land but do not auto-sweep.

depositMatching'DEDICATED' | 'REFERENCE'

How incoming payments are matched to this deposit account. DEDICATED issues a unique account number and the sender does not include a payment reference. REFERENCE uses a shared account number and the sender must include sourceAccount.depositInstructions.reference on the payment (wire memo or ACH addenda). Omit to keep the default for the requested rails. USD ACH, wire, and SWIFT bank pay-ins only.

destinationCurrencystring
destinationRailstring
sweepTargetAccountIdstring required

ID of the account funds are swept to

previousSweepTargetAccountIdstring

Sweep target this route pointed at before the latest retarget. Omitted until the route has been retargeted. The next retarget replaces it.

previousDestinationRailstring

Destination rail stored with the previous sweep target. Omitted when there is no previous destination.

previousDestinationCurrencystring

Destination currency stored with the previous sweep target. Omitted when there is no previous destination.

developerFeeFixedstring nullable

Fixed fee in minor units of source currency

developerFeePercentnumber nullable

Variable fee as decimal percentage (0.01 = 1%)

refundAccountIdstring nullable

Customer wallet account ID (inw_xxx or ewa_xxx) for refunds on failed transfers or when fees exceed deposit

documentIdsstring[] nullable

Standing supporting agreement document ID applied to transfers created by this route.

sharesBalanceAccountCoordinatesboolean required

Whether this route's deposit coordinates are shared with a USD balance account. When true, the route and a balance account are mutually exclusive for the customer — one must be closed/disabled before the other can be created or re-enabled. Only bank pay-in routes on the balance-account provider qualify (ACH, WIRE, or SWIFT); crypto routes and payout routes are always false.

payinCloseableboolean required

Whether deactivating this route can close the deposit account. When false, deactivating only disables the route and a later payment can still arrive.

payinClosedboolean required

Whether the deposit account is closed. A closed account cannot be turned back on.

sourceClosedboolean required

Whether the source account is closed. A closed source cannot be turned back on. A wallet address can still receive funds.

canReenableboolean required

Whether this route can be turned back on. False when the source account or the destination account is not active.

depositsForwardWhileDisabledboolean required

Whether this deposit address keeps paying the current destination after the route is disabled. When false, deposits are not auto-swept.

createdAtstring date-time required
updatedAtstring date-time required

Example response

{
  "id": "vba_abc123",
  "customerId": "cus_abc123",
  "type": "FIAT_TO_CRYPTO",
  "status": "ACTIVE",
  "enabled": true,
  "metadata": {
    "nickname": "Main Checking Account",
    "purpose": "Business operations",
    "tags": [
      "primary",
      "operations"
    ]
  },
  "sourceAccount": {
    "id": "vba_abc123",
    "type": "VIRTUAL_BANK",
    "metadata": {
      "nickname": "Main Checking Account",
      "purpose": "Business operations",
      "tags": [
        "primary",
        "operations"
      ]
    },
    "depositInstructions": {
      "bankName": "JPMorgan Chase Bank",
      "bankAddress": {
        "addressLine1": "123 Main Street",
        "addressLine2": "Apt 4B",
        "city": "San Francisco",
        "state": "CA",
        "postalCode": "94102",
        "country": "US"
      },
      "accountNumber": "1234567890",
      "routingNumber": "021000021",
      "iban": "GB82WEST12345698765432",
      "swiftBic": "CHASUS33",
      "bankCountryCode": "US",
      "reference": "REF-123456",
      "depositMessage": "INV-2026-0001",
      "beneficiaryName": "John Doe",
      "beneficiaryAddress": {
        "addressLine1": "123 Main Street",
        "addressLine2": "Apt 4B",
        "city": "San Francisco",
        "state": "CA",
        "postalCode": "94102",
        "country": "US"
      }
    },
    "sourceCurrency": "USD",
    "sourceRail": "ACH",
    "sourceRails": [
      "ACH",
      "WIRE"
    ],
    "walletAddress": "0x742d35Cc6529Cf6c6D06E4C8a4c07583F5C6C2d8",
    "addressType": "EVM",
    "chains": [
      "ETHEREUM",
      "BASE"
    ]
  },
  "destinationCurrency": "USDC",
  "destinationRail": "BASE",
  "sweepTargetAccountId": "ewa_abc123",
  "previousSweepTargetAccountId": "ewa_previous",
  "previousDestinationRail": "ETHEREUM",
  "previousDestinationCurrency": "USDT",
  "sweepTargetAccount": {
    "id": "ewa_abc123",
    "type": "EXTERNAL_WALLET",
    "metadata": {
      "nickname": "Main Checking Account",
      "purpose": "Business operations",
      "tags": [
        "primary",
        "operations"
      ]
    },
    "walletAddress": "0x742d35Cc6529Cf6c6D06E4C8a4c07583F5C6C2d8",
    "addressType": "EVM",
    "chains": [
      "ETHEREUM",
      "BASE"
    ],
    "accountNumber": "****7890",
    "routingNumber": "021000021",
    "bankName": "Bank of America"
  },
  "developerFeeFixed": "100000",
  "developerFeePercent": 0.01,
  "refundAccountId": "inw_abc123",
  "correspondentBank": {
    "swiftCode": "IRVTUS3NXXX",
    "accountNumber": "9876543210"
  },
  "allowedSenderBanks": [
    {
      "bankName": "JPMorgan Chase",
      "routingNumber": "021000021",
      "swiftBic": "CHASUS33"
    }
  ],
  "minimumAmount": {
    "currency": "USD",
    "exponent": 2,
    "value": "12345",
    "displayValue": "123.45"
  },
  "canReenable": true
}

Changes

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the new CNAPS enum value to the request property

    • info

      added the new CNAPS enum value to the request property