You carry FX risk until you lock a quote, the provider carries it inside the window, and it comes back to you on a refund. Step-by-step map and math.
In a stablecoin payout, FX risk moves between parties. The sender carries it until a quote is locked. The provider carries it from the quote until the recipient is paid, as long as the payout executes inside the window. If the payout is refunded in stablecoins, the risk is the sender's again. Quotes expire because that middle stretch costs the provider money.
Knowing who holds the risk at each step tells you where a bad rate can come from, and which design choices actually reduce it.
Key takeaways
FX risk is the chance that the exchange rate moves between the moment you decide an amount and the moment money lands. Whoever's amount changes when the rate moves is the party carrying it.
The market behind that rate never sleeps on weekdays. The BIS 2025 Triennial Survey put global FX trading at $9.6 trillion per day in April 2025, with the US dollar on one side of 89% of trades. Prices update continuously, so any gap between pricing and delivery is exposure.
There are two kinds of FX risk in a payout. Market risk is the rate moving. Settlement risk is one side of a trade being delivered while the other is not: the BIS estimated that $2.2 trillion of daily FX turnover was still exposed to settlement risk in April 2022. This article is about market risk. Herstatt risk explained covers the settlement side.
The table follows a USDC to BRL payout over Pix from the moment you owe money to the moment the recipient holds reais.
| Step | What happens | Who carries FX risk | Why |
|---|---|---|---|
| 1. Before a quote | You hold USDC and owe an amount in BRL | Sender | No rate is fixed, so the USDC cost of your BRL bill moves |
| 2. Quote created | The provider returns a rate, fees, and expires_at | Provider | A binding quote fixes receiver_amount |
| 3. Executed in the window | Stablecoins are pulled, conversion starts | Provider | The payout runs against the locked quote |
| 4. Fiat on the rail | Pix delivers in minutes, other rails take longer | Provider | The recipient amount was fixed at step 2 |
| 5. Quote lapses unused | Nothing moves | Sender | The next quote is priced at the new market rate |
| 6. Payout refunded | Stablecoins come back to a wallet | Sender | You are back at step 1 |
| 7. Recipient paid | Reais sit in a Brazilian account | Recipient | Their local currency is now their exposure |
Steps 2 to 4 are the only stretch where the provider holds the risk. Everything a provider does to price, shorten, or hedge that stretch shows up in your rate.
Because a binding quote is a free option for the sender. During the window, the sender watches the market for free. If the rate moves against the provider, the sender executes. If it moves the sender's way, the sender can let the quote die and ask for a better one.
The provider cannot refuse the bad side of that bet, so it charges for it inside the spread. The longer the window, the larger the possible move, and the more the option is worth.
A common rule of thumb scales volatility with the square root of time: the typical move over a window is about daily volatility x √(window / 1 day).
Illustrative example. Assume a currency pair with 1.0% daily volatility and a $50,000 payout.
| Window | Calculation | Typical move | On $50,000 |
|---|---|---|---|
| 10 seconds | 1.0% x √(10 / 86,400) = 1.0% x 0.0108 | about 1.1 bps | about $5 |
| 5 minutes | 1.0% x √(5 / 1,440) = 1.0% x 0.0589 | about 5.9 bps | about $29 |
| 1 hour | 1.0% x √(60 / 1,440) = 1.0% x 0.2041 | about 20.4 bps | about $102 |
A one-hour window carries roughly 3.5 times the move of a five-minute window. The provider either widens the spread to cover it or stops binding the quote. Either way, the sender pays.
Because the risk is different. BlindPay's payin, payout, and transfer quotes last 5 minutes by default, per the cut-off times reference. Two exceptions follow the risk:
Transfer quotes are the odd one out: there is no currency conversion, so the window locks the amount and destination rather than a rate.
The practical rule: read expires_at from every payout quote response, and note it is in epoch milliseconds. Never hardcode a window.
It comes back to you. At BlindPay, if a payout cannot be delivered after the stablecoins are collected, BlindPay refunds them to the quote's refund wallet, or to the sending wallet when none is set. On Pix and other non-USD local rails the refund is automatic, while USD payouts and payouts whose review times out are refunded after an operator review.
The refund is in stablecoins, so the refund itself carries no FX loss. The loss shows up when you re-send. If the recipient still needs R$53,700 and the rate has moved from 5.37 to 5.32 BRL per USDC since the first quote, the second payout costs 10,093.98 USDC instead of 10,000 (illustrative: 53,700 / 5.32 = 10,093.98). That 93.98 USDC is the market move you carried after the refund.
Stablecoin payout statuses explains how failed and refunded differ.
The same logic runs in reverse. A payin quote locks the fiat amount the payer sends and the stablecoin amount the wallet receives. You create the payin from it within 5 minutes, and then the payer sends the money.
What changes is the wait for the deposit. For a standard Pix payin, BlindPay waits up to 30 minutes before marking it failed, with a reconciliation check first, according to the payins reference. OTC Pix payins wait until 23:59 Brasília time instead. If an OTC deposit never arrives, a flat $100.00 penalty is added to the quote's billing fee.
That penalty is risk allocation written down: a large price was held for a deposit that never came, and the party who did not send pays for it.
It can. The FX Global Code, the conduct code for wholesale FX, defines last look in Principle 17 as a final opportunity for the quoting firm to accept or reject a trade request against its quoted price, and requires firms that use it to disclose how.
A provider with last look, or one that settles at "the rate at execution", has handed the window risk back to you without changing the screen. The BIS Markets Committee made a related point about FX execution algorithms: they shift execution risk from dealers to users.
So ask every provider two questions. Is the quote binding if I execute before expiry? Can you reject or reprice after I execute? At BlindPay, a payout can only execute against a valid, unexpired quote, and the quote's receiver_amount is what the bank account receives.
Keep the risky stretches short and visible.
expires_at passes, fetch a new quote and highlight the change only if the amount moved.The vocabulary used here (binding quote, window, spread, re-quote) is defined in the on/off-ramp liquidity glossary. For how liquidity sources shape the quote you get, see onchain liquidity vs off-ramp liquidity.
How we know: BlindPay facts come from the payout quotes, payins, and cut-off times documentation. Market figures come from the BIS and the FX Global Code, linked above.
Create one payout quote for your main corridor from the payout quotes docs, note its expires_at, and request a second quote five minutes later. The difference between the two is the risk you would have carried without a binding quote.
This article is general information, not legal, tax, or financial advice.
Seven places blockchain payments beat bank rails: contractor payroll, remittances, B2B suppliers, marketplaces, 24/7 treasury, bill pay, and PSP payouts.
AP2, ACP, and x402 each verify that an AI agent had permission to spend. Here is what every protocol covers, who backs it, and the reconciliation gap none of them close.
The three roles behind every card program, stablecoin cards included: what each one does, who carries liability, and what to ask a provider.