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

# Rate limiting

> Request limits of the public API, the 429 response, and how to retry.

The public API allows:

* 60 requests per minute per IP address
* 120 requests per minute per workspace

Both limits apply at once. They are generous for an integration that creates a verification per person and relies on webhooks; they are reached by polling or by bulk jobs.

## When you are over the limit

The API answers `429 Too Many Requests`:

```json theme={null}
{
  "error": {
    "code": "RATE_LIMIT",
    "message": "Too many requests. Please try again later."
  }
}
```

with these headers:

| Header | Meaning |
| - | - |
| `Retry-After` | Seconds until you may send again. |
| `X-RateLimit-Limit` | The limit that was hit. |
| `X-RateLimit-Remaining` | Requests left in the current minute: `0`. |
| `X-RateLimit-Reset` | Unix time, in seconds, when you may send again. |

Wait `Retry-After` seconds, then retry. A `429` means the request was not processed, so retrying it is always safe, including a `POST`.

## Staying under the limits

* Let [webhooks](/integration/webhooks) tell you about outcomes instead of polling `GET /v1/verifications/{id}`.
* If you must poll, poll one verification at a time and no more often than every few seconds.
* Spread bulk jobs, such as re-reading many results, over time.

The [server SDKs](/integration/sdks) wait for `Retry-After` and retry a `429` for you.


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