Spend wallet balances using a card

You can issue a virtual or physical card that spends directly from a Bridge-managed wallet or external crypto wallet. Here's how to set that up.


Step 1: Prepare a Bridge wallet

Create a wallet

First, create a Bridge wallet (optional if you're using an external wallet). Use the wallet’s address when issuing a card.

Request

curl --request POST \
  --url https://api.bridge.xyz/v0/customers/<customer_id>/wallets \
  --header 'Api-Key: <API Key>' \
  --header 'Idempotency-Key: <idempotency-key>' \
  --header 'Content-Type: application/json' \
  --data '{
    "chain": "solana"
  }'

Response

{
  "id": "wallet_abc123",
  "address": "4oG1sWkP8vcrnhbkzZc1m9RTT2VUjZHKx92qiVFK7FuZ",
  "chain": "solana"
}

Keep note of the wallet ID and address as you will need this in the next step.

Fund the wallet

The below example uses Bridge's transfer API to fund the wallet. There are a variety of methods to fund the wallet using Bridge's orchestration APIs (virtual accounts, transfers, or liquidation addresses). Learn more at Bridge Wallets.

Request

curl --location --request POST 'https://api.bridge.xyz/v0/transfers' \
--header 'Api-Key: <API Key>' \
--header 'Idempotency-Key: <Unique Idempotency Key>' \
--data-raw '{
  "on_behalf_of": "cust_alice",
  "source": {
    "payment_rail": "ach_push",
    "currency": "usd",
  },
  "destination": {
     "payment_rail": "solana",
     "currency": "usdb",
     "bridge_wallet_id": "wallet_abc123"
     }
     "features": {
       "flexible_amount": true // allows for any deposit amount
 		 }
}'

Step 2: Provision a card

Now create a card account 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.

curl -X GET 'https://api.bridge.xyz/v0/customers/<customerID>/card_accounts/<cardAccountID>' \
--header 'Api-Key: <API Key>'

Sample 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!


Step 3: Make a transaction

Now that you have the details for your card, you can use it to make transactions! Use your Bridge issued card like any normal card in e-commerce checkout flows.

Step 4: Monitor transactions

Subscribe to the card_transaction.created webhook to see newly created transactions.

{
  "event_type": "card_transaction.created",
  "event_object": {
    "status": "approved",
    "amount": "-10.25",
    "merchant_name": "ROCKET RIDES",
    "authorized_at": "2025-02-04T05:19:25.000Z"
  }
}

Subscribe to the card_transaction.updated.status_transitioned webhook to see settled transactions.

{
  "event_type": "card_transaction.updated.status_transitioned",
  "event_object": {
    "status": "settled",
    "settled_amount": "-10.25",
    "posted_at": "2025-02-06T03:01:30.000Z"
  },
  "event_object_changes": {
    "status": ["approved", "settled"],
    "settled_amount": [null, "-10.25"],
    "posted_at": [null, "2025-02-06T03:01:30.000Z"]
  }
}

Or you can fetch transactions manually via the Retrieve card transactions API.

Money Movement Overview

Resources

Check out the Cards section for more in depth details!