---
title: "How long does a payment quote last? Quote windows compared across providers in 2026"
seoTitle: "How long does a payment quote last? Providers compared"
description: "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."
date: "2026-10-16"
updated: "2026-10-16"
category: "payments"
author: "BlindPay Team"
faq:
  - q: "How long does a payment quote last?"
    a: "It depends on the provider and the product. As of October 2026, BlindPay payout and payin quotes last 5 minutes, with 10 seconds for OTC Pix payin quotes. Stripe's FX Quotes API offers 5-minute, 1-hour, and 24-hour locks. Wise locks a quote's rate for 30 minutes. Some on-ramp quotes are estimates that settle at the rate on execution, so the window matters less than whether the price is locked at all."
  - q: "Why do payment quotes expire so quickly?"
    a: "Because a locked quote is a promise to trade at a fixed price while the market keeps moving. The longer the window, the more the provider can lose if rates move against it, so longer locks cost more. Stripe prices this openly: its extended rate quotes add a premium that grows from 5 minutes to 1 hour to 24 hours."
  - q: "How long is a BlindPay quote valid?"
    a: "Payout quotes, payin quotes, and transfer quotes default to 5 minutes. OTC Pix payin quotes, which are BRL-only, expire in 10 seconds. SEPA and Faster Payments payout quotes can be shorter than 5 minutes, because those rails have their own deadlines. BlindPay's docs say to read expires_at, in epoch milliseconds, from every response instead of assuming a fixed lifetime."
  - q: "Is a quote that refreshes every minute the same as a locked quote?"
    a: "No. A refreshing quote tells you the current price, but the amount you get can still change before settlement. Transak's Get Quote docs, for example, describe a temporary quote refreshed every minute and a crypto amount based on the latest rate at settlement. A locked quote fixes the rate and fees for its whole window, so the amount you saw is the amount that executes."
  - q: "What happens when a payment quote expires?"
    a: "The provider rejects any attempt to use it, and you request a new one at the current rate. Stripe sends an fx_quote.expired webhook and returns an error code if you attach an expired quote. On BlindPay, executing a payout against an expired quote fails, so the standard pattern is to re-quote, show the new amounts, and confirm again."
  - q: "Should I choose a provider with a longer quote window?"
    a: "Only if your flow needs it. A 5-minute window covers an API call followed by a confirmation screen. A 24-hour lock helps when you publish prices in local currency for a day, and it costs more. Match the window to the time between showing the amount and executing the payment, then compare what each provider charges for that length."
---

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](/resources/more/handle-expired-quotes-typescript-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.

| Provider | What is quoted | Window | Locked? | Source |
| --- | --- | --- | --- | --- |
| BlindPay | Payout quote (stablecoin to bank account) | 5 minutes; can be shorter on SEPA and Faster Payments | Yes, rate and fees | [Cut-off times](/docs/kb/cut-off-times) |
| BlindPay | Payin quote (bank deposit to stablecoin) | 5 minutes; OTC Pix payin quotes 10 seconds | Yes, rate and fees | [Payin quotes](/docs/payin-quotes) |
| BlindPay | Transfer quote | 5 minutes, fixed | Yes | [Cut-off times](/docs/kb/cut-off-times) |
| Stripe FX Quotes API (preview) | FX rate for payments and transfers | 5 minutes, 1 hour, or 24 hours | Yes, within a rate threshold | [Stripe docs](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api) |
| Wise | Transfer quote | 30 minutes | Yes, mid-market rate | [Wise docs](https://docs.wise.com/api-reference/quote) |
| MoonPay | Buy quote | `expiresIn`; the reference example shows 1,800 seconds | Docs show an expiry, not a lock label | [MoonPay reference](https://dev.moonpay.com/reference/getbuyquote) |
| Transak | Whitelabel quote | Refreshed every minute | No, settles at the latest rate | [Transak docs](https://docs.transak.com/api/whitelabel/lookup/get-quote.md) |
| Bridge | Exchange rate | Updated roughly every 30 seconds | No, estimate only | [Bridge docs](https://apidocs.bridge.xyz/api-reference/exchange-rates/get-current-exchange-rate-between-two-currencies.md) |
| Coinbase Offramp | Cash-out transaction | 30-minute transaction window | Window, not a price lock | [Coinbase docs](https://docs.cdp.coinbase.com/onramp/offramp/offramp-overview.md) |

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](/resources/more/locked-quote-free-option-last-look) 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](/resources/more/otc-quote-vs-standard-quote) 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 duration | Premium | Added cost on $10,000 |
| --- | --- | --- |
| 5 minutes | 0.12% | $12.00 |
| 1 hour | 0.15% | $15.00 |
| 24 hours | 0.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](/docs/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 case | Time between quote and execute | Window that fits |
| --- | --- | --- |
| API payout with instant confirmation | Seconds | 5 minutes |
| Payout with a human approval step | Minutes | 5 minutes, re-quote if approval runs long |
| Large OTC conversion | Seconds, prepared in advance | Seconds |
| Prices published in local currency for a day | Hours | 1 to 24 hours, and pay the premium |
| Consumer checkout that settles at market | Minutes | Any, 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](/resources/more/quote-api-latency-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](/resources/more/stablecoin-api-quotes-explained) covers what a BlindPay quote locks field by field, and [how on/off-ramp providers make money](/resources/more/how-onramp-offramp-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](/docs/payout-quotes) list every field.
