---
title: "Create a virtual bank account fixed route"
method: POST
path: "/v1/fixed-routes/virtual-bank-accounts"
tags: ["fixed-routes"]
---

# Create a virtual bank account fixed route

`POST /v1/fixed-routes/virtual-bank-accounts`

Creates a virtual bank account that automatically sweeps fiat deposits. Route type (FIAT_TO_CRYPTO or FIAT_TO_CRYPTO_TO_FIAT) is inferred from the sweep target account type. Use the Idempotency-Key header to safely retry on network failure.

## Headers

- `X-API-Key` string
- `Idempotency-Key` string

## Request body

- CreateVbaFixedRouteDto
  - `correspondentBankName` string — Correspondent/intermediary bank name
  - `correspondentBankSwiftCode` string — Correspondent/intermediary bank SWIFT/BIC code (8 or 11 characters)
  - `correspondentAccountNumber` string — Correspondent/intermediary account number
  - `customerId` string, required — Customer ID
  - `braleAutomationId` string — Optional. Existing Brale automation id (admin / advanced). When omitted, the API creates a wire onramp automation after registering the settlement wallet on Brale.
  - `onrampSettlementInwAccountId` string — Optional. TRANSACTION Infinite Wallet for on-chain settlement (Ethereum). When omitted, one is created or reused for the customer.
  - `onrampPayoutTreasuryInwAccountId` string — Optional. TRANSACTION Infinite Wallet on the receive chain for post-settlement payout when the receive chain is not Ethereum. When omitted, one is created or reused.
  - `sweepTargetAccountId` string, required — Sweep / destination account id. For FIAT_TO_CRYPTO: a crypto wallet, or an ACTIVE provider-balance account (USDT on Ethereum) when the organization is enabled for provider-balance onramps (developer fees are not supported on that target).
  - `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' | '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 - payment rail for incoming deposits
  - `sourceCurrency` string — Source currency 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' | '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 - chain/network for crypto sweep
  - `destinationCurrency` string — Destination currency to convert to
  - `developerFeeFixed` string — Fixed fee in minor units of source currency
  - `developerFeePercent` number — Variable fee as decimal percentage (0.01 = 1%)
  - `externalReference` string — Client-provided external reference
  - `metadata` AccountMetadataDto
    - `nickname` string — Account nickname
    - `purpose` string — Account purpose
    - `tags` string[] — Account tags
  - `allowedSenderBanks` AllowedSenderBankDto[] — Allowed sender banks for deposits into this route. When set, deposits from sender banks not on this list are held for review instead of being processed automatically. Each entry must include at least one identifier.
    - `bankName` string — Sender bank name. Matched ignoring case, whitespace, and punctuation.
    - `routingNumber` string — Sender bank routing number (e.g. US ABA). Matched on digits only.
    - `swiftBic` string — Sender bank SWIFT/BIC code (8 or 11 characters)

## Response `201`

Fixed route created successfully

- FixedRouteResponseDto
  - `id` string, required — Fixed route ID (same as source account ID)
  - `customerId` string, required
  - `type` 'FIAT_TO_CRYPTO' | 'CRYPTO_TO_FIAT' | 'CRYPTO_TO_CRYPTO' | 'FIAT_TO_CRYPTO_TO_FIAT', required
  - `status` string, required
  - `enabled` boolean, required — Whether the fixed route is enabled. When false, deposits land but do not auto-sweep.
  - `metadata` AccountMetadataDto
    - `nickname` string — Account nickname
    - `purpose` string — Account purpose
    - `tags` string[] — Account tags
  - `sourceAccount` SourceAccountDto, required
    - `id` string, required
    - `type` 'VIRTUAL_BANK' | 'VIRTUAL_WALLET' | 'INFINITE_BANK' | 'INFINITE_WALLET' | 'EXTERNAL_BANK' | 'EXTERNAL_WALLET' | 'EXTERNAL_PROXY' | 'PROVIDER_BALANCE', required
    - `metadata` AccountMetadataDto
      - `nickname` string — Account nickname
      - `purpose` string — Account purpose
      - `tags` string[] — Account tags
    - `depositInstructions` BankDepositInstructions
      - `bankName` string
      - `bankAddress` BankAddressDto
        - `addressLine1` string — Address line 1 (optional for bank addresses)
        - `addressLine2` string — Address line 2 (apartment, suite, etc.)
        - `city` string — City
        - `state` string — State / Province
        - `postalCode` string — Postal code / ZIP code (optional for bank addresses)
        - `country` string — Country code (ISO 3166-2)
      - `accountNumber` string, required
      - `routingNumber` string
      - `iban` string
      - `swiftBic` string
      - `bankCountryCode` string
      - `reference` string
      - `depositMessage` string
      - `beneficiaryName` string
      - `beneficiaryAddress` BankAddressDto
        - `addressLine1` string — Address line 1 (optional for bank addresses)
        - `addressLine2` string — Address line 2 (apartment, suite, etc.)
        - `city` string — City
        - `state` string — State / Province
        - `postalCode` string — Postal code / ZIP code (optional for bank addresses)
        - `country` string — Country code (ISO 3166-2)
    - `sourceCurrency` string
    - `sourceRail` string
    - `walletAddress` string
    - `addressType` string
    - `chains` string[]
    - `walletType` 'TREASURY' | 'TRANSACTION' | 'VIRTUAL' — Infinite wallet subtype when source is INFINITE_WALLET (e.g. VIRTUAL for dedicated offramp deposit wallets)
  - `destinationCurrency` string
  - `destinationRail` string
  - `sweepTargetAccountId` string, required — ID of the account funds are swept to
  - `sweepTargetAccount` SweepTargetAccountDto
    - `id` string, required
    - `type` 'VIRTUAL_BANK' | 'VIRTUAL_WALLET' | 'INFINITE_BANK' | 'INFINITE_WALLET' | 'EXTERNAL_BANK' | 'EXTERNAL_WALLET' | 'EXTERNAL_PROXY' | 'PROVIDER_BALANCE', required
    - `metadata` AccountMetadataDto
      - `nickname` string — Account nickname
      - `purpose` string — Account purpose
      - `tags` string[] — Account tags
    - `walletAddress` string
    - `addressType` string
    - `chains` string[]
    - `accountNumber` string
    - `routingNumber` string
    - `bankName` string
  - `developerFeeFixed` string, nullable — Fixed fee in minor units of source currency
  - `developerFeePercent` number, nullable — Variable fee as decimal percentage (0.01 = 1%)
  - `refundAccountId` string, nullable — Customer wallet account ID (inw_xxx or ewa_xxx) for refunds on failed transfers or when fees exceed deposit
  - `correspondentBank` FixedRouteCorrespondentBankDto
    - `name` string, nullable — Bank name
    - `swiftCode` string, nullable — SWIFT/BIC code
    - `accountNumber` string, nullable — Account number
  - `allowedSenderBanks` AllowedSenderBankDto[], nullable — Allowed sender banks for deposits into this route. When set, deposits from sender banks not on this list are held for review instead of being processed automatically.
    - `bankName` string — Sender bank name. Matched ignoring case, whitespace, and punctuation.
    - `routingNumber` string — Sender bank routing number (e.g. US ABA). Matched on digits only.
    - `swiftBic` string — Sender bank SWIFT/BIC code (8 or 11 characters)
  - `minimumAmount` MoneyOutputDto
    - `currency` string, required — Currency code
    - `exponent` number, required — Number of decimal places for this currency (e.g., 2 for USD, 6 for USDC)
    - `value` string, required — Amount in smallest unit as a string
    - `displayValue` string, required — Human-readable decimal value
  - `sharesBalanceAccountCoordinates` boolean, 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.
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required

## Other responses

- `401` — Unauthorized - Invalid or missing authentication credentials
- `409` — An enabled route with the same source, destination, and sweep target already exists for this customer.

---

[API](https://skmtc.dev/infinite/apis/infinite-api.md) · [All operations](https://skmtc.dev/infinite/apis/infinite-api/llms.txt) · [OpenAPI document](https://skmtc.dev/infinite/apis/infinite-api/revisions/856ef426cc17?raw)
