---
title: "Create a Virtual Account"
method: POST
path: "/customers/{customerID}/virtual_accounts"
tags: ["Virtual Accounts"]
---

# Create a Virtual Account

`POST /customers/{customerID}/virtual_accounts`

Create a Virtual Account or Virtual IBAN for the specified customer

## Path parameters

- `customerID` string, required — A UUID that uniquely identifies a resource

## Headers

- `Idempotency-Key` string, required

## Request body

- CreateVirtualAccount
  - `developer_fee_percent` string, number — The developer fee percent that will be applied to this Virtual Account. The value is a base 100 percentage, i.e. 10.2% is 10.2 in the API.
  - `fee_config` FeeConfigRequest — Developer fee configuration. Available by request only. Contact Bridge to enable this feature for your developer account. The `source` object supports direct fee parameters as a shorthand for a default fee, an explicit `default` key, payment-rail keys (e.g. `ach_push`, `wire`), or a mixed default-plus-override form.
    - `source` union — Source-side fee configuration. Supports direct fee params under `source`, an explicit `default` key, payment-rail keys such as `ach_push` and `wire`, or a mixed default-plus-override form.
      - FeeConfigFeeParams — Fee parameters for a specific payment rail or default configuration
        - `fee_percent` string, number — Percentage fee (0-100, exclusive). Applied to the amount remaining after any flat fee deduction.
        - `fee_amount` string, number — Flat fee amount deducted before percentage calculation
        - `minimum_fee` string, number — Minimum total fee floor
        - `maximum_fee` string, number — Maximum total fee cap
      - object
  - `source` VirtualAccountSourceInput, required
    - `currency` 'usd' | 'eur' | 'mxn' | 'brl' | 'cop' | 'gbp', required
  - `destination` VirtualAccountDestination, required
    - `currency` 'usdb' | 'usdc' | 'usdt' | 'pyusd' | 'eurc', required
    - `payment_rail` 'arbitrum' | 'avalanche_c_chain' | 'base' | 'celo' | 'ethereum' | 'optimism' | 'polygon' | 'solana' | 'stellar' | 'tempo' | 'tron', required
    - `address` string — The crypto wallet address that the customer wishes to ultimately receive funds at
    - `blockchain_memo` string — The memo to include when sending funds on chain. Only allowed for blockchains that support memos such as Stellar
    - `bridge_wallet_id` string — A UUID that uniquely identifies a resource
    - `prefunded_account_id` string — A UUID that uniquely identifies a resource
  - `travel_rule_data` TravelRuleData — Travel Rule data for a crypto movement. Send this on create or update when the same counterparty should apply to every future use of a reusable resource, or send the same payload with `POST /travel_rule_data/{id}` when it belongs to one specific movement.
    - `originator` TravelRuleOriginator — Travel Rule details for originator crypto movement.
      - `is_self` boolean — Set to `true` when this party is the same person or business as the Bridge customer on the resource. When `true`, Bridge uses the customer's name and address on file instead of relying on `name` and `address` in this payload.
      - `name` string — Legal name of the originator or beneficiary. Usually omitted when `is_self` is `true`.
      - `address` TravelRuleAddress — Address for travel rule submissions. All fields are optional to support partial address data (e.g. country-only).
        - `street_line_1` string
        - `street_line_2` string
        - `city` string
        - `state` string — ISO 3166-2 subdivision code.
        - `postal_code` string
        - `country` string — Three-letter alpha-3 country code as defined in the ISO 3166-1 spec.
      - `wallet_type` 'hosted' | 'external' | 'self_custodied' — Indicates the custody model for the wallet. Use `self_custodied` for customer-owned wallets (customer controls private keys), `hosted` for wallets managed by a developer or regulated entity on behalf of the customer, or `external` for wallets belonging to external exchanges or smart contracts.
      - `wallet_attested_ownership_at` string, date-time — Required when `wallet_type` is `self-custodied` or `hosted`. Must be a timestamp in the past indicating when wallet ownership was attested.
      - `identifying_information` object[]
        - `type` 'drivers_license' | 'matriculate_id' | 'military_id' | 'national_id' | 'passport' | 'permanent_residency_id' | 'state_or_provincial_id' | 'visa' | 'abn' | 'acn' | 'ahv' | 'ak' | 'aom' | 'arbn' | 'avs' | 'bc' | 'bce' | 'bin' | 'bir' | 'bp' | 'brn' | 'bsn' | 'bvn' | 'cc' | 'cdi' | 'cedula_juridica' | 'cf' | 'cif' | 'cin' | 'cipc' | 'cn' | 'cnp' | 'cnpj' | 'cpf' | 'cpr' | 'crc' | 'crib' | 'crn' | 'cro' | 'cui' | 'cuil' | 'curp' | 'cuit' | 'cvr' | 'edrpou' | 'ein' | 'embg' | 'emirates_id' | 'en' | 'fin' | 'fn' | 'gstin' | 'gui' | 'hetu' | 'hkid' | 'hn' | 'ic' | 'ico' | 'id' | 'id_broj' | 'idno' | 'idnp' | 'idnr' | 'if' | 'iin' | 'ik' | 'inn' | 'ird' | 'itin' | 'itr' | 'iva' | 'jmbg' | 'kbo' | 'kvk' | 'matricule' | 'mf' | 'mn' | 'ms' | 'mst' | 'nic' | 'nicn' | 'nie' | 'nif' | 'nin' | 'nino' | 'nip' | 'nipc' | 'nipt' | 'nit' | 'npwp' | 'nric' | 'nrn' | 'nrt' | 'ntn' | 'nuit' | 'nzbn' | 'oib' | 'orgnr' | 'other' | 'pan' | 'partita_iva' | 'pesel' | 'pib' | 'pin' | 'pk' | 'ppsn' | 'qid' | 'rc' | 'regon' | 'rfc' | 'ricn' | 'rif' | 'rn' | 'rnc' | 'rnokpp' | 'rp' | 'rrn' | 'rtn' | 'ruc' | 'rut' | 'si' | 'sin' | 'siren' | 'siret' | 'spi' | 'ssm' | 'ssn' | 'steuer_id' | 'strn' | 'tckn' | 'tfn' | 'tin' | 'tpin' | 'trn' | 'ucn' | 'uen' | 'uic' | 'uid' | 'usc' | 'ust_idnr' | 'utr' | 'vat' | 'vkn' | 'voen' | 'y_tunnus', required — Tax identification number type or government-issued ID document type (see enum). Country-specific tax and national ID lists: [Individuals](https://apidocs.bridge.xyz/docs/individual-tax-identification-numbers-by-country), [Businesses](https://apidocs.bridge.xyz/docs/business-tax-identification-numbers-by-country). **EEA / BBSA (policy in `eea_requirements.rb`):** In-scope individuals and UBOs need **both** a valid national-ID-type entry and a valid TIN per [EEA updated requirements](https://apidocs.bridge.xyz/platform/customers/customers/eea-updated-requirements). In-scope businesses need business registration **and** business tax ID types per country tables there. **TIN issuing country** must match residence (individuals) or incorporation (businesses). **Foreign tax** outside the incorporation country: set `has_foreign_tax_registration` on the business customer and add TIN objects per jurisdiction ([foreign tax / tax residency](https://apidocs.bridge.xyz/platform/customers/customers/eea-updated-requirements#tax-residency-status-foreign-tax-registry)).
        - `issuing_country` string, required — The ISO 3166-1 (three-character) country code that issued the provided document.
        - `number` string — The unique identifier of the document. Required if this document is being used as a tax identification number (e.g., you are providing a passport or national_id with no other identification).
        - `description` string — A description describing the provided document. This field is required when `other` is selected.
        - `expiration` string — The expiration date of the given document in yyyy-mm-dd format.
        - `image_front` string — This field is optionally accepted for tax_id types, but required for government_id types. Base64 encoded image* of the front side of the provided document, following the data-uri scheme i.e. data:image/[type];base64,[base_64_encoded_file_contents], with a minimum size of 200px x 200px \n\n*Maximum File Size: 15MB\n\n*Valid file types: .pdf, .jpeg, .jpg, .png, .heic, .tif _Note: When combined with an `image_back`, the combined size of both images must not exceed 24MB._
        - `image_back` string — Base64 encoded image* of the back side of the provided document, following the data-uri scheme i.e. data:image/[type];base64,[base_64_encoded_file_contents], with a minimum size of 200px x 200px \n\n*Maximum File Size: 15MB\n\n*Valid file types: .pdf, .jpeg, .jpg, .png, .heic, .tif _Note: When combined with an `image_front`, the combined size of both images must not exceed 24MB._
      - `birth_date` string — Date of birth in format yyyy-mm-dd.
      - `place_of_birth` PlaceOfBirthInput — Country (and optionally city) of birth. **EEA / BBSA in-scope customers:** supply when onboarding individuals or associated persons under the [EEA updated requirements](https://apidocs.bridge.xyz/platform/customers/customers/eea-updated-requirements#country-of-birth-and-city-of-birth). This is a sparse address — no street address. At least `country` should be present when the object is sent; `city` is recommended and will be required by EU law in 2027.
        - `country` string — ISO 3166-1 alpha-3 country code for the place of birth.
        - `city` string — City of birth (recommended for EEA).
      - `legal_entity_identifier` string — The Legal Entity Identifier (LEI) or equivalent (e.g. VAT number) of the originator. Provide this when the originator is a legal entity rather than an individual.
    - `beneficiary` TravelRuleBeneficiary — Travel Rule details for beneficiary crypto movement.
      - `is_self` boolean — Set to `true` when this party is the same person or business as the Bridge customer on the resource. When `true`, Bridge uses the customer's name and address on file instead of relying on `name` and `address` in this payload.
      - `name` string — Legal name of the originator or beneficiary. Usually omitted when `is_self` is `true`.
      - `address` TravelRuleAddress — Address for travel rule submissions. All fields are optional to support partial address data (e.g. country-only).
        - `street_line_1` string
        - `street_line_2` string
        - `city` string
        - `state` string — ISO 3166-2 subdivision code.
        - `postal_code` string
        - `country` string — Three-letter alpha-3 country code as defined in the ISO 3166-1 spec.
      - `wallet_type` 'hosted' | 'external' | 'self_custodied' — Indicates the custody model for the wallet. Use `self_custodied` for customer-owned wallets (customer controls private keys), `hosted` for wallets managed by a developer or regulated entity on behalf of the customer, or `external` for wallets belonging to external exchanges or smart contracts.
      - `wallet_attested_ownership_at` string, date-time — Required when `wallet_type` is `self-custodied` or `hosted`. Must be a timestamp in the past indicating when wallet ownership was attested.
      - `legal_entity_identifier` string — The Legal Entity Identifier (LEI) or equivalent (e.g. VAT number) of the beneficiary. Provide this when the beneficiary is a legal entity rather than an individual.

## Response `200`

Virtual Account object created

- VirtualAccountResponse
  - `id` string — A UUID that uniquely identifies a resource
  - `status` 'activated' | 'deactivated' — The activation status of the Virtual Account
  - `developer_fee_percent` string, number — The developer fee percent that will be applied to this Virtual Account. The value is a base 100 percentage, i.e. 10.2% is 10.2 in the API.
  - `fee_config` FeeConfigResponse — Developer fee configuration. Available by request only. Contact Bridge to enable this feature for your developer account. Responses render source-side fees keyed by payment rail, using `default` for a catch-all configuration.
    - `source` object — Source-side fee configuration keyed by payment rail or `default`
  - `customer_id` string — A UUID that uniquely identifies a resource
  - `created_at` string, date-time — Time of creation of the virtual account
  - `source_deposit_instructions` union
    - VirtualAccountSourceDepositInstructionsUs
      - `bank_account_number` string, required — The account number of the bank that the customer should send the deposit to
      - `bank_routing_number` string, required — The routing number of the bank that the customer should send the deposit to
      - `bank_beneficiary_name` string, required — If available, the name of the beneficiary of the bank account that the customer should send the deposit to
      - `bank_beneficiary_address` string, required — If available, the address of the beneficiary of the bank account that the customer should send the deposit to
      - `currency` 'usd', required
      - `payment_rail` 'ach_push' | 'bre_b' | 'faster_payments' | 'pix' | 'sepa' | 'spei' | 'wire'
      - `payment_rails` string[], required — The payment rails supported by these deposit instructions
      - `bank_name` string, required — The name of the bank that the customer should send the deposit to
      - `bank_address` string, required — The address of the bank that the customer should send the deposit to
    - VirtualAccountSourceDepositInstructionsEu
      - `iban` string, required — he IBAN of the account that the customer should send the deposit to
      - `bic` string, required — The BIC of the bank that the customer should send the deposit to
      - `account_holder_name` string, required — The name of the account owner that the deposit must be sent to.
      - `currency` 'eur', required
      - `payment_rails` 'sepa', required
      - `bank_name` string, required — The name of the bank that the customer should send the deposit to
      - `bank_address` string, required — The address of the bank that the customer should send the deposit to
    - VirtualAccountSourceDepositInstructionsMx
      - `clabe` string, required — The CLABE (account number) of the account that the customer should send the deposit to
      - `account_holder_name` string, required — The name of the account owner that the deposit must be sent to.
      - `currency` 'mxn', required
      - `payment_rails` string[], required — The payment rails supported by these deposit instructions
      - `bank_name` string, required — The name of the bank that the customer should send the deposit to
      - `bank_address` string, required — The address of the bank that the customer should send the deposit to
    - VirtualAccountSourceDepositInstructionsBr
      - `br_code` string, required — The BR Code that the customer should send the deposit to
      - `account_holder_name` string, required — The name of the account owner that the deposit must be sent to.
      - `currency` 'brl', required
      - `payment_rails` string[], required — The payment rails supported by these deposit instructions
      - `bank_name` string, required — The name of the bank that the customer should send the deposit to
      - `bank_address` string, required — The address of the bank that the customer should send the deposit to
    - VirtualAccountSourceDepositInstructionsGb
      - `account_number` string, required — The bank account number
      - `sort_code` string, required — The sort code, without hyphens
      - `account_holder_name` string, required — The name of the account owner that the deposit must be sent to.
      - `currency` 'gbp', required
      - `payment_rails` 'faster_payments', required
      - `bank_name` string, required — The name of the bank that the customer should send the deposit to
      - `bank_address` string, required — The address of the bank that the customer should send the deposit to
    - VirtualAccountSourceDepositInstructionsCo
      - `bre_b_key` string, required — The Bre-B key of the Colombian bank account for receiving COP deposits
      - `account_holder_name` string, required — The name of the account owner that the deposit must be sent to.
      - `deposit_message` string — The reference message to include with the COP deposit
      - `currency` 'cop', required
      - `payment_rails` string[], required — The payment rails supported by these deposit instructions
      - `bank_name` string, required — The name of the bank that the customer should send the deposit to
      - `bank_address` string, required — The address of the bank that the customer should send the deposit to
  - `destination` VirtualAccountDestination
    - `currency` 'usdb' | 'usdc' | 'usdt' | 'pyusd' | 'eurc', required
    - `payment_rail` 'arbitrum' | 'avalanche_c_chain' | 'base' | 'celo' | 'ethereum' | 'optimism' | 'polygon' | 'solana' | 'stellar' | 'tempo' | 'tron', required
    - `address` string — The crypto wallet address that the customer wishes to ultimately receive funds at
    - `blockchain_memo` string — The memo to include when sending funds on chain. Only allowed for blockchains that support memos such as Stellar
    - `bridge_wallet_id` string — A UUID that uniquely identifies a resource
    - `prefunded_account_id` string — A UUID that uniquely identifies a resource

---

[API](https://skmtc.net/bridge/apis/bridge-api.md) · [All operations](https://skmtc.net/bridge/apis/bridge-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/bridge/bridge-api/revisions/570998bde3b5/schema)
