All Tools
Tools/Stablecoin Payment Flows
🧭
BlockchainBeta

Stablecoin Payment Flows

Every stablecoin payment flow step by step — checkout by deposit address, payment request, signed authorization and authorize-and-capture escrow; stablecoin-linked cards; on- and off-ramps and issuer mint/redeem; B2B Travel Rule and cross-chain CCTP transfers; refunds, subscriptions and exceptions — with best practices for each and a payment matcher that classifies real-world transfers.

1 · Pick a flow

Five ways a merchant gets paid in stablecoins — push to a deposit address, a payment-request QR, a gasless signed authorization, card-style authorize & capture, and acceptance settled to the merchant in fiat.

The most common checkout: the processor quotes the order in a coin, issues a fresh deposit address for it, and the customer pushes a transfer from any wallet or exchange. Token transfers carry no payment reference, so the address is the reference.

1 / 8
🧑CustomerWallet or exchange
🛒MerchantCheckout
⚙️ProcessorQuotes, addresses, indexer
⛓️Blockchaine.g. Base
1
Create invoice: 49.90 USD
2
Derive a fresh deposit address↻
3
Address, coin, chain, amount, expiry
4
transfer(to, 49900000)
5
Transfer event indexed
6
Screen the sender↻
7
Webhook: paid
8
Sweep to treasury
Initiation

Create invoice: 49.90 USD

Order id, price, accepted coins and chains, idempotency key.

The processor fixes the amount in token units — 49.90 USDC is 49900000 at 6 decimals — and an expiry, typically 15–60 minutes. A dollar coin needs no FX quote for a dollar price; a euro price paid in USDC does, and the quote is what expires.

Initiation
Response
Settlement
Completion
On-chain Transfer
Finality
Compliance
Best practice
  • One address per invoice or per customer, never shared across merchants — the address is the payment reference.
  • Match on chain + canonical token contract + address; never on symbol, and never on amount alone.
  • Show the chain as prominently as the address, and list only the chains you actually watch.
  • Make status a state machine (awaiting, partial, paid, overpaid, underpaid, expired, held), not a paid flag.
  • Apply a finality rule by chain and amount before fulfilling; keep watching expired addresses.
  • Prefer contract deposit addresses (CREATE2) so sweeps need no per-address gas top-up.
Pitfalls
  • Look-alike tokens: any contract can emit a Transfer event named "USDC".
  • Exchange withdrawals arrive short by the exchange’s fee.
  • The same 0x address on another EVM chain — the commonest support ticket.
  • Reusing addresses across invoices makes late and duplicate payments unattributable.
2 · Compare acceptance methods
MethodInitiationGas paid byPayment referenceAmount controlCancel before settlementRefundBest for
Unique deposit address
Push — the payer sendsPayerThe deposit addressPayer types or scans it; short, over and late payments happenNothing to cancel — expire the invoiceNew transfer to a collected addressAny wallet or exchange; the default
Payment request (Solana Pay / EIP-681)
Push, built by the walletPayer (or merchant via transaction request)Reference key (Solana); none on EIP-681Encoded in the requestExpire the requestNew transferIn-store QR and mobile wallets
Signed authorization (EIP-3009)
Pull — the processor submits a signatureProcessorAuthorization nonceExact, signedcancelAuthorization or let it expireNew transferGasless checkout, API and agent payments (x402)
Authorize & capture escrow
Pull into escrow, then captureOperatorPayment id (hash of the terms)Capped by the signed maximum; partial capturevoid; payer reclaims after expiryrefund() within the signed windowPhysical goods, split shipments, marketplaces
x402 (HTTP 402)
Open flow →
Pull — facilitator settles a signatureFacilitatorAuthorization nonce + HTTP requestExact, from the 402 quoteLet it expireApplication-level transferPer-request API and AI-agent payments
Stablecoin-linked card
Card authorization (ISO 8583)Issuer, off the payment pathCard identifiers (RRN, ARN)Card rules (partial, incremental, tips)ReversalCard refund; chargeback rightsSpending at any card acceptor

Every method settles with the same finality: once the transfer is final it cannot be recalled. What differs is who signs, who pays gas, how the payment is found again, and whether anything can be cancelled before the money reaches the merchant.

3 · Payment matcher

Token transfers carry no payment reference. A processor issues an address, then has to decide what every transfer that reaches it means. Pick a case or build your own: the matcher applies the rules below and says what to do.

