Rate limit exceeded
rate_limit_exceeded
Too many requests from this API key in the current window. This is a REQUEST-RATE ceiling, not your plan's audio allowance: nothing was consumed, and it clears by itself.
Why it happens
A burst — a backfill loop, a poll with no delay, or several processes sharing one key. Successful responses carry RateLimit and RateLimit-Policy headers showing what is left and when the window resets, so a client never has to guess.
How to fix it
Back off for the seconds given in Retry-After, then continue. To stop hitting it: read the RateLimit header and pace yourself before the wall, poll a generation on an interval rather than in a tight loop, and give separate workloads separate keys so a backfill cannot starve production.
Safe to retry?
Yes. Wait out Retry-After and send it again — exponential backoff with jitter if you are writing the client yourself.
What it looks like on the wire
{
"type": "https://voicelabs.now/errors/rate_limit_exceeded",
"title": "Rate limit exceeded",
"status": 429,
"detail": "A human-readable explanation of this particular occurrence.",
"instance": "/v1/speech",
"code": "rate_limit_exceeded"
}
Branch on code, never on status or on the prose in detail: two different problems can share a status, and detail is written for humans and may be reworded. Problems a settings page can resolve also carry settings_url, and a scope failure carries required_scope.
Every VoiceLabs API error is an RFC 9457 problem document with a stable code.