A locked quote gives the customer a free option on the rate. How providers price it, who can exploit it, and how last look differs from a firm quote.
A locked quote costs the provider money because it gives the customer a free option. For the length of the window, the customer can execute if the market moved against them and walk away if it moved in their favor. The provider carries that risk, so it prices the option into the spread and keeps the window short.
This is the reason behind every quote window you have seen: 5 minutes, 10 seconds, 30 minutes. The window length is a pricing decision, not a UX accident. Who carries FX risk in a stablecoin payout maps the risk step by step. This page puts a number on it.
Key takeaways
Because it gives one side a choice and the other side an obligation. The customer may execute at the locked rate any time before expiry. The provider must honor it. If the market moves so the locked rate beats the new market rate, the customer executes. If it moves the other way, the customer can let it lapse and request a new quote.
Take an off-ramp from USDC to reais. You lock 5.40 BRL per USDC. If the real strengthens and the market drops to 5.37, your 5.40 is now better than the market, so you execute. If the real weakens and the market rises to 5.43, you could wait for expiry and ask again at the higher rate. Heads you win, tails you try again.
A binding quote is the commitment that makes this possible. Indicative rate vs binding quote covers the two kinds of price an API can return. This page is about what the binding kind costs to offer.
A common rule of thumb values an at-the-money option at about 0.4 × volatility × square root of time, as a fraction of the amount. Volatility here is annual, and time is the window length in years. The square root is what makes short windows cheap and long ones expensive.
Illustrative example. Assume 15% annual volatility for a currency pair. This is an assumption for the math, not a market figure.
| Window | Time in years | Option value (0.4 × 15% × √T) | On $100,000 |
|---|---|---|---|
| 10 seconds | 0.00000032 | about 0.34 bps | $3.38 |
| 5 minutes | 0.0000095 | about 1.85 bps | $18.50 |
| 30 minutes | 0.000057 | about 4.53 bps | $45.30 |
| 1 hour | 0.000114 | about 6.41 bps | $64.10 |
| 24 hours | 0.00274 | about 31.4 bps | $314.00 |
Two things fall out. A 5-minute lock is cheap, under 2 basis points on these assumptions. And doubling volatility doubles every number, which is why windows tighten on days when a currency is moving fast.
Compare that with a published price for locks. Stripe's FX Quotes API charges a duration_premium that grows with lock length: 0.12%, 0.15%, and 0.30% for 5 minutes, 1 hour, and 24 hours on its Group 2 currencies, which include BRL, MXN, and COP (Stripe FX Quotes API). The 5-minute premium is well above the textbook option value. The next section explains the gap.
Anyone who requests quotes often and executes selectively. If a customer asks for a quote every minute and only executes when the market has moved in its favor since the lock, the provider loses on every trade that executes. That pattern is called adverse selection, and it costs more than the raw option value.
Three patterns providers watch for:
Providers defend with short windows, limits on how often a customer can quote, monitoring of the quoted-to-executed ratio, and thresholds that cancel a lock when the market jumps. Stripe documents one such threshold: an extended payment quote is invalidated when the rate moves more than 3.5%, and a transfer quote at 1% (Stripe FX Quotes API).
For a normal business paying suppliers or payroll, none of this applies. You quote because you intend to pay. That is the customer providers want, and short windows cost you nothing if you execute right after you quote.
Because the option grows with the square root of time and with size. Doubling the window adds about 41% to the option value; going from 5 minutes to 24 hours multiplies it by about 17. Providers set the window to the shortest time a real customer needs to confirm, and price the rest.
That's why window lengths differ by use case:
| Use case | Typical need | Window that fits |
|---|---|---|
| API payout executed by code | Seconds | Seconds to a few minutes |
| Human reviewing a payout screen | One to three minutes | About 5 minutes |
| Consumer transfer flow | Several minutes | Up to 30 minutes, for example Wise locks the rate for 30 minutes (Wise quote reference) |
| Large OTC trade | Immediate acceptance | Seconds |
| Pricing a catalog in local currency | Hours | 1 to 24 hours, priced as a premium |
BlindPay sits on the short end. Payout quotes lock the exchange rate and fee and expire 5 minutes after creation (payout quotes docs). Payin quotes also last 5 minutes, and OTC payin quotes, priced for BRL into USDT, last 10 seconds (payin quotes docs). Read expires_at, in epoch milliseconds, on every response instead of hardcoding the window. Live quote vs forward contract vs fixed rate covers what to use when you need certainty for days or weeks instead of minutes.
Last look is a second check after you accept. The provider receiving your trade request gets "a final opportunity to accept or reject the request against its quoted price," in the words of the FX Global Code, Principle 17. A firm quote has no such step: accept inside the window and the trade is yours at that price.
Last look shifts part of the option back to you. If the market moved against the provider between quote and acceptance, it can decline, and you are left holding the market risk of a trade that didn't happen. The Code accepts the practice only under conditions (FX Global Code):
For a payout API, the practical question is simple. If you accept a valid, unexpired quote, can the provider still refuse or reprice it? BlindPay's docs describe the quote as a way to "show the customer a firm number before committing to the payout," and a payout executes only against a valid, unexpired quote. What a market maker does explains where last look sits in the wholesale chain behind your quote.
Ask five questions in writing, because each one tells you who holds the option and for how long. The answers should be specific: a number of seconds, a percentage threshold, a yes or no on last look.
These numbers also explain part of the spread. How on/off-ramp providers make money lays out the other revenue lines that sit next to the cost of locking a price.
On a BlindPay development instance, create a payout quote, log expires_at, and execute it within the window. Then let one expire and confirm your code requests a fresh quote instead of retrying the old one. The payout quotes docs show the fields.
Seven places blockchain payments beat bank rails: contractor payroll, remittances, B2B suppliers, marketplaces, 24/7 treasury, bill pay, and PSP payouts.
Push means the payer sends an ACH transfer. Pull means you debit a connected account. How each funds a USD to USDC on-ramp, the fees, and the return risk.
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.