Overview
Crypto payments accept major stablecoins (USDC and USDT) across multiple EVM blockchains through hosted checkout. After creating a payment via API, redirect the customer topayment_url. On the checkout page the customer picks a network and token, then sees a unique deposit address (with a QR code); they send the stablecoin to it, and the payment completes automatically once the deposit is confirmed on-chain.
Each payment gets its own single-use deposit address for the selected network. Amounts are priced in USD and paid 1:1 in the chosen stablecoin — e.g. a
$10.50 payment is settled as 10.50 USDC or 10.50 USDT. There is no exchange-rate conversion.Supported Networks
The customer selects one of the following at checkout. The exact networks and tokens available for your account are always shown on the checkout page.Payment Flow
1
Create Payment
Call
POST /v1/payments (with currency: "usd") to create a payment and obtain payment_url2
Redirect Customer
Redirect customer to
payment_url3
Select Network & Token
On the checkout page the customer picks a network (e.g. Base) and a token (USDC or USDT); a deposit address for that selection is then shown
4
Customer Sends Stablecoin
The customer sends the stablecoin to the deposit address shown on the checkout page
5
On-chain Confirmation
The deposit is detected and confirmed on-chain (usually within a minute)
6
Completion
The payment status becomes
succeeded, a webhook is delivered, and the customer is redirected back to your siteImplementation Example
The network and token are chosen by the customer on the checkout page — you do not pass a chain or token in the API request. Your integration (create payment → redirect to
payment_url) is the same regardless of how many networks are enabled.Routing to the crypto flow
Crypto is served through a payment flow assigned to your account. If crypto is your default flow, no extra parameter is needed. If you accept multiple payment methods, passflow_id for your crypto flow to route the payment to crypto:
Redirect URLs
Once the deposit settles, the customer is sent back to your site. Passsuccess_url, failure_url, or cancel_url when creating the payment to override your dashboard defaults for that payment — useful when several forms or products share one account. See Redirect URLs for the full behavior.
Webhook Integration
Because the customer pays on-chain, the payment completes asynchronously. Use webhooks to confirm the result reliably:If a customer sends less than the requested amount, the payment does not succeed. The deposit is automatically returned to the recovery address and the payment is marked
canceled (a payment.canceled webhook is delivered). Contact support if you need to reconcile a partial deposit.For complete API parameters and response details, see the Create Payment API reference.