Skip to main content
Bridge supports issuing cards that spend directly from a noncustodial wallet controlled by you or your customer, without requiring a separate Bridge Wallet. At the time of each card authorization, Bridge pulls the exact spend amount onchain from the linked wallet—no pre-funding required. To use a noncustodial wallet, specify crypto_wallet[type]=standard when creating the card via the Stripe API (see Funding strategies). You must also set up an onchain approval so Bridge’s smart contract can pull funds at authorization time. This page covers how to set up that approval for each supported chain. Noncustodial direct debit cards are supported on Tempo, Solana, and other EVM chains. The main contract address for each chain is:

Setting Up A Noncustodial Card

Step 1: Provision a card account

In the request to the endpoint to provision a card account, specify the wallet and currency to use. For the crypto_account type, specify standard to indicate that Bridge should pull from the non-custodial wallet. Note that a wallet can only be tied to one card account. Bridge does not allow issuing multiple cards that spend from the same wallet.
When the card account is created, Bridge will submit an onchain transaction to register the program delegate address associated with the specified crypto_account address. Here is a sample transaction doing so. For safety reasons, we recommend provisioning the card account before setting up the delegate approval, so that Bridge ties this address to the customer before any approvals are submitted onchain.

Step 2: Token Approval

For both SPL (Solana-based) and ERC-20 (EVM-based) tokens, end users will need to approve the cards smart contract to pull funds from their wallet.
This example uses the ethers v6 JavaScript SDK to call the ERC-20 approve function. It approves a cards issuer contract to spend up to $100 from its balance.
The card issuer contract in the example blow is not the same contract as the one listed in the table above. The Bridge team will provide you an EVM cards contract unique to your program which interfaces with the global cards contract.
The result will be a transaction that resembles this transaction.

Step 3: Consume webhook events for card transactions

The card is now ready to use. When the card is used for a purchase at a merchant, you will receive webhook events informing you about it. This webhook event will contain information about both the card network authorization and the onchain transaction. Transactions will be submitted onchain at the time of card authorization, but complete asynchronously. This will cause two webhook events to be published. When the card authorization initially occurs, you will receive a webhook like the following, without the crypto transaction details:
Subsequently (on the order of seconds) when the crypto transaction is confirmed onchain, another webhook event will be published with the details:
You can see more card transaction scenarios in the Card Transaction Webhooks section of the documentation. Incremental authorizations will cause additional transactions to be submitted onchain to cover the additional charge.