> elevenlabs-common-errors

Diagnose and fix ElevenLabs API errors by HTTP status code. Use when encountering ElevenLabs errors, debugging failed TTS/STS requests, or troubleshooting voice cloning and streaming issues. Trigger: "elevenlabs error", "fix elevenlabs", "elevenlabs not working", "debug elevenlabs", "elevenlabs 401", "elevenlabs 429", "elevenlabs 400".

fetch
$curl "https://skillshub.wtf/jeremylongshore/claude-code-plugins-plus-skills/elevenlabs-common-errors?format=md"
SKILL.mdelevenlabs-common-errors

ElevenLabs Common Errors

Overview

Quick diagnostic reference for ElevenLabs API errors organized by HTTP status code, with real error messages, causes, and solutions.

Prerequisites

  • ElevenLabs SDK installed
  • API key configured
  • Access to error logs or console output

Instructions

Step 1: Quick Diagnostic

# Test API connectivity and auth
curl -s -w "\nHTTP %{http_code}" \
  https://api.elevenlabs.io/v1/user \
  -H "xi-api-key: ${ELEVENLABS_API_KEY}"

# Check character quota
curl -s https://api.elevenlabs.io/v1/user \
  -H "xi-api-key: ${ELEVENLABS_API_KEY}" | \
  jq '.subscription | {tier, character_count, character_limit}'

# List available voices (confirms API access)
curl -s https://api.elevenlabs.io/v1/voices \
  -H "xi-api-key: ${ELEVENLABS_API_KEY}" | jq '.voices | length'

Step 2: Error Reference


HTTP 401 — Authentication / Quota

Error: invalid_api_key

{
  "detail": {
    "status": "invalid_api_key",
    "message": "Invalid API key"
  }
}

Cause: API key is missing, malformed, or revoked. Fix:

# Verify key is set
echo "${ELEVENLABS_API_KEY:0:8}..."

# Test with curl
curl -s https://api.elevenlabs.io/v1/user -H "xi-api-key: ${ELEVENLABS_API_KEY}"

# Regenerate at: https://elevenlabs.io/app/settings/api-keys

Error: quota_exceeded

{
  "detail": {
    "status": "quota_exceeded",
    "message": "You have insufficient quota to complete this request"
  }
}

Cause: Monthly character limit reached for your plan. Fix: Check usage at https://elevenlabs.io/app/usage. Upgrade plan, or on Creator+ plans, enable usage-based billing in Subscription settings.


HTTP 400 — Bad Request

Error: voice_not_found

{
  "detail": {
    "status": "voice_not_found",
    "message": "Voice not found"
  }
}

Cause: Invalid voice_id in request path. Fix:

# List your available voices
curl -s https://api.elevenlabs.io/v1/voices \
  -H "xi-api-key: ${ELEVENLABS_API_KEY}" | \
  jq '.voices[] | {voice_id, name, category}'

Error: text_too_long

{
  "detail": {
    "status": "text_too_long",
    "message": "Text is too long. Maximum text length is 5000 characters."
  }
}

Cause: Single TTS request exceeds 5,000 characters. Fix: Split text into chunks. Use previous_text and next_text parameters to maintain prosody across chunks:

const audio = await client.textToSpeech.convert(voiceId, {
  text: currentChunk,
  previous_text: previousChunk,  // Helps maintain flow
  next_text: nextChunk,          // Helps maintain flow
  model_id: "eleven_multilingual_v2",
});

Error: model_not_found

{
  "detail": {
    "status": "model_not_found",
    "message": "Model not found"
  }
}

Cause: Invalid model_id string. Fix: Use exact model IDs: eleven_v3, eleven_multilingual_v2, eleven_flash_v2_5, eleven_turbo_v2_5, eleven_monolingual_v1, eleven_english_sts_v2.


HTTP 429 — Rate Limited

Error: too_many_concurrent_requests

{
  "detail": {
    "status": "too_many_concurrent_requests",
    "message": "Too many concurrent requests"
  }
}

Cause: Exceeded concurrent request limit for your plan. Fix: Queue requests. Concurrency limits by plan:

PlanConcurrent Requests
Free2
Starter3
Creator5
Pro10
Scale15
Business15
import PQueue from "p-queue";
const queue = new PQueue({ concurrency: 5 }); // Match your plan
await queue.add(() => client.textToSpeech.convert(voiceId, options));

Error: system_busy

{
  "detail": {
    "status": "system_busy",
    "message": "Our services are experiencing high traffic"
  }
}

Cause: ElevenLabs servers under heavy load. Fix: Retry with exponential backoff (the SDK does this automatically with maxRetries):

const client = new ElevenLabsClient({
  maxRetries: 3, // Auto-retries 429 and 5xx
});

HTTP 422 — Validation Error

Error: invalid_voice_sample

{
  "detail": {
    "status": "invalid_voice_sample",
    "message": "Invalid audio file"
  }
}

Cause: Voice cloning audio file is corrupt, too short, or wrong format. Fix: Ensure audio is MP3/WAV/M4A/FLAC, at least 30 seconds, clean speech without music.


WebSocket Errors

Connection fails silently:

WebSocket connection to 'wss://api.elevenlabs.io/v1/text-to-speech/...' failed

Cause: Missing xi_api_key in the first WebSocket message, or using eleven_v3 model (not supported for WebSocket). Fix:

ws.send(JSON.stringify({
  text: " ",
  xi_api_key: process.env.ELEVENLABS_API_KEY,  // Required in WS
  model_id: "eleven_flash_v2_5",  // v3 NOT supported for WS
}));

Step 3: Debug Checklist

  1. Verify API key: curl -s https://api.elevenlabs.io/v1/user -H "xi-api-key: $ELEVENLABS_API_KEY"
  2. Check quota: Look at character_count vs character_limit in the response
  3. Verify voice_id: GET /v1/voices to list valid IDs
  4. Check model_id: Must be an exact match (see table above)
  5. Check request size: Text must be under 5,000 characters
  6. Check concurrency: Are you exceeding your plan's concurrent limit?
  7. Check ElevenLabs status: https://status.elevenlabs.io

Error Handling

HTTPErrorRetryableAction
400Bad requestNoFix request parameters
401Auth/quotaNoCheck key or upgrade plan
404Not foundNoVerify voice_id/model_id
422ValidationNoFix input data format
429Rate limitYesBackoff + queue requests
500+Server errorYesRetry with backoff

Resources

Next Steps

For comprehensive debugging, see elevenlabs-debug-bundle. For rate limit handling, see elevenlabs-rate-limits.

┌ stats

installs/wk0
░░░░░░░░░░
github stars1.7K
██████████
first seenMar 23, 2026
└────────────

┌ repo

jeremylongshore/claude-code-plugins-plus-skills
by jeremylongshore
└────────────