Skip to main content

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 to payment_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_url
2

Redirect Customer

Redirect customer to payment_url
3

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 site

Implementation 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, pass flow_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. Pass success_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.