Rate limits
Understand throughput limits per API key.
Rate limits protect Caedral's infrastructure and ensure fair access. Limits apply per API key. Exceeding a limit returns HTTP 429 with type rate_limit_exceeded.
Current limits (API gateway)
| Class | Limit | Window |
|---|---|---|
| Free-tier catalog models | 60 requests | Per minute per API key |
| Paid models | 100 requests | Per minute per API key |
| Embed + rerank free promo | 130 requests | Per minute per API key (through 28 Sep 2026) |
| Concurrent SSE streams | 10 simultaneous streams | Per API key |
| Caedral Voice V1 (caedral-voice-1) | 1 in-flight synthesis + 429 Retry-After | Gateway capacity lock (runtime concurrency is 1) |
| Public catalog/status GETs | 120 requests | Per minute per client IP |
These limits are enforced in the API gateway with sliding-window counters. Requests billed against a team seat also draw down a shared per-team bucket, so one seat (or one compromised key) cannot consume the team's entire capacity. Throughput is separate from subscription pools: rate limits control request frequency; included pools control how much paid inference you can run each billing period.
Handling 429 responses
import { Caedral, CaedralAPIError } from "caedral"; async function callWithBackoff(caedral: Caedral, prompt: string) { for (let attempt = 0; attempt < 5; attempt++) { try { return await caedral.chat.completions.create({ model: "deepseek/deepseek-v4-flash", messages: [{ role: "user", content: prompt }], }); } catch (err) { if ( !(err instanceof CaedralAPIError) || err.type !== "rate_limit_exceeded" || attempt === 4 ) { throw err; } await new Promise((r) => setTimeout(r, 2 ** attempt * 1000)); } }}Best practices
- Implement exponential backoff with jitter on 429 responses
- Queue or batch requests rather than unbounded parallel calls
- Use a fast model such as deepseek/deepseek-v4-flash for high-QPS paths
- Keep concurrent SSE streams under the per-key cap — finish or cancel an active stream before opening more
- Monitor usage via GET /v1/usage or the dashboard billing page