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

# Rate limits

> Per-tier request limits for the Proofable API, how to read limit headers, and the retry pattern that keeps integrations resilient.

Proofable enforces per-minute and per-window limits to keep the API fast and fair. Higher tiers get higher limits. Most apps never hit them.

## Limits by tier

Limits scale with your plan. Verification and sign-in have tighter windows because they run real checks.

| Surface                  | Free        | Pro         | Enterprise  |
| ------------------------ | ----------- | ----------- | ----------- |
| API calls (burst)        | 60 / min    | 240 / min   | 600 / min   |
| API calls (sustained)    | 30 / min    | 120 / min   | 300 / min   |
| Verification (new proof) | 50 / 15 min | 50 / 15 min | 50 / 15 min |
| Sign-in attempts         | 10 / 15 min | 10 / 15 min | 10 / 15 min |
| Status reads             | 100 / min   | 100 / min   | 100 / min   |
| Admin actions            | 20 / min    | 20 / min    | 20 / min    |

Verification and sign-in limits are the same across tiers. A check is a check regardless of plan. API call throughput is where higher tiers scale.

## When you hit a limit

APIs return **429 Too Many Requests**. Honor these response headers before retrying:

| Header             | Meaning                                                  |
| ------------------ | -------------------------------------------------------- |
| `Retry-After`      | Seconds to wait before the next request                  |
| `RateLimit`        | IETF draft-7 remaining quota (`r`) and time window (`t`) |
| `RateLimit-Policy` | IETF draft-7 quota (`q`) and window length (`w`)         |

CORS exposes `Retry-After`, `RateLimit`, and `RateLimit-Policy` so browsers and agents can read them.

* **Exponential backoff:** wait, then double the wait on each retry.
* **Creates:** do not blind-retry. Confirm the first request did not succeed before sending another. A duplicate proof costs credits.
* **Polling:** wait a few seconds between polls. Back off on errors.

## Tips

* **Reuse proofs.** A gate check (1 credit) reads an existing proof. Creating a new one (4 to 73 credits) is heavier and counts against the verification window. Cache the proof ID and check it instead.
* **Gate checks, not raw verification.** Use `gateCheck` with your `gateId` for access decisions. It reads saved results first and only creates a new proof when needed.
* **Need higher limits?** Pro raises API throughput four times. Enterprise raises it ten times, with service levels and custom packages. See [Pricing](/pricing).

## 402 and credits

When credits run out, billable calls return **402 Payment Required** with a quote, not 429. Pay for the call with [x402](/gates/pay-per-call), no account needed, or add credits and retry.

**Next:** [SDK errors](../sdks/error-handling) and [Pricing](/pricing)
