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

# Rate Limits

> Per-second request caps at the API edge and the 429s they return

Reducto enforces two independent limit mechanisms. This page covers **edge rate limits**. For the per-account concurrency throttle that queues parallel parse work, see [Concurrency Throttle](/reference/throttling).

| Mechanism                                     | What it limits                                     | Behavior on exceeded                      | Returns            |
| --------------------------------------------- | -------------------------------------------------- | ----------------------------------------- | ------------------ |
| **Edge rate limits**                          | Requests per second to the API                     | Request is rejected at the ingress        | `429`              |
| [Concurrency throttle](/reference/throttling) | Parse batches running in parallel for your account | Work queues until a slot frees, then runs | `200` (after wait) |

Edge rate limits live at the ingress and protect against accidental floods. They cap **requests per second**, not concurrent work. Requests above the cap return `429` immediately. The SDKs retry `429` responses with exponential backoff automatically.

## Per API Key

| Endpoint scope      | Limit                 | 429 response body                                                                        |
| ------------------- | --------------------- | ---------------------------------------------------------------------------------------- |
| All endpoints       | 1,000 req/s sustained | `{"message": "[CODE 1000] rate limit exceeded, retry with exponential backoff"}`         |
| `GET /job/{job_id}` | 200 req/s sustained   | `{"message": "[CODE 2000] rate limit exceeded, please use webhooks instead of polling"}` |

If you hit `[CODE 2000]`, you're polling job status faster than necessary. Switch to [webhooks](/workflows/async-overview) so Reducto pushes results when ready.

## Rare Infra-Shed 429s

In rare conditions, Reducto returns 429 from the application layer to protect core infrastructure when it is under load. These 429s do not carry a `[CODE …]` body. They are not a normal-operation signal that you have exceeded any limit; treat them as a transient infrastructure event and retry with backoff.

## How to Tell Which Limit You're Hitting

| Symptom                                                    | Mechanism                                           | Action                                                                                         |
| ---------------------------------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| Immediate 429 with body `[CODE 1000]`                      | Edge rate limit, per-API-key request rate           | Slow your submission rate or split traffic across API keys.                                    |
| Immediate 429 with body `[CODE 2000]`                      | Edge rate limit, per-API-key polling rate on `/job` | Switch to webhooks instead of polling.                                                         |
| Immediate 429 with no `[CODE …]` body                      | Rare infra shed (see above)                         | Retry with backoff.                                                                            |
| Slow P90 latency, no 4xx                                   | [Concurrency throttle](/reference/throttling)       | Submit steadier traffic so `earned_base` grows, or [contact sales](mailto:support@reducto.ai). |
| Sync request hanging close to the 15-minute (900s) timeout | [Concurrency throttle](/reference/throttling)       | Switch the call to async.                                                                      |

## Related

<CardGroup cols={2}>
  <Card title="Concurrency Throttle" icon="hourglass-half" href="/reference/throttling">
    How Reducto queues parallel parse work and the tier baselines.
  </Card>

  <Card title="Async Processing" icon="clock" href="/workflows/async-overview">
    Submit jobs and receive results via webhook.
  </Card>

  <Card title="Error Codes" icon="triangle-exclamation" href="/reference/error-codes">
    Full reference for client and server errors.
  </Card>
</CardGroup>
