Bridge Virtual Accounts API
The Virtual Accounts API from Bridge — 7 operation(s) for virtual accounts.
The Virtual Accounts API from Bridge — 7 operation(s) for virtual accounts.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/bridge-virtual-accounts-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: Bridge API Keys Virtual Accounts API
description: APIs to move into, out of, and between any form of a dollar
version: '1'
servers:
- url: https://api.bridge.xyz/v0
description: The base path for all resources
security:
- ApiKey: []
tags:
- name: Virtual Accounts
paths:
/customers/{customerID}/virtual_accounts:
post:
summary: Create a Virtual Account
description: Create a Virtual Account or Virtual IBAN for the specified customer
tags:
- Virtual Accounts
parameters:
- $ref: '#/components/parameters/IdempotencyKeyParameter'
- $ref: '#/components/parameters/CustomerIDParameter'
requestBody:
description: Virtual Account object to be created
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateVirtualAccount'
examples:
us:
summary: Virtual Account
value:
developer_fee_percent: '0.1'
source:
currency: usd
destination:
currency: usdc
payment_rail: base
address: '0xdeadbeef'
us_fee_config_request_only:
summary: Virtual Account with fee_config (available by request only)
value:
fee_config:
source:
ach_push:
fee_percent: '0.5'
minimum_fee: '1.00'
wire:
fee_amount: '10.00'
fee_percent: '1.0'
source:
currency: usd
destination:
currency: usdc
payment_rail: base
address: '0xdeadbeef'
eu:
summary: Virtual IBAN
value:
developer_fee_percent: '0.1'
source:
currency: eu
destination:
currency: eurc
payment_rail: solana
adddress: DeAdBeEf
mx:
summary: Virtual Account Mexico
value:
developer_fee_percent: '0.1'
source:
currency: mxn
destination:
currency: usdc
payment_rail: base
address: '0xdeadbeef'
gb:
summary: Virtual Account United Kingdom (beta)
value:
developer_fee_percent: '0.1'
source:
currency: gbp
destination:
currency: usdc
payment_rail: base
address: '0xdeadbeef'
co:
summary: Virtual Account Colombia (Bre-B)
value:
developer_fee_percent: '0.1'
source:
currency: cop
destination:
currency: usdc
payment_rail: ethereum
address: '0xdeadbeef'
responses:
'200':
description: Virtual Account object created
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualAccountResponse'
examples:
us:
summary: Virtual Account
value:
id: 59waova4hbt1vhabj3jo7don6j1mj5peq8i8rhc5l1
status: activated
developer_fee_percent: '0.1'
source_deposit_instructions:
currency: usd
payment_rails:
- ach_push
- fednow
- wire
bank_name: Lead Bank
bank_address: 1801 Main St., Kansas City, MO 64108
bank_beneficiary_name": Customer Name
bank_beneficiary_address": 1234 Main St., Kansas City, MO 64108
bank_account_number": '123456789'
bank_routing_number": '87654321'
destination:
currency: usdc
payment_rail: polygon
address: '0xdeadbeef'
us_fee_config_request_only:
summary: Virtual Account with fee_config (available by request only)
value:
id: 59waova4hbt1vhabj3jo7don6j1mj5peq8i8rhc5l1
status: activated
developer_fee_percent: '0.0'
fee_config:
source:
ach_push:
fee_percent: '0.5'
minimum_fee: '1.00'
fednow:
fee_percent: '1.0'
minimum_fee: '1.00'
wire:
fee_amount: '10.00'
fee_percent: '1.0'
source_deposit_instructions:
currency: usd
payment_rails:
- ach_push
- fednow
- wire
bank_name: Lead Bank
bank_address: 1801 Main St., Kansas City, MO 64108
bank_beneficiary_name": Customer Name
bank_beneficiary_address": 1234 Main St., Kansas City, MO 64108
bank_account_number": '123456789'
bank_routing_number": '87654321'
destination:
currency: usdc
payment_rail: polygon
address: '0xdeadbeef'
eu:
summary: Virtual IBAN
value:
id: 59waova4hbt1vhabj3jo7don6j1mj5peq8i8rhc5l1
status: activated
developer_fee_percent: '0.1'
source_deposit_instructions:
currency: eur
payment_rails:
- sepa
iban: X6099
bic: BCIRLULL
account_holder_name: Bridge Building Sp. Z.o.o.
bank_name: Banking Circle S.A.
bank_address: 2 Boulevard de la Foire, L-1528 Luxembourg
destination:
currency: eurc
payment_rail: solana
address: DeAdBeEf
mx:
summary: Virtual Account Mexico
value:
id: 59waova4hbt1vhabj3jo7don6j1mj5peq8i8rhc5l1
status: activated
developer_fee_percent: '0.1'
source_deposit_instructions:
currency: mxn
payment_rails:
- spei
bank_name: Banco Azteca
bank_address: Av. Aztecas 215, Santa Cruz Acatlán, Naucalpan de Juárez, Estado de México
bank_beneficiary_name: Customer Name
bank_beneficiary_address: Calle Ejemplo 123, Ciudad de México, CDMX 01234
bank_account_number: '1234567890123456789'
clabe: '127180001234567890'
destination:
currency: usdc
payment_rail: solana
address: DeAdBeEf
gb:
summary: Virtual Account United Kingdom (beta)
value:
id: 2ecad10b-f44b-4ffa-8c53-39a6b63ab9ab
status: activated
developer_fee_percent: '0.1'
source_deposit_instructions:
currency: gbp
payment_rails:
- faster_payments
account_number: '01234567'
sort_code: '987654'
bank_name: Banking Circle S.A.
bank_address: 2 Boulevard de la Foire, L-1528 Luxembourg
bank_benficiary_name: Bridge Building Sp. Z.o.o.
bank_benficiary_address: 2 Boulevard de la Foire, L-1528 Luxembourg
account_holder_name: Bridge Building Sp. Z.o.o.
co:
summary: Virtual Account Colombia (Bre-B)
value:
id: 59waova4hbt1vhabj3jo7don6j1mj5peq8i8rhc5l1
status: activated
developer_fee_percent: '0.1'
source_deposit_instructions:
currency: cop
payment_rails:
- bre_b
bre_b_key: '12345678901234567890'
account_holder_name: Bridge Developer Name
deposit_message: COP7depositmessage
destination:
currency: usdc
payment_rail: ethereum
address: '0xdeadbeef'
get:
summary: List Virtual Accounts by Customer
description: List all Virtual Account objects for a customer
tags:
- Virtual Accounts
parameters:
- $ref: '#/components/parameters/CustomerIDParameter'
- $ref: '#/components/parameters/FiatInstructionsActivationStatusParameter'
- $ref: '#/components/parameters/LimitParameter'
- $ref: '#/components/parameters/VirtualAccountStartingAfterParameter'
- $ref: '#/components/parameters/VirtualAccountEndingBeforeParameter'
responses:
'200':
description: List of Virtual Accounts
content:
application/json:
schema:
title: Virtual Accounts
type: object
required:
- count
- data
properties:
count:
description: total number of items in data
type: integer
data:
type: array
minItems: 0
items:
$ref: '#/components/schemas/VirtualAccountResponse'
/customers/{customerID}/virtual_accounts/{virtualAccountID}:
get:
summary: Get a Virtual Account
description: Retrieve the Virtual Account object from the passed ID
tags:
- Virtual Accounts
parameters:
- $ref: '#/components/parameters/CustomerIDParameter'
- $ref: '#/components/parameters/VirtualAccountIDParameter'
responses:
'200':
description: Successful Virtual Account object response
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualAccountResponse'
put:
summary: Update a Virtual Account
description: Update instructions for an existing Virtual Account
tags:
- Virtual Accounts
parameters:
- $ref: '#/components/parameters/CustomerIDParameter'
- $ref: '#/components/parameters/VirtualAccountIDParameter'
requestBody:
description: The Virtual Account details to be updated
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateVirtualAccount'
responses:
'200':
description: Updated Virtual Account object
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualAccountResponse'
/customers/{customerID}/virtual_accounts/{virtualAccountID}/deactivate:
post:
summary: Deactivate a Virtual Account
description: Deactivate a Virtual Account to prevent it from acceping new incoming transactions
tags:
- Virtual Accounts
parameters:
- $ref: '#/components/parameters/IdempotencyKeyParameter'
- $ref: '#/components/parameters/CustomerIDParameter'
- $ref: '#/components/parameters/VirtualAccountIDParameter'
responses:
'200':
description: Deactivated Virtual Account object
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/VirtualAccountResponse'
- type: object
properties:
status:
example: deactivated
/customers/{customerID}/virtual_accounts/{virtualAccountID}/reactivate:
post:
summary: Reactivate a Virtual Account
description: Reactivate a previously deactivated Virtual Account
tags:
- Virtual Accounts
parameters:
- $ref: '#/components/parameters/IdempotencyKeyParameter'
- $ref: '#/components/parameters/CustomerIDParameter'
- $ref: '#/components/parameters/VirtualAccountIDParameter'
responses:
'200':
description: Reactivated Virtual Account object
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualAccountResponse'
/customers/{customerID}/virtual_accounts/{virtualAccountID}/history:
parameters:
- $ref: '#/components/parameters/CustomerIDParameter'
- $ref: '#/components/parameters/VirtualAccountIDParameter'
- $ref: '#/components/parameters/DepositIDQueryParameter'
- $ref: '#/components/parameters/DepositIDsQueryParameter'
- $ref: '#/components/parameters/TxHashParameter'
- $ref: '#/components/parameters/LimitParameter'
- $ref: '#/components/parameters/EventStartingAfterParameter'
- $ref: '#/components/parameters/EventEndingBeforeParameter'
- $ref: '#/components/parameters/EventTypeParameter'
get:
summary: Virtual Account Activity
tags:
- Virtual Accounts
description: History of activity for a Virtual Account
responses:
'200':
description: List of Virtual Account events
content:
application/json:
schema:
title: Virtual Account history
type: object
required:
- count
- data
properties:
count:
type: integer
description: The number of events returned
data:
type: array
minItems: 0
items:
$ref: '#/components/schemas/VirtualAccountEvent'
examples:
History:
$ref: '#/components/examples/VirtualAccountHistoryExample'
/virtual_accounts:
get:
summary: List Virtual Accounts
description: List all Virtual Account objects
tags:
- Virtual Accounts
parameters:
- $ref: '#/components/parameters/FiatInstructionsActivationStatusParameter'
- $ref: '#/components/parameters/LimitParameter'
- $ref: '#/components/parameters/VirtualAccountStartingAfterParameter'
- $ref: '#/components/parameters/VirtualAccountEndingBeforeParameter'
responses:
'200':
description: List of Virtual Accounts
content:
application/json:
schema:
title: Virtual Accounts
type: object
required:
- count
- data
properties:
count:
description: total number of items in data
type: integer
data:
type: array
minItems: 0
items:
$ref: '#/components/schemas/VirtualAccountResponse'
/virtual_accounts/history:
parameters:
- $ref: '#/components/parameters/DepositIDQueryParameter'
- $ref: '#/components/parameters/DepositIDsQueryParameter'
- $ref: '#/components/parameters/TxHashParameter'
- $ref: '#/components/parameters/LimitParameter'
- $ref: '#/components/parameters/EventStartingAfterParameter'
- $ref: '#/components/parameters/EventEndingBeforeParameter'
- $ref: '#/components/parameters/EventTypeParameter'
- $ref: '#/components/parameters/UpdatedAfterMsParameter'
- $ref: '#/components/parameters/UpdatedBeforeMsParameter'
get:
summary: Virtual Account Activity Across All Customers
tags:
- Virtual Accounts
description: History of activity across all customers and Virtual Accounts
responses:
'200':
description: List of Virtual Account events
content:
application/json:
schema:
title: Virtual Account history
type: object
required:
- count
- data
properties:
count:
type: integer
description: The number of events returned
data:
type: array
minItems: 0
items:
$ref: '#/components/schemas/VirtualAccountEvent'
examples:
History:
$ref: '#/components/examples/VirtualAccountHistoryExample'
components:
parameters:
TxHashParameter:
name: tx_hash
in: query
required: false
schema:
type: string
description: The hash of the transaction
VirtualAccountIDParameter:
name: virtualAccountID
in: path
required: true
schema:
$ref: '#/components/schemas/Id'
UpdatedBeforeMsParameter:
in: query
name: updated_before_ms
schema:
type: integer
description: This is a unix timestamp in milliseconds. If this is specified, objects updated BEFORE the specified timestamp will be returned
DepositIDsQueryParameter:
name: deposit_ids
in: query
required: false
schema:
type: array
items:
type: string
description: The deposit ids associated with the events. Pass a list of deposit ids like "deposit_ids[]=id1&deposit_ids[]=id2". Cannot be passed if deposit_id is also passed
EventTypeParameter:
name: event_type
in: query
required: false
schema:
type: string
enum:
- funds_received
- payment_submitted
- payment_processed
- in_review
- refund
- refund_in_flight
- refund_failed
- microdeposit
- account_update
- deactivation
- activation
description: Filter history by event type
IdempotencyKeyParameter:
in: header
name: Idempotency-Key
required: true
schema:
type: string
EventEndingBeforeParameter:
in: query
name: ending_before
schema:
type: string
description: This is an event id. If this is specified, the previous page that ends with an event right BEFORE the specified event id on the event timeline, which is always ordered from the newest to the oldest by creation time, will be returned. This also implies that events newer than the specified event id will be returned (shouldn't be set if starting_after is set)
FiatInstructionsActivationStatusParameter:
in: query
required: false
name: status
description: Limit results to those with the given activation status
example: activated
schema:
$ref: '#/components/schemas/VirtualAccountActivationStatus'
VirtualAccountStartingAfterParameter:
in: query
name: starting_after
schema:
type: string
description: This is a virtual account id. If this is specified, the next page that starts with a virtual account right AFTER the specified virtual account id on the virtual account timeline, which is always ordered from the newest to the oldest by creation time, will be returned. This also implies that virtual account older than the specified virtual account id will be returned (shouldn't be set if ending_before is set)
DepositIDQueryParameter:
name: deposit_id
in: query
required: false
schema:
type: string
description: The deposit id associated with the events. Cannot be passed if deposit_ids is also passed
EventStartingAfterParameter:
in: query
name: starting_after
schema:
type: string
description: This is an event id. If this is specified, the next page that starts with an event right AFTER the specified event id on the event timeline, which is always ordered from the newest to the oldest by creation time, will be returned. This also implies that events older than the specified event id will be returned (shouldn't be set if ending_before is set)
LimitParameter:
in: query
name: limit
schema:
type: integer
minimum: 1
maximum: 100
default: 10
description: The number of items to return (min 1, default 10, max 100)
VirtualAccountEndingBeforeParameter:
in: query
name: ending_before
schema:
type: string
description: This is a virtual account id. If this is specified, the previous page that ends with a virtual account right BEFORE the specified virtual account id on the virtual account timeline, which is always ordered from the newest to the oldest by creation time, will be returned. This also implies that virtual account newer than the specified virtual account id will be returned (shouldn't be set if starting_after is set)
CustomerIDParameter:
name: customerID
in: path
required: true
schema:
$ref: '#/components/schemas/Id'
UpdatedAfterMsParameter:
in: query
name: updated_after_ms
schema:
type: integer
description: This is a unix timestamp in milliseconds. If this is specified, objects updated AFTER the specified timestamp will be returned
schemas:
VirtualAccountSourceDepositInstructionsMx:
title: Virtual Account MX
allOf:
- type: object
required:
- currency
- payment_rails
- account_holder_name
- clabe
properties:
clabe:
description: The CLABE (account number) of the account that the customer should send the deposit to
type: string
account_holder_name:
$ref: '#/components/schemas/AccountHolderName'
currency:
type: string
enum:
- mxn
payment_rails:
description: The payment rails supported by these deposit instructions
type: array
items:
type: string
enum:
- spei
- $ref: '#/components/schemas/VirtualAccountSourceDepositInstructionsCommon'
VirtualAccountEventPaymentRails:
type: string
enum:
- ach_push
- bre_b
- faster_payments
- fednow
- pix
- sepa
- spei
- wire
TravelRuleWalletAttestedOwnershipAt:
type: string
format: date-time
description: Required when `wallet_type` is `self-custodied` or `hosted`. Must be a timestamp in the past indicating when wallet ownership was attested.
Currency:
type: string
enum:
- usdb
- usdc
- usdt
- usd
- pyusd
FeeConfigResponse:
description: 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.
type: object
properties:
source:
description: Source-side fee configuration keyed by payment rail or `default`
type: object
additionalProperties:
$ref: '#/components/schemas/FeeConfigFeeParams'
example:
default:
fee_percent: '0.5'
minimum_fee: '1.00'
wire:
fee_amount: '10.00'
fee_percent: '1.0'
TravelRuleData:
type: object
description: 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.
properties:
originator:
description: The party sending the crypto.
allOf:
- $ref: '#/components/schemas/TravelRuleOriginator'
beneficiary:
description: The party receiving the crypto.
allOf:
- $ref: '#/components/schemas/TravelRuleBeneficiary'
example:
originator:
name: Jane Smith
address:
street_line_1: 123 Market St
street_line_2: null
city: San Francisco
state: CA
postal_code: '94105'
country: USA
identifying_information:
type: national_id
number: '1234567890'
issuing_country: USA
birth_date: '2000-01-31'
place_of_birth:
city: San Francisco
country: USA
wallet_type: self_custodied
wallet_attested_ownership_at: '2026-04-01T12:00:00Z'
beneficiary:
is_self: true
wallet_type: external
UpdateVirtualAccount:
properties:
destination:
$ref: '#/components/schemas/UpdateVirtualAccountDestination'
developer_fee_percent:
$ref: '#/components/schemas/VirtualAccountDeveloperFeePercent'
fee_config:
description: Developer fee configuration. Available by request only. Contact Bridge to enable this feature for your developer account. When provided, performs a full replacement of the existing fee configuration. If the virtual account was previously configured with `developer_fee_percent`, providing `fee_config` will clear `developer_fee_percent` and replace it with the new configuration. Include the desired fee under `source` (e.g. `fee_config.source.fee_percent`). Cannot be provided alongside `developer_fee_percent` in the same request.
allOf:
- $ref: '#/components/schemas/FeeConfigRequest'
SepaReference:
description: A reference message to be sent with a SEPA transaction. We recommend you set a unique value to help you and your customers track payments end to end. It must be from 6 to 140 characters. The allowed characters are `a-z`, `A-Z`, `0-9`, spaces, ampersand (`&`), hyphen (`-`), full stop (`.`), and solidus (`/`). If not populated, the default value is "Payment via Bridge {unique_token}".
type: string
minLength: 6
maxLength: 140
IdentifyingInformation:
writeOnly: true
type: array
title: Identification Information
items:
type: object
required:
- issuing_country
- type
properties:
type:
type: string
description: '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)).
'
enum:
- 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
issuing_country:
type: string
description: The ISO 3166-1 (three-character) country code that issued the provided document.
number:
type: string
description: 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:
type: string
description: A description describing the provided document. This field is required when `other` is selected.
expiration:
type: string
description: The expiration date of the given document in yyyy-mm-dd format.
image_front:
type: string
description: '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:
# --- truncated at 32 KB (66 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/bridge/refs/heads/main/openapi/bridge-virtual-accounts-api-openapi.yml