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.
openapi: 3.0.2
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:
schemas:
FeeConfigRequest:
description: 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.
type: object
properties:
source:
description: 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.
anyOf:
- $ref: '#/components/schemas/FeeConfigFeeParams'
- type: object
additionalProperties:
$ref: '#/components/schemas/FeeConfigFeeParams'
example:
fee_percent: '0.5'
minimum_fee: '1.00'
wire:
fee_amount: '10.00'
fee_percent: '1.0'
VirtualAccountActivationStatus:
description: The activation status of the Virtual Account
type: string
enum:
- activated
- deactivated
TravelRuleName:
type: string
description: Legal name of the originator or beneficiary. Usually omitted when `is_self` is `true`.
Uetr:
description: 'Deprecated: use tracking_number instead. The unique end-to-end transaction reference, for tracing purposes.'
type: string
readOnly: true
deprecated: true
VirtualAccountSourcePaymentRails:
type: string
enum:
- ach_push
- bre_b
- faster_payments
- pix
- sepa
- spei
- wire
TravelRuleIsSelf:
type: boolean
description: 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.
GbBankAccountVirtualAccount:
title: gb
type: object
required:
- account_number
- sort_code
properties:
account_number:
type: string
description: The bank account number
minLength: 8
maxLength: 8
example: 12345678
sort_code:
type: string
description: The sort code, without hyphens
minLength: 6
maxLength: 6
example: 123456
PaymentScheme:
type: string
enum:
- sepa_credit
- sepa_instant
TravelRuleOriginator:
type: object
description: Travel Rule details for originator crypto movement.
properties:
is_self:
$ref: '#/components/schemas/TravelRuleIsSelf'
name:
$ref: '#/components/schemas/TravelRuleName'
address:
description: Mailing or legal address of the originator. Usually omitted when `is_self` is `true`.
allOf:
- $ref: '#/components/schemas/TravelRuleAddress'
wallet_type:
$ref: '#/components/schemas/TravelRuleWalletType'
wallet_attested_ownership_at:
$ref: '#/components/schemas/TravelRuleWalletAttestedOwnershipAt'
identifying_information:
allOf:
- $ref: '#/components/schemas/IdentifyingInformation'
description: 'List of identification objects for the originator. Do **not** include `image_front` or `image_back` fields in this context; those are not accepted in Travel Rule submissions.
'
birth_date:
type: string
description: Date of birth in format yyyy-mm-dd.
minLength: 10
maxLength: 10
place_of_birth:
$ref: '#/components/schemas/PlaceOfBirthInput'
legal_entity_identifier:
type: string
description: 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.
AccountHolderName:
type: string
description: The name of the account owner that the deposit must be sent to.
VirtualAccountRefundDetails:
required:
- code
- reason
- refunded_at
properties:
code:
type: string
description: The code of the refund
reason:
type: string
description: The reason of the refund
refunded_at:
type: string
description: The time of the refund
risk_rejection_reason:
type: string
description: If the return is due to a risk rejection, this field will be populated with the reason for the risk rejection.
TravelRuleBeneficiary:
type: object
description: Travel Rule details for beneficiary crypto movement.
properties:
is_self:
$ref: '#/components/schemas/TravelRuleIsSelf'
name:
$ref: '#/components/schemas/TravelRuleName'
address:
description: Mailing or legal address of the beneficiary. Usually omitted when `is_self` is `true`.
allOf:
- $ref: '#/components/schemas/TravelRuleAddress'
wallet_type:
$ref: '#/components/schemas/TravelRuleWalletType'
wallet_attested_ownership_at:
$ref: '#/components/schemas/TravelRuleWalletAttestedOwnershipAt'
legal_entity_identifier:
type: string
description: 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.
FeeConfigFeeParams:
description: Fee parameters for a specific payment rail or default configuration
type: object
properties:
fee_percent:
description: Percentage fee (0-100, exclusive). Applied to the amount remaining after any flat fee deduction.
type: string
format: number
example: '1.5'
fee_amount:
description: Flat fee amount deducted before percentage calculation
type: string
format: number
example: '10.00'
minimum_fee:
description: Minimum total fee floor
type: string
format: number
example: '1.00'
maximum_fee:
description: Maximum total fee cap
type: string
format: number
example: '1000.00'
EndToEndId:
description: The end-to-end ID of the FedNow transaction, assigned by the sending bank, and is not guaranteed to be unique across payments.
type: string
VirtualAccountSourceDepositInstructionsBr:
title: Virtual Account BR
allOf:
- type: object
required:
- currency
- payment_rails
- br_code
- account_holder_name
properties:
br_code:
description: The BR Code that the customer should send the deposit to
type: string
account_holder_name:
$ref: '#/components/schemas/AccountHolderName'
currency:
type: string
enum:
- brl
payment_rails:
description: The payment rails supported by these deposit instructions
type: array
items:
type: string
enum:
- pix
- $ref: '#/components/schemas/VirtualAccountSourceDepositInstructionsCommon'
VirtualAccountDeveloperFeePercent:
description: 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.
type: string
format: number
minimum: 0
maximum: 100
exclusiveMaximum: true
example: '0.1'
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'
Imad:
description: (Wire only) The IMAD of a wire transfer, if available
type: string
pattern: '[a-z0-9]*'
minLength: 1
maxLength: 40
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
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'
VirtualAccountSourceDepositInstructionsEu:
title: Virtual IBAN
allOf:
- type: object
required:
- iban
- bic
- account_holder_name
- currency
- payment_rails
properties:
iban:
description: he IBAN of the account that the customer should send the deposit to
type: string
bic:
description: The BIC of the bank that the customer should send the deposit to
type: string
account_holder_name:
$ref: '#/components/schemas/AccountHolderName'
currency:
type: string
enum:
- eur
payment_rails:
type: string
enum:
- sepa
- $ref: '#/components/schemas/VirtualAccountSourceDepositInstructionsCommon'
TravelRuleAddress:
type: object
description: Address for travel rule submissions. All fields are optional to support partial address data (e.g. country-only).
properties:
street_line_1:
type: string
street_line_2:
type: string
city:
type: string
state:
type: string
description: ISO 3166-2 subdivision code.
postal_code:
type: string
country:
description: Three-letter alpha-3 country code as defined in the ISO 3166-1 spec.
type: string
minLength: 3
maxLength: 3
VirtualAccountSourceInput:
required:
- currency
properties:
currency:
$ref: '#/components/schemas/EuroInclusiveFiatCurrency'
example:
currency: usd
VirtualAccountEvent:
required:
- id
properties:
id:
$ref: '#/components/schemas/Id'
readOnly: true
type:
type: string
description: The type of activity
enum:
- funds_scheduled
- funds_received
- payment_submitted
- payment_processed
- in_review
- refund
- refund_in_flight
- refund_failed
- microdeposit
- account_update
- deactivation
- activation
customer_id:
$ref: '#/components/schemas/Id'
description: The id of the Bridge customer that this Virtual Account event belongs to
type: string
minLength: 1
readOnly: true
virtual_account_id:
$ref: '#/components/schemas/Id'
description: The id of the Virtual Account that this Virtual Account event belongs to
type: string
minLength: 1
readOnly: true
amount:
type: string
description: Amount for that event, represented as a dollar denominated string. Examples include "100.25", "0.1", "1.234567" etc. For "incoming" events such as funds_received or under_review, this is the initial amount received. For "outgoing" events such as payment_submitted and payment_processed, this is the amount of funds sent to the destination. For non-transactional events such as account_update, this will be zero.
currency:
$ref: '#/components/schemas/Currency'
developer_fee_amount:
type: string
description: Amount of the developer fee if any, represented as a dollar denominated string. This is the final amount taken out of what is ultimately received by your customer, not a percentage. Examples include "100.25", "0.1", "1.234567" etc.
exchange_fee_amount:
type: string
description: Amount of the exchange fee if any, represented as a dollar denominated string. Examples include "100.25", "0.1", "1.234567" etc.
subtotal_amount:
type: string
description: Amount of the subtotal, represented as a dollar denominated string. Examples include "100.25", "0.1", "1.234567" etc.
gas_fee:
type: string
description: Amount of the gas fee if any, represented as a dollar denominated string. Examples include "100.25", "0.1", "1.234567" etc.
deposit_id:
type: string
description: The id of the deposit related to this event. This id can be used to link multiple events to the same transaction. Omitted for some `refund` cases.
destination_tx_hash:
type: string
description: The hash of the on-chain transfer to the destination address
destination_payment_rail:
type: string
description: The destination payment rail where the funds are deposited to
source:
$ref: '#/components/schemas/VirtualAccountEventSource'
created_at:
readOnly: true
type: string
description: Time of creation of the event
format: date-time
receipt
# --- 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