Rate limits
Call, token, size and wait limits, with the error each returns.
Every limit returns an error code. Retry-After is in seconds.
Limits
| Limit | Value | Error | Reset |
|---|---|---|---|
Calls per account key (abk_) | 60 per minute and 5,000 per 24 hours by default; set per key | 429 rate_limited | Rolling 1 minute and 24 hours |
Chat completions per LLM key (hlk_) | 200 per UTC day by default | 429 daily_limit | 00:00 UTC |
| Tokens per member account | 300,000 per UTC day | 429 daily_tokens | 00:00 UTC |
| Open chat completions per member account | 64 | 429 too_many_streams | When a completion ends |
| Open chat completions per account and model | The model's max_parallel | 400 too_many_parallel; 400 parallel_unsupported when max_parallel is 1 | When a completion ends |
| Chat request body | 32 MB | 413 too_large | None |
| Tokens per chat request | The model's context_length | 400 | None |
| Media processing per member account | 600 s per UTC day by default | 429 budget-exhausted | 00:00 UTC |
| Open media jobs per account | 1,000 | 429 too-many-open | When a job ends |
| JSON request body on audio and media routes | 4 MB | 413 too-large | None |
File in POST /v1/media/uploads or POST /v1/audio/transcriptions | 20 MB | 413 too-large | None |
- A member account is an albastov.com account other than the owner's. The owner's account has no token, open-completion or media-processing limit.
- Account limits apply to every key of the account.
max_paralleldoes not apply tohlk_keys. max_parallelandcontext_lengthper model are inGET /v1/models.- Open completions count toward the
hlk_daily limit;GET /v1/modelsdoes not. - A
429 daily_limitor429 daily_tokensbody carrieslimitandused;429 budget-exhaustedcarriesresets_at.
Events limits
| Limit | Value |
|---|---|
| Publish requests, per publish key | 120 a minute, bursts of 30 |
| Published events, per publish key | 300 a minute; each event of a batch counts |
| Requests, per events key | 600 a minute, 200,000 a day |
| Publish body | 16 KB; batch 256 KB and at most 100 events |
idempotency_key window | 7 days, per source |
| Webhook body | 2 MiB |
| Webhook deliveries, per source | 120 a minute, bursts of 30 |
| Webhook noise budget, per source | 5 events a minute one by one; the rest as one summary event |
| Kept webhook deliveries, per source | The newest 200, bodies cut at 256 KiB |
| Open streams, per read key | 8 |
| Stream catch-up | 1000 events |
| History | 90 days per source by default |
Waits
| Condition | Response |
|---|---|
| Model not loaded | 503 model_loading with Retry-After and retry_after_s; a streamed request stays open until the model answers |
| Request waiting in the queue | 503 queued with position and Retry-After |
| Speech or transcription not finished in time | 503 queued with job_id and Retry-After; the job stays in media jobs |
| Non-streamed request with no response within about 100 s | 524, plain text; stream the request instead |
Recommendations
- Set
max_tokenson every chat completion. - Use the model that is loaded:
stateinGET /v1/models. - Stream long chat completions with
"stream": true.
Retry rules per status: Errors.