Limits are shared across your whole org. All of your API keys draw on one
rate-limit bucket, one concurrency pool, and one tier — extra keys are
for rotation and security, not more capacity. Creating five keys does not give
you five times the limits.
Tiers
These are current limits, not hard caps — we raise them per customer as you scale. Contact us if you need more headroom.
What counts as a request
The requests-per-minute limit counts new requests started per minute:POST /tts/bytesandPOST /tts/sse— one request per HTTP call.GET /tts/websocket— one request per connection, spent at handshake, not per message. A long-lived socket streaming many turns costs a single request token when it opens; what bounds its ongoing work is the concurrency cap.
How concurrency is measured
This is the important, non-obvious part. A stream counts against your concurrency limit only while it is actively generating audio — not for the socket’s lifetime, and not for the whole call.- A slot is held for roughly 0.5–4 seconds per spoken turn — just the generation window — then freed the instant the turn finishes (~1 s after its last audio).
- Idle time between turns (the user talking, silence, thinking) costs nothing.
Handling 429 Responses
When you exceed a limit you’ll receive429 Too Many Requests with a Retry-After header:
context_id; there’s no “push through,” since continuing to stream a rejected context produces no audio. Failed generations are never charged.
Credits
Billing is separate from rate limits and is keyed to your org, shared across all its keys. Each character oftranscript costs 1 credit; $5 buys 1,000,000 characters and credits never expire. When you run out you’ll get a 402 payment_required — top up on the Billing page.
Best Practices
- Cache generated audio — don’t regenerate the same text repeatedly
- Respect concurrency — pool and reuse streams rather than opening unbounded connections
- Back off on 429 — use the
Retry-Afterheader, and retry rejected turns on a freshcontext_id - Monitor your dashboard — watch usage and balance before hitting limits