A stablecoin payment moves in legs: fiat collected, stablecoin settled, fiat paid out. What happens at each step, where delays hide, what recipients see.
A stablecoin payment moves money in three legs. Fiat is collected from the payer, the value settles on a blockchain as a dollar stablecoin like USDC or USDT, and an off-ramp converts it back into local currency and pays the recipient's bank account. A stablecoin API runs all three from one integration, so neither side has to touch crypto.
That's the short version. The longer version matters because each leg has its own timing, its own failure modes, and its own definition of "done." If your product shows "paid" at the wrong moment, support tickets follow.
Four building blocks show up in almost every provider's API. The names vary. The jobs don't.
| Building block | What it does | Who sees it |
|---|---|---|
| Payin | Collects fiat from a payer (ACH, wire, Pix, SPEI) and delivers stablecoins to a wallet | The payer sees bank instructions |
| Wallet | Holds the stablecoin balance between legs, either custodied by the provider or controlled by the customer | Usually nobody but your backend |
| Quote | Locks the exchange rate, fees, and amounts for a short window before money moves | Your UI, as a firm number |
| Payout | Pulls stablecoins from a wallet, converts them, and sends fiat to a bank account | The recipient sees a local deposit |
An on-chain transfer between two wallets is a fifth piece, but in a bank-to-bank flow it's plumbing. The payer sends dollars. The supplier receives reais. The stablecoin sits in the middle for minutes.
Take a US company paying a supplier in Brazil. Each step below is labeled: generic means the pattern holds across stablecoin APIs, BlindPay means it's how our API documents it.
Step 0: onboarding (generic, and BlindPay). Before money moves, the sender is verified. Individuals go through KYC, companies through KYB, and both get screened against sanctions lists. In BlindPay's API every payment flows through a customer that has completed KYC. BlindPay runs the verification; you collect the data. Standard KYC takes about 60 seconds, and KYB takes 3 hours to 1 business day because a person reviews it (onboarding SLAs).
Step 1: collect fiat (generic). The US company sends dollars by ACH or wire. Two ways to tell the payer where to send: a one-time instruction (a shared account plus a reference code) or a dedicated account number in the customer's name. BlindPay: without a virtual account, an ACH or wire payin returns a memo_code plus BlindPay's bank details. With one, the payer sees the customer's own routing and account number.
Step 2: convert to stablecoin (generic). When the deposit clears, the provider converts dollars to USDC or USDT and delivers them to a wallet. BlindPay: the payin fires payin.complete once stablecoins land in the destination wallet, either a managed wallet BlindPay custodies or an external wallet the customer controls (payins).
Step 3: quote the payout (generic). Before paying the supplier, you request a quote: the rate, the fee, and exactly how many reais arrive. BlindPay: a payout quote is created against the recipient's bank account and expires after 5 minutes. Amounts are integers in minor units, so 10000 is $100.00 (payout quotes).
Step 4: move the stablecoin (generic). The stablecoins leave the wallet. If the provider custodies the wallet, it moves them. If the customer holds the keys, they authorize the pull on-chain first. BlindPay: a managed wallet needs no signing. An external EVM wallet signs an ERC-20 approve for the quoted amount; Stellar and Solana have their own authorization steps (payouts).
Step 5 and 6: convert and pay out (generic). The off-ramp converts USDC to BRL and sends it over Pix. BlindPay: one call to create the payout against the quote. Pix, SPEI, ACH, RTP, SEPA, and SWIFT (POBO/COBO) are live payout rails, and none of them needs you to pre-fund a local account.
Step 7: confirm (generic). The provider reports status changes asynchronously. BlindPay: payout.new, payout.update, and payout.complete webhooks, signed, one endpoint per instance.
This is where most payment UIs get it wrong.
The on-chain leg settles in seconds to a few minutes, and a confirmed transfer is final. But the supplier hasn't been paid yet. They've been paid when reais land in their account, and that depends on the payout rail:
| Payout rail (BlindPay) | Estimated arrival |
|---|---|
| Pix (Brazil), SPEI (Mexico), Transfers (Argentina), RTP (US) | Instant |
| Wire (US), SEPA (Europe), ACH COP (Colombia) | About 1 business day |
| ACH (US) | About 2 business days |
| SWIFT | About 5 business days |
These are BlindPay's published estimates from the bank accounts reference. Rails with cut-offs (ACH, wire, SWIFT) slip to the next business day when a request arrives late, and compliance review can add time on top. So: show "sent" when the stablecoin leg confirms, show "paid" when the payout completes. Two different states. Two different events. Every rail's cut-off and settlement window is in the cut-off times reference.
At the edges, not in the middle.
on_hold for manual review. In BlindPay's API all USD ACH, wire, RTP, and SWIFT payouts pass through on_hold as a standard step, and SWIFT payouts to third parties wait for supporting documents. A hold can take up to 30 days to resolve.failed or refunded. A refund returns the stablecoins to the funding source instead of converting them. A failed payout does not refund automatically, so it needs a follow-up with support.Stablecoin refunds process right away. Fiat refunds wait for the banking network to return the money, which depends on that bank's processing time.
Stablecoin settlement pays off when money crosses a border or a currency. That's where correspondent banks add days, stack fees at each hop, and make you park capital in local accounts before you can pay anyone. A stablecoin in the middle replaces that chain with one on-chain hop and two local rails. It's also the reason a provider can pay out without pre-funding: the value arrives as stablecoin and leaves as local currency at quote time.
It's overkill when both sides share a country and a fast domestic rail. A Brazilian company paying a Brazilian supplier should use Pix. A US payroll run to US bank accounts should use ACH or RTP. No stablecoin needed.
There's a middle case worth naming: platforms that hold customer balances in dollars across several countries. There, the wallet leg isn't plumbing at all. It's the product. That's a different job from a payout API, and the line between the two is covered in stablecoin API vs crypto payment gateway and is Stripe a stablecoin API.
500000 is 5,000.00, never 500,000.00.BlindPay is a stablecoin API for cross-border payouts and collections: USDC or USDT in, local currency out over Pix, SPEI, ACH, RTP, SEPA, and SWIFT (POBO/COBO) to 100+ countries, with no pre-funding. KYC, KYB, and sanctions screening run inside the API. Virtual USD accounts give each customer a dedicated account number whose deposits settle to stablecoins automatically.
Trace one payment end to end before you design a single screen. Create a free development instance, run a payin, then a payout, and watch every webhook arrive. The payout quickstart walks the whole flow, and the introduction explains the quote, authorize, execute pattern every endpoint follows.
This article is for general information only and is not legal, tax, or financial advice.
AP2, ACP, and x402 each verify that an AI agent had permission to spend. What each covers, who backs it, and the reconciliation gap none close.
Seven stablecoin payment platforms compared for US fintechs in 2026: production readiness, compliance, settlement speed against ACH, and evaluation.
How to choose a stablecoin payment provider in 2026: the four provider types, a comparison of 10 options, and the questions that decide the fit.