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

# Rate limits

> How many requests each key and agency can make, the headers that tell you where you stand, and what to do at the limit.

## The limits

| Limit | Applies to | Window |
| - | - | - |
| 60 requests | Each API key, across every endpoint | Per minute |
| 500 quotes | Each live API key, calls to `POST /v1/quotes` | Per day |
| 2,000 quotes | Your whole agency, all live keys together, calls to `POST /v1/quotes` | Per day |
| 200 quotes | Each test API key, calls to `POST /v1/quotes` | Per day |
| 500 quotes | Your whole agency, all test keys together, calls to `POST /v1/quotes` | Per day |

Windows are fixed, not rolling. The minute resets at the start of each minute, and the day at midnight UTC.

The agency limit means several live keys can't add up to more than 2,000 quotes a day between them. Test quotes are counted separately, against their own limits, so building and testing never use up your live allowance. If you need more headroom during the beta, tell your Bridgeline contact.

## What counts

Every authenticated request counts, whatever its outcome. That includes requests we reject as invalid (`422`), idempotent replays, and requests refused for being over a limit. So:

* **Validate before you send.** A `422` costs a quote from your daily allowance. Don't retry it unchanged.
* **Don't poll hard.** Checking quotes for a client's response uses the same 60 a minute as everything else. See [checking for a response](/guides/hosted-quote-page#checking-for-a-response).
* **Back off on `429`.** Hammering a limit keeps it full.

## The headers

Every response to an authenticated request, errors included, tells you where you stand against whichever limit is closest to running out:

```http theme={null}
RateLimit-Limit: 60
RateLimit-Remaining: 57
RateLimit-Reset: 42
```

| Header | Meaning |
| - | - |
| `RateLimit-Limit` | The size of that limit |
| `RateLimit-Remaining` | Requests left in the current window |
| `RateLimit-Reset` | Seconds until the window resets |

## At the limit

Over a limit, you get `429` with a `Retry-After` header giving the seconds to wait:

```http theme={null}
HTTP/1.1 429 Too Many Requests
Retry-After: 18
RateLimit-Limit: 60
RateLimit-Remaining: 0
RateLimit-Reset: 18
```

```json theme={null}
{
  "error": {
    "type": "rate_limit",
    "code": "RATE_LIMITED",
    "message": "Too many requests. Retry after the time in the Retry-After header.",
    "doc_url": "https://docs.bridgelinepf.com/errors#RATE_LIMITED",
    "request_id": "req_8fJ2kQ9xLm4TzW7nB3cY5pDv"
  }
}
```

Wait at least `Retry-After` seconds, then retry with the same `Idempotency-Key`. A refused request does no work, so the retry is safe. If you hit a daily limit, `Retry-After` runs to midnight UTC. The [retrying client](/guides/idempotency#retry-rules) in the idempotency guide handles this for you.


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