HTTP 429Client-side — change the request

Quota exhausted

quota_exhausted

The account's allowance for generated audio is spent for this period. The credential is fine and the scope is fine — the budget is gone. It shares its status with rate_limit_exceeded and behaves nothing like it.

Why it happens

Accounts without a subscription get a small number of free generations each month, and paid plans carry a monthly fair-use limit; whichever applied has been used up. Reading voices, captures, and generations never draws on it, so this always comes from a generation call.

How to fix it

Either wait for the allowance to reset at the start of next month, or lift it now by upgrading — the problem document carries a settings_url pointing at the billing page for the account that made the call, and the new entitlement applies to the very next request.

Safe to retry?

Not usefully: an allowance is not a rate window, so a backoff loop will never clear it. This is the 429 to stop retrying and act on.

What it looks like on the wire

{
  "type": "https://voicelabs.now/errors/quota_exhausted",
  "title": "Quota exhausted",
  "status": 429,
  "detail": "A human-readable explanation of this particular occurrence.",
  "instance": "/v1/speech",
  "code": "quota_exhausted"
}

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.

See every error code