Enable customers globally to get paid, save and spend in USD or EUR by creating a virtual account and a wallet for each customer. Fiat deposits into the virtual account are converted to stablecoins and sent to the customer’s wallet. Dollar Access.png

Step 1: Generate your API Keys

Head over to dashboard.bridge.xyz. Once logged in, click on the “API Keys” tab on the top menu bar and generate a new API key. Bridge will make your API key available only once, so make sure to immediately copy and save the key safely and securely.

Your key is used to authenticate into our APIs and is highly sensitive. If it ever gets compromised, you can immediately revoke key access from our dashboard and generate a new key.

Step 2: Onboard a customer

Create a customer ID for each user who needs a USD or EUR account. Customers will need to accept our terms of service and complete KYC. Check out this guide for a full in depth explanation on onboarding customers. The below example walks you through using a KYC link to onboard your customer.
Request
curl --location --request POST 'https://api.bridge.xyz/v0/kyc_links' \
--header 'Content-Type: application/json' \
--header 'Api-Key: <API Key>' \
--header 'Idempotency-Key: <generate a uuid>' \
--data-raw '{
  "full_name": "John Doe",
  "email": "johndoe@example.com",
  "type": "individual"
}'
Response
{
  "id": "uuid",
  "full_name": "John Doe",
  "email": "johndoe@example.com",
  "type": "individual", // or "business"
  "kyc_link": "https://bridge.withpersona.com/verify?",
  "tos_link": "https://dashboard.bridge.xyz/accept-terms-of-service?",
  "kyc_status": "not_started", // or "under_review", "incomplete", "approved" or "rejected"
  "rejection_reasons": [],
  "tos_status": "pending", // or "approved"
  "created_at": "2025-07-16T18:28:25.970Z",
  "customer_id": "customer_id",
  "persona_inquiry_type": "gov_id_db"
}
Guide the user through:
  1. Visiting the tos_link and accepting terms of service
  2. Completing identity verification via the kyc_link
This process typically takes less than a minute and updates automatically once complete.

Step 3: Create a wallet

Create a wallet for the customer to hold stablecoins. The below example explains how to create a Bridge wallet associated with a customer object.
Request
curl --request POST \
     --url https://api.bridge.xyz/v0/customers/<customer_id>/wallets \
     --header 'Api-Key: <API Key>' \
     --header 'Idempotency-Key: <Unique-Key>' \
     --header 'Content-Type: application/json' \
     --data-raw '{
       "chain": "solana"
     }'
Response
{
  "id": "wallet_123",
  "chain": "solana",
  "address": "4oG1sWkP8vcrnhbkzZc1m9RTT2VUjZHKx92qiVFK7FuZ",
  "created_at": "2025-07-15T18:00:00Z"
}
Use the bridge_wallet_id when referencing the wallet in other Bridge APIs.
Check out this guide for more information on using Bridge wallets.

Step 4: Create a virtual account

Use the Virtual Accounts API to provision permanent fiat deposit addresses for your customers. You define the source currency for the account and configure the destination to be a Bridge wallet. Bridge handles the fiat-to-crypto conversion and sends the funds on-chain automatically.
Request
curl --location --request POST 'https://api.bridge.xyz/v0/customers/<customer_id>/virtual_accounts' \
--header 'Content-Type: application/json' \
--header 'Api-Key: <Api-Key>' \
--header 'Idempotency-Key: <Unique Idempotency Key>' \
--data-raw '{
  # The source object specifies a USD virtual account.
  "source": {
    "currency": "usd",
  },
  # The destination object instructs Bridge where to send the USD deposits to.
  # Bridge will automatically handle converting and sending USD to the crypto destination. 
  "destination": {
    "payment_rail": "solana",
    "currency": "usdb",
    "bridge_wallet_id": "wallet_123"
  },
  # You can specifcy an optional developer fee to monetize on transactions.
  "developer_fee_percent": "1.0" // 1%.
}'
Response
{
    "id": "1a400dae-f7fc-4f75-8105-212a14d4132d",
    "status": "activated",
    "developer_fee_percent": "1.0",
    "customer_id": "23c2d200-4c00-4c5a-b31a-00d035d7e0ae",
    "created_at": "2025-07-04T22:10:34.564Z",
    "source_deposit_instructions": {
        "currency": "usd",
        "bank_name": "Lead Bank",
        "bank_address": "1801 Main St., Kansas City, MO 64108",
        "bank_routing_number": "101019644",
        "bank_account_number": "215268120000",
        "bank_beneficiary_name": "Ada Lovelace",
        "bank_beneficiary_address": "923 Folsom Street, 302, San Francisco, California 941070000, US",
        "payment_rail": "ach_push",
        "payment_rails": [
            "ach_push",
            "wire"
        ]
    },
    "destination": {
        "payment_rail": "solana",
        "currency": "usdb",
        "bridge_wallet_id": "wallet_123"
    }
}

Sharing Deposit Instructions

Once a Virtual Account is created, use the source_deposit_instructions object in the response to share the fiat deposit details with your customer. Funds sent to those details will be automatically converted and delivered to the crypto destination you specified.

Step 5: Explore cards

Enable users to spend their stablecoin balances locally. The below API example provision a card tied to a Bridge wallet.
Request
curl --request POST \
     --url https://api.bridge.xyz/v0/customers/customerID/card_accounts \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '{
  "currency": "usdb",
  "chain": "solana",
  "crypto_account": {
    "type": "bridge_wallet",
    "address": "4oG1sWkP8vcrnhbkzZc1m9RTT2VUjZHKx92qiVFK7FuZ"
  }
}'

Retrieve card details

Access card metadata, expiration, and access a secure image of the card.
Request
curl -X GET 'https://api.bridge.xyz/v0/customers/<customerID>/card_accounts/<cardAccountID>' \
--header 'Api-Key: <API Key>'
Response
{
  "id": "XXX-YYY",
  "status": "active",
  "card_image_url": "https://...",
  "card_details": {
    "last_4": "1264",
    "expiry": "10/24",
    "bin": "44325280"
  }
}
You can now share these card details with your customer to start spending!
Check our guide here for more information on setting up cards!