Skip to main content
Accept stablecoin payments without holding or manually converting crypto. This recipe uses Privy wallets to send USDC to a Bridge liquidation address. Bridge automatically converts the payment to USD and deposits it into a Stripe Financial Account through ACH. This flow works well for:
  • Loyalty and rewards programs that let users spend tokenized balances at checkout. The user pays in tokens, while the business receives USD.
  • Fintech and neobank apps adding a spending layer that hold user balances in stablecoins for yield, foreign exchange flexibility, or by design. Users can pay with their balance at checkout, while the merchant receives fiat transparently.

How it works

  1. Create a Bridge USD external account for the Stripe Financial Account, then create a liquidation address that uses it. This is a one-time setup.
  2. When a user pays, call Privy’s Transfer API with the liquidation address as the destination.
  3. Bridge detects the incoming USDC, converts it to USD, and sends the USD to the Stripe Financial Account through ACH.

Prerequisites

Set up the payment destination

Create a Stripe Financial Account

Create a Stripe Financial Account if the business does not already have one. Enable ACH inbound transfers, then save the routing and account numbers from its financial address.
The Financial Account’s financial address includes the ACH details needed by Bridge:

Create a Bridge USD external account

Create a USD Bridge external account for the Stripe Financial Account. Use the business’s legal name and address as the account-owner details, and use the Financial Account’s routing and account numbers.
Bridge returns an external account ID. Store it with the business’s payment configuration:

Create a Bridge liquidation address

Create a Bridge liquidation address for the business. Pass the external account ID at the top level so Bridge can send converted USD to the Stripe Financial Account through ACH.
return_instructions.address is the Tempo address that receives the crypto if Bridge returns or fails the drain. The business must control this address, and it must be valid for the source chain. Bridge returns a liquidation address that automatically liquidates received USDC and routes USD to the configured external account:
Store the liquidation address with the business’s payment configuration. A single address can accept payments from multiple users, so your app does not need to create an address for each transaction.

Send a payment from a Privy wallet

When a user confirms a payment, call the Transfer API with the Bridge liquidation address as the destination.
The Transfer API creates an asynchronous wallet action. Store its id to track the payment:
Poll the wallet action until its status is succeeded, or use your existing wallet-action monitoring flow:

Reconcile fiat settlement

A succeeded Privy wallet action confirms the onchain USDC transfer. It does not confirm that the USD ACH payment has settled in the Stripe Financial Account. Bridge processes ACH payouts in daily batches, not in real time. Reconcile each drain through Bridge drain history and treat payment_processed as the successful settlement state. Handle every non-success state before marking the payment as settled. Subscribe to Bridge’s real-time liquidation_address.drain webhooks to update the payment status as the drain progresses. The drain lifecycle documents the available states.

Next steps

Transfer API

Review transfer parameters, supported assets, and error handling.

Wallet action status

Track a transfer from pending to a terminal state.