> 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".
curl "https://skillshub.wtf/jeremylongshore/claude-code-plugins-plus-skills/elevenlabs-common-errors?format=md"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:
| Plan | Concurrent Requests |
|---|---|
| Free | 2 |
| Starter | 3 |
| Creator | 5 |
| Pro | 10 |
| Scale | 15 |
| Business | 15 |
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
- Verify API key:
curl -s https://api.elevenlabs.io/v1/user -H "xi-api-key: $ELEVENLABS_API_KEY" - Check quota: Look at
character_countvscharacter_limitin the response - Verify voice_id:
GET /v1/voicesto list valid IDs - Check model_id: Must be an exact match (see table above)
- Check request size: Text must be under 5,000 characters
- Check concurrency: Are you exceeding your plan's concurrent limit?
- Check ElevenLabs status: https://status.elevenlabs.io
Error Handling
| HTTP | Error | Retryable | Action |
|---|---|---|---|
| 400 | Bad request | No | Fix request parameters |
| 401 | Auth/quota | No | Check key or upgrade plan |
| 404 | Not found | No | Verify voice_id/model_id |
| 422 | Validation | No | Fix input data format |
| 429 | Rate limit | Yes | Backoff + queue requests |
| 500+ | Server error | Yes | Retry with backoff |
Resources
Next Steps
For comprehensive debugging, see elevenlabs-debug-bundle. For rate limit handling, see elevenlabs-rate-limits.
> related_skills --same-repo
> fathom-cost-tuning
Optimize Fathom API usage and plan selection. Trigger with phrases like "fathom cost", "fathom pricing", "fathom plan".
> fathom-core-workflow-b
Sync Fathom meeting data to CRM and build automated follow-up workflows. Use when integrating Fathom with Salesforce, HubSpot, or custom CRMs, or creating automated post-meeting email summaries. Trigger with phrases like "fathom crm sync", "fathom salesforce", "fathom follow-up", "fathom post-meeting workflow".
> fathom-core-workflow-a
Build a meeting analytics pipeline with Fathom transcripts and summaries. Use when extracting insights from meetings, building CRM sync, or creating automated meeting follow-up workflows. Trigger with phrases like "fathom analytics", "fathom meeting pipeline", "fathom transcript analysis", "fathom action items sync".
> fathom-common-errors
Diagnose and fix Fathom API errors including auth failures and missing data. Use when API calls fail, transcripts are empty, or webhooks are not firing. Trigger with phrases like "fathom error", "fathom not working", "fathom api failure", "fix fathom".