How long does a payment quote last? Quote windows compared across providers in 2026

Quote windows as of October 2026: BlindPay, Stripe FX Quotes, Wise, MoonPay, Transak, Bridge, Coinbase. What each locks, for how long, and at what cost.

Payment quotes last anywhere from seconds to a day. As of October 2026, BlindPay payout and payin quotes last 5 minutes (10 seconds for OTC Pix payin quotes), Stripe FX Quotes lock for 5 minutes, 1 hour, or 24 hours, and Wise holds a quote's rate for 30 minutes. Some on-ramp quotes aren't locked at all.

So the useful question isn't only "how long." It's "what exactly is locked, for how long, and what does the lock cost?" This page compares the published answers. For how expiry works inside one BlindPay integration, handling expired quotes in TypeScript and Python has the code.

Key takeaways

  • Quote windows range from 10 seconds (OTC) to 24 hours (Stripe's longest FX lock).
  • A refreshing estimate is not a lock. Check whether the amount can change between quote and settlement.
  • Longer locks cost more. Stripe publishes the premium per duration.
  • BlindPay quotes default to 5 minutes, but SEPA and Faster Payments payout quotes can be shorter. Read expires_at.
  • Pick the window from your flow: the time between showing an amount and executing it.

How long do quotes last at each provider?

Here is what each provider's own documentation says, as of October 2026.

ProviderWhat is quotedWindowLocked?Source
BlindPayPayout quote (stablecoin to bank account)5 minutes; can be shorter on SEPA and Faster PaymentsYes, rate and feesCut-off times
BlindPayPayin quote (bank deposit to stablecoin)5 minutes; OTC Pix payin quotes 10 secondsYes, rate and feesPayin quotes
BlindPayTransfer quote5 minutes, fixedYesCut-off times
Stripe FX Quotes API (preview)FX rate for payments and transfers5 minutes, 1 hour, or 24 hoursYes, within a rate thresholdStripe docs
WiseTransfer quote30 minutesYes, mid-market rateWise docs
MoonPayBuy quoteexpiresIn; the reference example shows 1,800 secondsDocs show an expiry, not a lock labelMoonPay reference
TransakWhitelabel quoteRefreshed every minuteNo, settles at the latest rateTransak docs
BridgeExchange rateUpdated roughly every 30 secondsNo, estimate onlyBridge docs
Coinbase OfframpCash-out transaction30-minute transaction windowWindow, not a price lockCoinbase docs

Two notes on the table. Bridge's docs say plainly that it does not offer a quote that locks a rate for a period of time; its rate is "provided only as a courtesy to estimate." And Coinbase's 5-minute limit applies to session tokens, which are single-use access tokens for the onramp, not a price.

Why do quote windows differ so much?

Because each provider is taking a different risk. A locked quote is a promise to trade at a fixed price while the market keeps moving. If the rate moves against the provider before you execute, the provider loses the difference. That promise behaves like an option, and options cost more the longer they last. Why a locked quote costs money walks through the mechanics.

Three things set the window:

  1. Who carries the rate risk. A provider that locks the price carries it. One that settles at the latest rate passes it to you.
  2. The rail's own deadline. BlindPay's docs say SEPA and Faster Payments payout quotes can be shorter than 5 minutes because the underlying rail's deadline can be tighter.
  3. Size. Larger tickets move more money per basis point, which is why BlindPay's OTC payin quotes last 10 seconds. OTC vs standard quotes covers that trade.

What does a longer lock cost?

Stripe is the clearest public example, because it prices each duration. Its FX Quotes API adds a duration_premium to the base rate. For currencies in its Group 2, which includes BRL, MXN, and COP, the premium is 0.12% for 5 minutes, 0.15% for 1 hour, and 0.30% for 24 hours. Group 1 currencies such as EUR and GBP cost 0.07%, 0.10%, and 0.20%.

The lock also has limits. Stripe says an extended quote for payments is invalidated if the rate moves more than 3.5%, and one for transfers if it moves more than 1%. Then lock_status changes to expired.

Illustrative example. A US platform prices a R$ purchase worth $10,000 using Stripe's Group 2 premiums:

Lock durationPremiumAdded cost on $10,000
5 minutes0.12%$12.00
1 hour0.15%$15.00
24 hours0.30%$30.00

Going from 5 minutes to a day more than doubles the cost of certainty. If your customer confirms within a minute, the 24-hour lock buys nothing.

Is a refreshing quote the same as a locked quote?

No, and this is where most comparisons go wrong. A quote that refreshes every minute shows the current price, but the amount can still change before settlement.

Transak's Get Quote docs describe a "temporary price quote" that is "refreshed every minute," and say the crypto amount at settlement is "based on the latest exchange rate at that moment." Bridge's exchange rate endpoint is an estimate. Both are honest designs for their products. They just don't promise the amount.

A locked quote does. BlindPay payout quotes return sender_amount and receiver_amount along with the rate and fee lines, and those numbers hold until expires_at (payout quotes). That's the property that lets you show a recipient the exact amount before you pay.

Which window fits your use case?

Match the window to the gap between showing a number and executing it.

Use caseTime between quote and executeWindow that fits
API payout with instant confirmationSeconds5 minutes
Payout with a human approval stepMinutes5 minutes, re-quote if approval runs long
Large OTC conversionSeconds, prepared in advanceSeconds
Prices published in local currency for a dayHours1 to 24 hours, and pay the premium
Consumer checkout that settles at marketMinutesAny, but expect the amount to move

Approvals are the common trap. If a finance lead needs 20 minutes to approve a payout, no 5-minute quote survives. The fix is to approve the payout parameters first and request the quote right before execution. Quote API latency and timeouts shows how much of the window your own calls use up.

What happens when a quote expires?

You get a new one. Every provider in the table rejects an expired quote:

  • Stripe sends an fx_quote.expired webhook and returns payment_intent_fx_quote_invalid or transfers_fx_quote_invalid if you use one anyway.
  • BlindPay rejects a payout executed against an expired quote, so you re-quote, show the new amounts, and confirm again.
  • Wise quotes carry a rateExpirationTime field so you can show how long the rate holds.

The pattern is the same everywhere. Never cache a quote, never show a stale amount, and treat expiry as a normal path in your code, not an error. Stablecoin API quotes explained covers what a BlindPay quote locks field by field, and how on/off-ramp providers make money explains where the lock's cost ends up in the price.

What to do next

Request a BlindPay payout quote on a development instance and log expires_at next to the time you received it. Then measure how long your own confirmation step takes. The payout quotes docs list every field.

FAQ