The limit
Your key may have 9 requests generating at once. The 10th concurrent request is rejected immediately with a
429 — nothing queues server-side.
Measured, not theoretical: firing 20 simultaneous requests on one key consistently yields exactly 9 ×
200 and 11 × 429.HTTP and WebSocket share one budget
An open WebSocket that is actively generating occupies one slot, no matter how many utterances or contexts pass through it. That slot comes from the same pool of 9 as your HTTP requests. With 9 WebSocket connections generating, a concurrentPOST /v1/tts on the same key returns 429. The slot frees as soon as the connection stops generating.
What a 429 looks like
429, Content-Type: application/json, with an x-request-id header.
Recommended client-side patterns
Bound your own concurrency
Hold a semaphore of 9 or fewer in your application. Backpressure or shed load once it’s full — this is cheaper than discovering the limit through 429s.
Retry with jittered backoff
On 429, retry with exponential backoff plus jitter. Start at 200 ms, cap around 5 s. Jitter matters — synchronized retries re-collide.
Split across keys
Each key gets its own budget of 9. Use one key per service or environment for both isolation and throughput.
Reuse one WebSocket
One connection serves a whole session on a single slot, instead of one slot per utterance.