How concurrency works
Each workspace may have a fixed number of TTS generations and speech-to-text transcriptions running concurrently. Active work takes a slot and releases it when finished. TTS and synchronous ASR requests are rejected when no slot is available. Async ASR files wait in a queue until a slot is free. The limit is scoped to your workspace and driven by your plan tier. Text to speech and speech to text have separate limits, so one never uses up the other’s slots.- Text to speech: the limit applies to both HTTP TTS endpoints and active WebSocket generations. Idle WebSocket connections do not hold a generation slot. WebSocket limit errors close the connection with
4429. - Speech to text: live, synchronous file, and asynchronous file transcription share the same ASR limit. Each streaming session holds one slot for its entire life, including pauses, until the connection closes. A new session over the limit gets an
errorevent and closes with4429. Synchronous file requests return429when all slots are busy. Async batch acceptance does not reserve slots; each file takes a slot when a worker starts preparing and transcribing it.
Limits by plan
These are the current defaults and can change as plans evolve. Check your plan in the dashboard for the value that applies to your workspace.
The 429 response
When you exceed your concurrency limit:403 instead:
Handling limits
A429 is an immediate rejection of that request. TTS and synchronous file requests do not queue for concurrency. Async batch files queue after acceptance, but batch submission can still return 429 when pending work is at capacity. Handle rejected requests on the client:
- Cap your in-flight requests to your plan’s concurrency limit so you rarely hit
429in the first place. - Retry with exponential backoff and jitter when you do, e.g. 0.5s, 1s, 2s, 4s with random jitter.
- Use a worker pool sized to your limit rather than firing all requests at once.
- Close speech-to-text sessions promptly. Send
input.donewhen the audio ends, rather than leaving an idle session open until it times out.
Python