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

# Rate limits

> Per-org quotas and how to handle 429 responses.

## Endpoint limits

| Endpoint | Limit | Scope |
| - | - | - |
| `POST /v1-evaluate` (and `/v1/evaluate`) | **100 req/min** | Per org |
| All other endpoints | Plan tier (see table below) | Per org |

## Plan tiers

| Plan | Requests / minute | Burst |
| - | - | - |
| Community (free cloud allowance) | 100 | 150 |
| Team | Not yet published — contact [sales@atlasent.io](mailto:sales@atlasent.io) | — |
| Business | 1,000 | 2,000 |
| Enterprise | Negotiated | — |

> Tier names updated 2026-08-15 to the current commercial model
> (Community / Team / Enterprise as of 2026-09-27; the free cloud allowance was
> called Sandbox until 2026-09-26, then Free until 2026-09-27, and its internal
> plan key is still `free`).
> This table previously listed "Pro"; Business is the current
> purchasable tier that supersedes it (Pro is now grandfathered,
> non-purchasable) and inherits its published request-rate figures.
> Team's own request-rate figures were never published separately in
> this table and are left unstated here rather than invented — check
> with sales for the current value.

## Response headers

`/v1/evaluate` responses carry these headers:

| Header | Meaning |
| - | - |
| `X-RateLimit-Limit` | Requests allowed per minute. |
| `X-RateLimit-Remaining` | Requests left in the current window. |
| `X-RateLimit-Reset` | Unix seconds when the window resets. |

## 429 response body

A 429 uses the standard error envelope. On `/v1/evaluate` and
`/v1-verify-permit` it carries `retry_after_ms`:

```json theme={null}
{
  "error": "unavailable",
  "message": "Runtime cannot decide right now; retry shortly",
  "status": 429,
  "retry_after_ms": 60000
}
```

Other endpoints return `"error": "rate_limited"`. When `retry_after_ms` is
present, use it for back-off; otherwise back off exponentially.

## Handling 429 responses

Respect the server's retry hint, then back off exponentially. The SDKs do this for you; if you're calling the API directly:

```python theme={null}
import time
from atlasent import AtlaSentClient, RateLimitError

client = AtlaSentClient(...)

def evaluate_with_backoff(req, max_retries=4):
    for attempt in range(max_retries):
        try:
            return client.evaluate(**req)
        except RateLimitError as e:
            if attempt == max_retries - 1:
                raise
            wait_s = e.retry_after if e.retry_after else (2 ** attempt)
            time.sleep(wait_s)
```

<Warning>
  Do not retry 429s indefinitely. For a regulated agent, a sustained 429 should be treated as **deny** — the agent halts and surfaces a clear error to the user.
</Warning>


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