Canonical contract: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
Finality on Base: ≈ 20 min — Final once the batch holding the block is posted to Ethereum and that L1 block is finalized — about 20 min (“safe”, batch on L1, after about 2 min). All chains →

#ChainTokenAmountBlock at (min)FinalitySender screeningResult
1Counted
Paid counted 49.9 · waiting 0 · short 0 · over 0 USDC
  • Mark paid and fulfil. Store chain, token contract, tx hash, log index and block time on the order — that tuple is the settlement reference.

Rules, in order: a transfer counts only on the invoiced chain, from the canonical token contract, included in a block no later than the expiry minute. A sender-screening hit holds the whole invoice. A soft-confirmed transfer counts only when the invoice amount is at or below the soft-finality limit; unconfirmed transfers never count. Paid when the counted amount reaches the invoice minus the tolerance. A teaching model — real processors add per-chain confirmation rules and their own policies.

Related

Coins, chains and contracts: Stablecoin Reference · field by field: ISO 8583 ↔ On-Chain Settlement Mapper · settlement timing: Stablecoin Settlement Simulator · platform flows: BVNK Flow Simulator · HTTP payments: x402 Flow Simulator · decode an authorization: Calldata & EIP-712 Decoder · check an approval: Approval & Address Risk Checker · background: Stablecoin Payments 101.

Why stablecoin payments need their own flows

A stablecoin transfer is final within seconds to minutes, runs every day, and costs cents — but it carries no payment reference, cannot be recalled, and moves whatever amount the sender typed. Every flow on this page is a different answer to the same three questions: how does the processor know which order a transfer pays, who signs and who pays the gas, and what can still be undone before the merchant has the money.

Push flows (a deposit address, a payment request) work from any wallet or exchange, so they are the default — and they produce short, over, late and wrong-network payments the processor must handle. Pull flows (an EIP-3009 authorization, an authorize-and-capture escrow, a spend permission) fix the amount and payee in a signature, so those exceptions disappear and the processor pays the gas. Stablecoin-linked cards keep the card network in front, so merchants change nothing and cardholders keep chargeback rights.

The checklist every flow shares

  • Identify the asset by contract, not symbol. Native USDC on Arbitrum is 0xaf88…5831; bridged USDC.e is a different token at a different address.
  • Apply a finality rule by chain and amount. Ethereum finalizes after two epochs (about 13 minutes); an OP-stack L2 such as Base is final when its batch is final on L1; Solana’s “finalized” commitment comes about 13 seconds after a block; Stellar and the XRP Ledger are final when the ledger closes.
  • Screen counterparties and exchange Travel Rule data between regulated providers before value moves; never auto-return funds after a sanctions hit.
  • Keep gas-token balances on every chain you send from, and treat running out as an outage.
  • Refund by new transfer to a collected address — never by default to the sender, which may be an exchange.
  • Store chain, contract, tx hash, log index and block time on every payment record: together they replace the card world’s RRN and ARN.

Common questions

Which acceptance method should a merchant start with?

A unique deposit address, settled to the merchant in fiat: it works with every wallet and exchange and keeps digital assets off the merchant’s books. Add signed authorizations for wallets that support them (no gas needed by the payer, no wrong amounts), and an authorize-and-capture escrow where orders ship later or in parts.

Can a stablecoin payment be charged back?

Not on-chain. A refund is a new transfer; an escrow can void uncaptured funds and refund within a signed window. Chargeback rights exist only when the payment ran over card rails — a stablecoin-linked card.

Why does a payment arrive short?

Usually because an exchange deducted its withdrawal fee from the amount. The sender pays on-chain gas on top, so a direct wallet transfer arrives in full. Processors either accept a small tolerance or ask for a top-up.

What is the difference between transferWithAuthorization and receiveWithAuthorization?

Both move tokens with the payer’s EIP-3009 signature. receiveWithAuthorization can only be submitted by the payee itself, which stops a third party from submitting the signature first and breaking the payee contract’s own call.

Flows follow the EIP-3009, EIP-681 and Solana Pay specifications, the Commerce Payments Protocol and Spend Permissions contracts, Circle’s CCTP V2 contracts and the EU Transfer of Funds Regulation, checked October 2026. Everything runs in your browser; no network requests are made.

Something wrong or missing? Report a problem— we check reports against the specs and fix them.