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

# Rate Limits

> Understand request, job, and account limits.

AdSkull applies rate limits by IP, API key, account, endpoint, and active generation workload.

## Limit Types

| Limit                | Purpose                                                  |
| -------------------- | -------------------------------------------------------- |
| Request rate         | Prevents traffic bursts from one key or IP.              |
| Active jobs          | Prevents too many expensive generations running at once. |
| Daily abuse guard    | Protects accounts from unusual patterns.                 |
| Content policy guard | Blocks repeated unsafe inputs.                           |

## Limits by Plan

| Plan    | Requests / min | Concurrent jobs |
| ------- | -------------- | --------------- |
| Creator | 60             | 3               |
| Starter | 120            | 5               |
| Pro     | 300            | 10              |
| Elite   | 600            | 20              |

Requests per minute apply across every endpoint on a single API key. Concurrent jobs count generation jobs that are queued or running on your account at any moment — image, video, voice, and talking-avatar combined.

The API is available on Creator plan and above. Free accounts do not have programmatic access.

## Rate-Limited Response

```json theme={"theme":"github-dark"}
{
  "error": {
    "code": "rate_limited",
    "message": "Too many requests. Please retry later.",
    "request_id": "req_01HX...",
    "details": {
      "retry_after_seconds": 30
    }
  }
}
```

When present, respect the `Retry-After` response header.

## Best Practices

* Use `Idempotency-Key` on every create request.
* Poll with backoff instead of polling every second.
* Use webhooks for production completion handling.
* Avoid starting many high-credit video jobs at the same time.
* Cache `/v1/models` and `/v1/pricing` for at least a few minutes.
