Deposit mode stablecoin paymentsPrivate Vorschau
Accept stablecoin payments with API-only deposit addresses.
Deposit mode is an API-only crypto payment flow where we return deposit addresses for each requested network. When your customer sends funds to a deposit address, we automatically capture the PaymentIntent after the funds settle on-chain.
Bevor Sie loslegen
- A Stripe account.
- Für Ihr Konto aktivierte Krypto-Einzahlungen.
- Access to deposit mode. Contact machine-payments@stripe.com.
Create a PaymentIntent
Create a PaymentIntent with the crypto payment method and mode: "deposit". Specify the networks that you want deposit addresses for by using deposit_.
API version
Für diese Funktion ist die API-Version 2026-03-04. erforderlich. Setzen Sie den Header Stripe-Version bei der Initialisierung Ihres Stripe-Clients auf 2026-03-04..
PaymentIntent response
The confirmed PaymentIntent includes crypto_ in next_, which contains deposit addresses and supported_ for each network:
{ "id": "pi_123", "amount": 5000, "currency": "usd", "status": "requires_action", "next_action": { "type": "crypto_display_details", "crypto_display_details": { "deposit_addresses": { "base": { "address": "0xbase_address", "supported_tokens": [ { "token_currency": "usdc", "token_contract_address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" } ] }, "tempo": { "address": "0xtempo_address", "supported_tokens": [ { "token_currency": "usdc", "token_contract_address": "0x20c000000000000000000000b9537d11c60e8b50" } ] }, "solana": { "address": "So1ana_deposit_address", "supported_tokens": [ { "token_currency": "usdc", "token_contract_address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" } ] } } } } }
Present the deposit address to your customer along with the expected amount and supported tokens. Your customer sends the correct token to the deposit address on the specified network.
Payment lifecycle
Use the following steps to understand how a deposit-mode PaymentIntent moves from confirmation to completion.
- After you confirm the
PaymentIntent, it enters therequires_status with deposit address details. The Stripe Dashboard displays these PaymentIntents as Incomplete while it waits for your customer to send funds.action - Your customer sends funds to the deposit address on-chain.
- Stripe detects the on-chain transaction and move the
PaymentIntenttoprocessingwhile we validate the transaction details. - After validations complete, the
PaymentIntentmoves tosucceeded.
Transfer detection delay
It can take a few minutes for us to detect the transfer after the network confirms it.
If the transaction fails validation or we can’t match the deposit, the PaymentIntent returns to requires_. Otherwise, the PaymentIntent remains in requires_.
Transaction details
After the PaymentIntent succeeds, retrieve on-chain transaction details by expanding latest_ on the PaymentIntent. The payment_method_details.crypto hash on the charge includes fields such as the transaction hash, buyer wallet address, network, and token currency.
Failure modes
Use the following scenarios to understand when we can’t match a deposit to a PaymentIntent.
- Wrong network or asset: If your customer sends tokens on a network or with a token contract that doesn’t match the deposit address, we can’t automatically match or return the funds.
- Funds after expiration: If your customer sends funds after the
PaymentIntentexpires, we can’t automatically match or return the funds. - Overpayment or underpayment: The token amount that your customer transfers must exactly match the amount on the
PaymentIntent. If your customer sends more or less than the specified amount, we can’t automatically match or return the funds.- The transferred token amount must exactly match the
PaymentIntentamount. Because fiat currencies and stablecoins use different decimal precisions, account for this difference when you calculate the transfer. For example, USD uses two decimal places, while USDC uses six. To fulfill aPaymentIntentfor 1.01 USD (101 minor units), your customer must transfer exactly 1.010000 USDC (1,010,000 minor units).
- The transferred token amount must exactly match the
Refunds
When you refund a deposit mode payment, we return funds to the sending wallet address from the detected on-chain transaction.
Vorsicht
Make sure that you verify the destination address before you initiate the refund. If your customer paid from an exchange or omnibus wallet, they might not be able to recover refunded funds.
Token and network support
PaymentIntents with the crypto payment method in mode: deposit support USDC on the following networks:
| Network | Token | Token contract address |
|---|---|---|
| Tempo | USDC | 0x20c000000000000000000000b9537d11c60e8b50 |
| Base | USDC | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
| Solana | USDC | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v |
Test your integration
Sandboxes don’t monitor crypto testnets, so we can’t automatically detect testnet transactions that you send. Instead, use the test helper endpoint to simulate crypto deposits for sandbox PaymentIntents. This lets you verify your integration immediately without relying on on-chain transactions.
To simulate different outcomes, set transaction_ to one of the following:
| Transaction hash | Outcome |
|---|---|
0x00000000000000000000000000000000000000000000000000000testsuccess | PaymentIntent succeeds within 15 seconds |
0x000000000000000000000000000000000000000000000000000000testfailed | The charge fails, and the PaymentIntent returns to requires_ within 15 seconds |