A fiat-to-fiat stablecoin payment is a cross-border payment that starts and ends in ordinary bank money, with a stablecoin in the middle. The sender's currency becomes USDC, the USDC crosses the border on a blockchain or waits in a wallet, and it becomes local currency in the recipient's bank account. Neither end has to hold crypto.
The nickname "sandwich" comes from the shape, bank money on both sides and a stablecoin in the middle. The market structure behind it is covered in new FX structures for stablecoin liquidity; this post stays on the payment itself.
This post is the fiat-to-fiat view, with two worked examples. The route-and-rails view lives in what a stablecoin corridor is, and if the stablecoin itself is new, start with what a stablecoin is.
Why the stablecoin sits in the middle
A wire between two countries rarely goes bank to bank. It hops through correspondent banks, and every hop adds time, a fee and a place to stall. The FEDS Note of March 30, 2026 on payment stablecoins and cross-border payments says that over 60 percent of wholesale payments are routed through one or more intermediaries, and that a stablecoin moving straight from sender to receiver would remove an intermediation fee and shorten the time.
The same note is careful about what that does not remove: moving a stablecoin between two holders is expected to be cheap, and the larger costs may sit where it is exchanged for ordinary currency. The price is made in the two conversions around a cheap middle.
The middle is a dollar stablecoin because both legs are priced against it, so reais to pesos is two pairs, BRL to USDC and USDC to MXN, each with its own quote. The two quotes are separate: the USDC-to-MXN rate is set when the off-ramp is created, not when the on-ramp is, so the price of the last leg can move while USDC waits in the wallet.
On Lumx every conversion is between a fiat currency and USDC or USDT, never between two fiat currencies directly. The wallet that holds USDC between legs is a custodial wallet, provisioned with the customer.
Where is each leg priced, and how does it settle and report?
The three legs of a fiat-to-fiat stablecoin payment: what sets the price, what settles it and where the record lives.
Leg | What happens | Priced by | Settled on | Reported by |
1. On-ramp | Fiat in, stablecoin out | The fiat-to-USDC rate and the ramp's fees | The sender's local rail | The ramp's transaction status and the rail's own reference |
2. Hold or move | The stablecoin waits in a wallet or crosses a network | Network cost, only if it moves between networks or providers | A blockchain, or a balance inside the provider | The wallet balance, or the transaction hash |
3. Off-ramp | Stablecoin in, fiat out | The USDC-to-fiat rate, the payout rail fee and the provider fee | The recipient's local rail | The off-ramp status and the rail's reference, plus UETR and MT103 only if the rail is SWIFT |
Two details matter. When one provider runs both ramps and holds the balance, there is no network transfer between the legs. And the report is rail-specific: a SWIFT payout carries a UETR (the end-to-end tracking reference) and an MT103 confirmation, while a local rail carries its own reference, so a team expecting MT103 on a Pix (Brazil's instant payment system, run by the Central Bank) payout is looking for a document that does not exist.
Coordinating the three legs is the job of payment orchestration with stablecoins. On Lumx each leg is a transaction with its own status and a webhook at each step, so the report is a stream of events and not a statement at the end of the month.
BRL to USDC to MXN, leg by leg
A Brazilian company pays a supplier in Mexico, with no dollar account in the chain.
First leg, Brazil. The company pays in reais over Pix, by scanning a QR code or pasting the code the stablecoin on-ramp returns.
Last leg, Mexico. The USDC sits in the company's wallet until it triggers an off-ramp to the supplier's bank account. The USDC becomes pesos and lands over SPEI (Mexico's interbank transfer system, run by Banxico), addressed to the supplier's CLABE (the 18-digit Mexican bank account number).
Leg by leg for a Pix to SPEI payment.
Leg | Priced | Settled | Reported |
BRL to USDC by Pix | BRL/USDC rate, floating or locked (BRL to USDC) | Pix, 24/7, no cut-off | On-ramp status events and the Pix payment reference |
USDC in the wallet | No conversion, no spread | A balance in the customer's custodial wallet | Wallet balance with its last-updated time |
USDC to MXN by SPEI | USDC/MXN rate, floating or locked (USDC to MXN) | SPEI, 24/7, no cut-off | Off-ramp status events and the SPEI reference |
The implied BRL-to-MXN rate is the product of the two legs, so the spread is paid twice, once in each conversion. That is the price of this structure, so compare delivered pesos, not the rate on either leg. Both rails run every day of the year, so this payment can complete on a Sunday night in minutes.
An illustration with made-up rates, not a quote. The rates already include each leg's spread.
Step | Calculation | Result |
Sender pays | BRL 50,000 by Pix | BRL 50,000 |
On-ramp, BRL to USDC | 50,000 / 5.02 | about 9,960 USDC |
Off-ramp, USDC to MXN | 9,960 x 16.93 | MXN 168,623 |
Delivered rate | 168,623 / 50,000 | 3.372 MXN per BRL |
Mid-market reference | 17.00 / 5.00 | 3.400 MXN per BRL |
The 0.8% between 3.372 and 3.400 is the two spreads together, and it is the number to hold against a wire quoted for the same BRL 50,000.
On Lumx the supplier is registered once as a destination with the holder relationship SUPPLIER, verified before the first payout, and the destinations.approved webhook says when it is ready. On a SPEI payout the sender of record is the customer.
USD to USDC to BRL, leg by leg
A US company pays a Brazilian supplier from a dollar bank account.
First leg, United States. The company sends dollars by ACH or FEDWIRE (the Federal Reserve's same-day wire system) to the deposit details the on-ramp returns, for the exact amount it created the on-ramp with. On Lumx, ACH is credit (push) only, with no ACH debit.
Last leg, Brazil. The USDC waits in the wallet until an off-ramp pays the supplier over Pix to a CPF (the Brazilian individual taxpayer ID) or CNPJ (the Brazilian company taxpayer ID) key.
Leg by leg for an ACH or FEDWIRE to Pix payment.
Leg | Priced | Settled | Reported |
USD to USDC by ACH or FEDWIRE | USD/USDC rate (USD to USDC) | ACH in 1 to 2 business days (cut-off 2:00 PM ET), FEDWIRE the same business day (cut-off 3:00 PM ET) | On-ramp status events and the bank's own reference |
USDC in the wallet | No conversion | A balance in the customer's custodial wallet | Wallet balance |
USDC to BRL by Pix | USDC/BRL rate (USDC to BRL) | Pix, 24/7, no cut-off | Off-ramp status events and the Pix reference |
The slow leg is the first, and it belongs to the sender's bank, not the stablecoin. An ACH deposit takes one to two business days either way, while FEDWIRE keeps the whole payment inside the same business day if it goes in before its 3:00 PM ET cut-off, and the Pix leg finishes it at any hour. After a cut-off, the payment waits for the next US business day. The total is the slowest rail plus minutes.
On Lumx the USD account details come from the on-ramp response, and a deposit has to match an on-ramp created in advance with the exact amount. A deposit that arrives after the on-ramp expires is refunded to the sender on the same rail. On a Pix payout the recipient sees the customer's registered legal name as the payer, not Lumx.
An illustration with made-up rates, not a quote. The rates already include each leg's spread.
Step | Calculation | Result |
Sender pays | USD 10,000 by FEDWIRE | USD 10,000 |
On-ramp, USD to USDC | 10,000 less 0.3% | 9,970 USDC |
Off-ramp, USDC to BRL | 9,970 x 5.40 | BRL 53,838 |
Mid-market reference | 10,000 x 5.45 | BRL 54,500 |
The BRL 662 gap, about 1.2%, is what the two conversions cost in this illustration.
Where the cost of a fiat-to-fiat payment sits
Five lines make up the price, and only one of them is the blockchain: the on-ramp spread (zero if the sender already holds USDC), the network cost of moving the stablecoin (nothing when the provider keeps the balance, and Lumx subsidizes the network fee on its legs), the off-ramp spread (the line that varies most), the payout rail fee and the provider's own fee. The off-ramp explainer covers the payout side, and cross-border payment costs in 2026 gives market context.
<!-- OPERATOR PARAGRAPH --> I would judge any fiat-to-fiat stablecoin payment by one number: what lands in the recipient's account for the amount that left the sender's, after every leg. Comparing on the network fee looks at the cheapest leg, and the headline spread is one of two conversions. I ask for one live quote at the real ticket size, run it in both directions when the corridor will be used both ways, and put the delivered amount next to the last wire the team sent. If the quote does not beat the wire at that size, this route is not the answer for that corridor yet.
On Lumx the documentation's own sample shows how that one number looks. A locked quote for a BRL 59,255.50 Pix deposit returns a base amount of 10,000 USDC and a final amount of 9,978 USDC, so the gap shows up in one response (0.22% in that sample, an example and not a price list). The sample uses a 1-minute lock, so the gap is the Lumx fee plus the lock fee, with no FX margin built in. A 30-second lock carries no lock fee. The pricing model is a monthly platform fee plus usage-based per-transaction fees, transparent FX on locked quotes, no pre-funding; no published plans. No pre-funding means no capital parked in settlement accounts before a payment: conversion and settlement happen when the transaction starts, which is compatible with holding a USDC balance in your wallet. On a payout over Pix or SPEI, Lumx does not take a fee out of the amount that reaches the recipient, and only the recipient's bank can charge them.
What can go wrong between the legs
Four things do not change because a stablecoin is in the middle.
Compliance holds. KYC (know your customer, the verification of an individual) and KYB (know your business, the verification of a company and its owners) apply at both ends, with sanctions screening and monitoring. A payment can be held for a request for information at either end.
Quote expiry. A locked rate holds for a window, and after it the price may move.
Issuer risk. A stablecoin is only as good as its reserves and its redemption. We cover the largest one in what USDC is.
Thin pairs. A deep USDC market does not make a deep market for every local currency.
On Lumx a locked rate comes in three windows: 30 seconds with no fee, and one or five minutes with a fee that covers the volatility risk. An on-ramp paid by floating rate over Pix or SPEI expires in one day, and in seven days on other rails. When Lumx's monitoring flags a transaction it is held as an RFI (request for information, a compliance hold that asks for a document before a transaction clears) until the document arrives.
When a fiat-to-fiat stablecoin payment is the wrong tool
When both parties are in the same country, the domestic rail is the answer and a stablecoin adds two conversions for nothing. When the recipient wants to hold dollars, the stablecoin is the destination and the payment is a single on-ramp. When the destination has no local rail the provider operates, the last leg is a SWIFT wire, and calling that a stablecoin payment hides the days it takes.
On Lumx, when the last leg has no local rail, USD goes out by SWIFT with UETR and MT103 confirmations, and a euro payment runs as an off-ramp from USDC to EUR over SEPA.
What these payments look like on Lumx
Lumx is stablecoin payments infrastructure for businesses that move money between Latin America and the rest of the world: one API to collect, hold, convert, and pay out in BRL, MXN, COP, USD, EUR, and GBP or in USDC and USDT, over local rails such as PIX, SPEI, PSE, Bre-B, ACH, FEDWIRE, SEPA, and Faster Payments, with SWIFT and on-behalf-of payments and collections (POBO and COBO) in USD, EUR, and GBP, plus named virtual accounts, custodial wallets, and KYB/KYC built in.
The customer is onboarded with KYB, an on-ramp returns the Pix code or the bank details, and an off-ramp pays a registered destination. An autoconversion rule can turn every fiat deposit into stablecoin without a per-deposit call. The wallet holds USDC on Ethereum, Polygon and Base, and USDT on Ethereum, Polygon and Tron (Stellar is only for the BRL-to-USDC on-ramp), and the rails and settlement times are on the coverage page.
The product page is global payments. The regional view is in cross-border payments in Latin America, and the operator map shows who runs each leg.
Methodology and sources
Product behavior was read on November 1, 2026 from the Lumx documentation: Transactions, Exchange rates, Wallets, Coverage, Payment rail cut-off times, Webhooks and Sender of record. Intermediaries come from the Federal Reserve FEDS Note of March 30, 2026. The 0.22% is computed from the exchange-rates sample, which uses a 1-minute lock. The two tables of amounts use made-up rates. Brazil's transition regime is in Res. BCB 520/2025, Art. 88.
Verified on November 1, 2026. Operational context, not legal, tax, or investment advice.
Cover photo: Robert Keane on Unsplash.
What is a fiat-to-fiat stablecoin payment?
A fiat-to-fiat stablecoin payment is a cross-border payment that starts and ends in bank money with a stablecoin in the middle. The sender's currency becomes USDC, USDC crosses the border, and it becomes local currency in the recipient's bank account. It has three legs: an on-ramp, a hold or transfer, and an off-ramp. On Lumx each leg is its own transaction with its own status and webhook, around one custodial wallet.
Does the recipient need a crypto wallet?
No. The recipient needs a bank account and the usual details for the rail: a Pix key or CPF in Brazil, a CLABE in Mexico, an account and routing number in the United States. On Lumx the recipient only ever sees a bank credit.
How long does a fiat-to-fiat stablecoin payment take?
As long as the slowest rail plus minutes. Pix and SPEI settle at any hour, FEDWIRE settles the same business day, ACH takes one to two business days and SWIFT takes one to five. On Lumx the settlement time of each rail is on the coverage page.
Is a fiat-to-fiat stablecoin payment cheaper than a SWIFT wire?
It can be, and the only way to know is to quote the same amount both ways. A wire can pass through correspondent banks that deduct fees the sender does not control, while a stablecoin payment puts the cost in two visible conversions. On Lumx a SWIFT payout in USD is available too, with UETR and MT103 confirmations, so the same customer can price both routes side by side.
Is a fiat-to-fiat stablecoin payment legal, and who is the sender of record?
Both ends go through KYC and KYB, and the sender of record, the name on the recipient's bank statement, is on Lumx the customer's registered legal name on SPEI, ACH, FEDWIRE, SEPA, FPS, SWIFT and Pix payouts. In Brazil, Lumx has applied for SPSAV authorization and operates under the transition regime (Res. BCB 520/2025, Art. 88).





