> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bridge.linkio.world/llms.txt
> Use this file to discover all available pages before exploring further.

# Time limits

> How long quotes, deposits, and requests last.

Prices move, and bank accounts for deposits don't stay open forever. These are the time limits to plan for.

## At a glance

| What | How long | What happens after |
| - | - | - |
| A quote | **20 seconds** | You can't create a payment with it. Refresh it or get a new one. |
| An unused, expired quote | 10 minutes after it expires | It's deleted. Its ID no longer works. |
| Your customer sending the money (onramp or offramp) | **30 minutes** | The payment fails if no money arrives. |
| A webhook delivery to your server | 10 seconds | We treat it as failed and try again later. |
| An idempotency key | 24 hours | The key can be used again for a new request. |

> [!NOTE]
>
> The quote time is the one you'll notice most. Create the payment as soon as your customer confirms the price. The exact expiry time is always in the quote's `expires_at` field.

## Quotes

A quote holds a price for a short time. Always read `expires_at` instead of assuming a fixed time.

* **Before you create a payment**: if the quote has expired, call [Refresh a quote](https://docs.bridge.linkio.world/api-reference/quotes/refresh.md) to get a fresh price with the same quote ID, or [get a new quote](https://docs.bridge.linkio.world/api-reference/quotes/generate.md).
* **After you create a payment**: the quote is locked to that payment. While the payment is still waiting for your customer's money (`initiated`, `quote_locked`, `fiat_pending`, or `stable_pending`), you can still refresh it to update the price. After the money arrives, the price is final.

Trying to create a payment with an expired quote fails with:

```json theme={null}
{
  "error": {
    "type": "invalid_request_error",
    "code": "quote_expired",
    "message": "Quote qte_9xLp3VnR7tY1wZ4cB6dE8fK2mQ has expired",
    "request_id": "req_3VnR7tY1wZ4cB6dE8fK2mQ9xLp",
    "status": 400
  }
}
```

## Deposits

After you create a payment, your customer has **30 minutes** to send the money:

* **Onramp:** the fiat, by bank transfer or mobile money. For mobile money, ask them to approve the payment on their phone straight away.
* **Offramp:** the stablecoin, to the deposit address.

If nothing arrives in that time, the payment moves to `failed` and you receive a `payment.onramp.failed` or `payment.offramp.failed` webhook. To try again, start with a new quote.

## Your webhook endpoint

Your server must reply within **10 seconds**. If your work takes longer, reply with `200` first and do the work afterwards. See [How webhooks work](https://docs.bridge.linkio.world/webhooks/overview.md#retries).

## Your requests

Most requests return in under a second. Creating a payment calls our payment partners, so it can take longer. If a partner doesn't respond in time, you get a `504` error. See [Status codes](https://docs.bridge.linkio.world/errors/status-codes.md).

> [!TIP]
>
> Always send an [Idempotency-Key](https://docs.bridge.linkio.world/before-you-build/safe-requests.md) when you create a payment. Then if a request times out on your side, you can safely send it again.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.