# Rate limits

> Understand Public API V1 quotas, headers, and safe retry behavior.
>
> Canonical URL: https://docs.creatorsjet.com/api/rate-limits

Rate limits protect CreatorsJet and apply after a request is authenticated.

| Request category |                    Limit | Window   |
| ---------------- | -----------------------: | -------- |
| Reads            | 120 requests per API key | 1 minute |
| Ordinary writes  |  30 requests per API key | 1 minute |
| Import starts    |   5 requests per API key | 1 hour   |

Only one Public API creator import may be queued or processing for an agency at a time.

## Response headers

Authenticated requests include:

| Header                | Meaning                                                  |
| --------------------- | -------------------------------------------------------- |
| `RateLimit-Limit`     | Maximum requests in the current window                   |
| `RateLimit-Remaining` | Requests left in the current window                      |
| `RateLimit-Reset`     | Unix timestamp when the current window resets            |
| `Retry-After`         | Seconds to wait; included when a request is rate limited |

## Rate-limit responses

A request above its limit returns HTTP `429` and code `RATE_LIMITED`.

```json
{
  "type": "https://api.creatorsjet.com/problems/rate-limited",
  "title": "Rate limit exceeded",
  "status": 429,
  "code": "RATE_LIMITED",
  "detail": "Too many requests",
  "request_id": "50c20a47-bf9a-4dfa-98ae-54fd89a172e1"
}
```

Wait for `Retry-After` before retrying. Add bounded exponential backoff and jitter if multiple workers share a key.

## Rate-limit availability

CreatorsJet fails closed when Redis cannot safely enforce a limit. The API returns `503 RATE_LIMIT_UNAVAILABLE`; do not bypass this response with aggressive retries. Retry after a delay and keep the same idempotency key for a protected write.
