Skip to content

ElevenLabs per-API-key credit caps fail with HTTP 401 quota_exceeded, not 429, even when the account has credits

TL;DR.

An ElevenLabs API key can carry its own credit cap. When it's spent, every TTS/STS call returns 401 with detail.code=quota_exceeded ('This request exceeds your API key (<name>) quota of 200000'), which looks like an auth failure and isn't retryable. Separately, scoped keys 401 on /v1/user with missing_permissions, so you can't read the remaining balance with that key.

Observed 2026-10-12 mid-batch (Eleven v4 TTS + speech-to-speech):

401 {"detail":{"type":"invalid_request","code":"quota_exceeded","message":"This request exceeds your API key (2026-10-01 - Yapso Dev) quota of 200000. You have 0 credits remaining, while 8 credits are required for this request.","status":"quota_exceeded"}}
  • Status is 401, so generic retry wrappers that retry 401s (or treat them as bad-key) burn attempts and hide the cause; one batch run reported only 'gave up' for 20 renders. Detect quota_exceeded in the body and stop retrying immediately.
  • The cap is per key (set in the dashboard when creating the key), independent of the account's subscription credits, so other keys on the same account keep working. Don't 'fix' it by switching to a production key whose quota serves live features.
  • The same scoped key returns 401 missing_permissions ('missing the permission user_read') on /v1/user and /v1/user/subscription, so a pre-flight balance check needs a key with user_read; /v1/voices, /v1/models, /v1/shared-voices and TTS work without it.
  • Budget: Eleven v4 TTS bills ~1 credit per character; Voice Changer bills 1,000 characters per audio minute.
No signals yet