A stablecoin payment in five steps: bank deposit, conversion to USDC or USDT, on-chain delivery to a wallet, payout authorization, and local currency out.
A stablecoin payment works in four moves. A bank transfer lands in a virtual account, it's converted into USDC or USDT, the stablecoins settle on-chain to the customer's linked wallet, and for a payout they're converted back into local currency and sent over a rail like Pix or SPEI. The blockchain handles only the middle: a couple of short transactions, each confirmed in seconds to minutes, each with a public receipt.
The end-to-end version, with bank cut-offs and payout timing, is in how a stablecoin payment works. This walkthrough zooms in on the part most explainers skip: what the blockchain is actually doing at each step, and what an operations team can see while it happens.
No code required. If you can read a bank statement, you can follow this.
Picture a line of five boxes, left to right. The first and last are bank accounts. The three in the middle are the payment provider's conversion step, the customer's wallet, and the provider's conversion step again. Money enters on the left as dollars, becomes a stablecoin for the middle stretch, and leaves on the right as local currency. Only two arrows in the whole picture are on-chain: the delivery into the wallet, and the pull out of it.
A virtual account is a real bank account number, routing and account, issued in your customer's name. Anyone can pay it like any other account. At BlindPay, each virtual account belongs to one customer and settles to one linked wallet, and a customer can hold more than one (virtual accounts).
Why that matters for reconciliation: every deposit into the account creates its own payin record. You match money to customers by account, not by hoping the payer typed a reference code correctly. Without a virtual account, a US payin returns BlindPay's bank details plus a memo_code the payer has to include.
On-chain so far: nothing. This step is pure banking. ACH and wire deposits can take up to five business days to arrive; RTP arrives in seconds.
The approval flow and fees are covered in stablecoin virtual accounts explained.
Once the deposit clears, the provider converts the dollars into a stablecoin at the rate locked in the quote. USDC is issued by Circle and USDT by Tether; both are designed to be redeemable one-for-one for US dollars through their issuers.
New tokens come from one of two places. Either the issuer mints them against fresh dollars, or the provider sends tokens it already holds. BlindPay's docs describe exactly that: once the deposit is confirmed, BlindPay mints or transfers the equivalent stablecoin amount to the destination wallet (overview).
On-chain so far: possibly a mint on the issuer's side. Your customer doesn't see it and doesn't need to.
This is the first on-chain moment your team can actually look at. One transfer moves the stablecoins from the provider to the wallet linked to the virtual account.
A transfer "confirms" when a block containing it is added to the chain. It's final when the network guarantees that block can't be undone. How long that takes depends on the network:
| Network | New block roughly every | Practical finality |
|---|---|---|
| Stellar | 5 seconds | At ledger close, about 5 seconds |
| Solana | 0.4 seconds | About 13 seconds |
| Tron | 3 seconds | About a minute |
| Polygon | 2 seconds | Seconds |
| Base, Arbitrum | 2 seconds or less | Seconds for the sequencer, minutes to settle on Ethereum |
| Ethereum | 12 seconds | About 13 minutes |
Every confirmed transfer has a transaction hash, a unique ID anyone can paste into a block explorer to see the amount, the sending and receiving addresses, and the time. It's a receipt no one can edit.
What BlindPay shows you: the payin fires payin.complete once the stablecoins land, and the hash appears in the payin's tracking_complete object. One gotcha from the payins docs: during a gas spike, a broadcast transaction can be replaced by another one, so the final hash may differ from the first one you saw. Treat the payin status as the source of truth, not a specific hash.
The wallet itself comes in two kinds. An external wallet is controlled by your customer. A managed wallet is custodied by BlindPay (in beta). Why that choice matters for risk is in non-custodial payments.
Paying someone starts with a quote: the rate, the fee, and exactly how much local currency arrives. At BlindPay a payout quote lasts five minutes (payout quotes). How to read one is in stablecoin API quotes explained.
Then the wallet has to let the stablecoins go. How depends on the wallet:
approve for the exact quoted amount.After authorization, BlindPay pulls exactly that amount. Not a cent more.
On-chain: the approval (on EVM chains) and the transfer out of the wallet. If an external wallet signs the approval, that wallet pays the network fee for it in the chain's native token.
The off-ramp converts the stablecoins into local currency and sends them over the recipient's rail. Pix in Brazil, SPEI in Mexico, Transfers in Argentina, and RTP in the US are instant. Wire and SEPA take about one business day, ACH about two, and SWIFT (POBO/COBO) about five (settlement times by rail).
On-chain: done. From here it's banking again, and payout.complete fires when the recipient's bank confirms.
That's the whole trip. On-chain time is usually minutes. The bank legs are what take hours or days.
Failures cluster at the bank edges, not on-chain. Here's the map:
| Where it stops | What happened on-chain | What you see at BlindPay |
|---|---|---|
| Deposit never arrives | Nothing | The payin fails. Pix and SPEI payins wait up to 30 minutes first |
| Quote expires before execution | Nothing | Request a new quote |
| Delivery transaction replaced in a gas spike | The replacement lands | Resolved automatically; the hash may change |
| Held for compliance review | For US payouts, the stablecoins are usually already collected | on_hold until review clears. An unanswered request for information can lead to a refund to the sender |
| Receiving bank rejects or returns the payout | A refund transfer back to the wallet | refunded: stablecoins return to the wallet that authorized them |
| Payout rejected in compliance review | The stablecoins may already be collected | failed, no automatic refund; contact support |
A confirmed on-chain transfer can't be reversed by anyone. That's why the destination and amount are locked in the quote before anything moves.
It means it doesn't have to. Everything above can run behind a bank-shaped API. In BlindPay's Abstracted flavor, you issue virtual accounts, receive payins, and send payouts to bank accounts. The stablecoins settle in the linked wallet in the background, and no one on your team picks a chain, holds a key, or signs a transaction.
Teams that want the chain-level controls from steps 3 and 4 use the Advanced flavor of the same API. Same keys, same webhooks.
Watch one payment cross the chain yourself. Create a free development instance, where payins auto-complete about 30 seconds after you create them and settle in a test token called USDB. Then open the transaction hash from tracking_complete in a testnet block explorer. The payin quickstart walks through it step by step.
This article is for general information only and is not legal, tax, or financial advice.
Five stablecoin APIs compared for cross-border payments: primary use case, pre-funding requirement, payout regions, and developer experience, plus how to choose by buyer scenario.
Ten stablecoin APIs compared for 2026: BlindPay, Circle, Bridge, BVNK, Fireblocks, Crossmint, Zero Hash, Conduit, Sphere, and Borderless, across rails, custody, pricing, and compliance.
Why a company should treat crypto debit cards and stablecoin cards differently: budget predictability, custody risk, per-swipe tax events, accounting, and spend controls.