> Section "Rate limits and quotas" of the AthanLab Developer API documentation (API version 1.0.0). On the web: https://athanlab.com/docs#limits. Whole documentation as Markdown: https://athanlab.com/docs.md # Rate limits and quotas Each limit applies per key, per account or per network, and each row says which. Your account is your AthanLab account: all its keys share the account limits. ## Rate limits | Limit | Value | | --- | --- | | Writes (POST: create, dry run, cancel) | 60 requests a minute per key (default) | | Reads (GET) | 600 requests a minute per key | | Per network | 600 requests a minute per client address, counting every request — signed with a key or not — across all your keys | | Failed key checks | 20 in 5 minutes block the network for 10 minutes: [429 auth_blocked](https://athanlab.com/docs#errors-auth_blocked) | | Jobs running at once | 2 per account, up to 8 by arrangement. Beyond it: [429 concurrency_limit](https://athanlab.com/docs#errors-concurrency_limit) | | Deliveries unfinished at once | 3 per account. Beyond it: [429 concurrency_limit](https://athanlab.com/docs#errors-concurrency_limit) | | Downloads at once | 4 per account | ## Rate-limit headers Every authenticated response carries `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` (Unix seconds). They describe the key's bucket that counted the request: reads and writes have separate buckets. > [!NOTE] > **The per-network limit is shared** > > The per-network limit counts every request from your address and shows its headers only on the `429` it causes, so `X-RateLimit-Remaining` can be above 0 when it refuses a request. Several keys, or reads and writes together, from one address share that one budget. Every retryable `429` carries `Retry-After`. Wait that long, and add random jitter when several workers share a key or network. [429 key_budget_exceeded](https://athanlab.com/docs#errors-key_budget_exceeded) is not retryable: the key has spent its monthly budget (see [Per-key budgets](https://athanlab.com/docs#per-key-budgets)). ## Size and retention | Limit | Value | | --- | --- | | Text per job | 5,000 characters (10,000 once numbers are written out as words). Characters are UTF-16 code units: a Burmese or Latin character counts 1, an emoji counts 2. | | Request body | 128 KB (1 MB for `POST /deliveries`) | | Delivery | Up to 50 chapters of 5,000 characters each, 100,000 in total; a title of up to 120 characters; up to 20 source links. A chapter still waiting after 7 days expires and is refunded. | | Metadata | 16 keys of up to 40 characters (ASCII letters A–Z and a–z, digits and \_ . : -, starting with a letter or digit), values up to 500 characters, 8,000 bytes in total | | List page size | Up to 100 jobs (default 20) | | Job deadline | 45 minutes. A job that cannot finish in time fails as [capacity_unavailable](https://athanlab.com/docs#job-failures) and is refunded. | | Audio and input text kept | 30 days (see [Retention](https://athanlab.com/docs#retention)) | | Sent to AthanInbox | Kept until you delete it (see [AthanInbox](https://athanlab.com/docs#athaninbox)) | | API keys | 5 per account | Need more? Email [support@athanlab.com](mailto:support@athanlab.com?subject=AthanLab%20Developer%20API) with your use case.