Every error response from the SonicVox API uses a consistent envelope. Here's what each code means and how to recover.
Seeing 5xx or service_unavailable across the board? Check live service status first — it tells you whether it's us or your account.
Error envelope shape
Every non-2xx response has this structure:
{
"error": {
"type": "invalid_request_error", // category — branch on this for retry policy
"code": "validation_error", // specific code (see below)
"message": "text: String must contain at most 50000 character(s)",
"status": 422, // mirrors the HTTP status
"request_id": "9f1c2e40-3b7a-4d18-9a55-1c0e2f7b6a31",
"doc_url": "https://staging.sonicvox.ai/docs/errors/validation_error"
}
}
The X-Request-Id header is also set on every response — capture it on errors so we can trace any 5xx in our logs.
validation_errorHTTP 422
invalid_request_error
A request parameter failed validation.
Common causes
•Missing a required field (e.g. input_key)
•Value outside the allowed range (e.g. crossfade > 30)
•Invalid enum value (e.g. mode: 'wrong_mode')
•S3 key contained invalid characters or '..'
Recovery
The error.message + error.param fields tell you exactly which parameter failed and the valid range. Fix the value and retry — validation errors are not retryable as-is.
invalid_requestHTTP 400
invalid_request_error
The request was malformed or semantically invalid.
Common causes
•A required parameter was absent or in the wrong shape
•Conflicting parameters were supplied together
Recovery
Check the error.message and correct the request before retrying.
invalid_inputHTTP 400
invalid_request_error
An input value was rejected before processing began.
Common causes
•Empty or out-of-range field value
•Unsupported option for this endpoint
Recovery
Fix the flagged input and retry.
invalid_bodyHTTP 400
invalid_request_error
The request body did not match the schema this endpoint expects.
Common causes
•Workflows run endpoint called with anything other than { inputs?: { <node_id>: string } }
Recovery
Send the documented body shape. The error.message states the expected schema.
text_requiredHTTP 400
invalid_request_error
A 'text' field is required — the cloned voice speaks this text.
Common causes
•POST /v1/voices (clone) was called with no text, or with whitespace only
Recovery
Send a non-empty 'text' field alongside the reference audio and retry.
•Wrong Content-Type or an empty body where JSON was required
Recovery
Serialize the body with a real JSON encoder and send Content-Type: application/json.
reference_requiredHTTP 400
invalid_request_error
A reference audio clip was required but not provided.
Common causes
•Voice-cloning / reference-based endpoint called without a reference clip
Recovery
Attach the required reference clip (see the endpoint's docs) and retry.
reference_invalidHTTP 400
invalid_request_error
The supplied reference audio clip could not be used.
Common causes
•Reference clip was unreadable, too short, or silent
•Reference key pointed at a missing or invalid object
Recovery
Provide a clean reference clip (a few seconds of clear speech) and retry.
unsupported_output_formatHTTP 400
invalid_request_error
The requested output_format could not be produced.
Common causes
•output_format is not one the transcoder supports
•The format is momentarily unavailable on the router (e.g. mp3 with no ffmpeg)
Recovery
Request output_format: "wav" (always available) or one of the documented formats. Nothing is charged when this is returned.
unsupported_mediaHTTP 415
invalid_request_error
The uploaded file is not a supported audio/video type.
Common causes
•File failed the upload content-sniff (not real audio/video)
•A disallowed or dangerous file type was submitted
Recovery
Upload a standard audio (WAV/MP3/M4A) or video (MP4) file and retry.
file_too_largeHTTP 413
invalid_request_error
The uploaded file exceeded the size cap.
Common causes
•Request body exceeded the 200 MB upload ceiling — bodies over it are rejected at the edge, before the endpoint runs
•File exceeded the endpoint's own, smaller cap (voice enhancement 50 MB, speech-to-text 100 MB)
Recovery
Split or compress the input (use the split tool first) and retry. 200 MB is the hard ceiling for bytes sent through the API.
consent_requiredHTTP 400
invalid_request_error
Voice-cloning consent was not provided.
Common causes
•A clone/voice request was made without the required consent attestation
Recovery
Include the consent confirmation the endpoint requires, then retry.
invalid_test_typeHTTP 400
invalid_request_error
An unrecognized test/diagnostic type was requested.
Common causes
•The test_type value is not one this endpoint supports
Recovery
Use one of the documented test types and retry.
not_foundHTTP 404
invalid_request_error
The requested resource does not exist.
Common causes
•Unknown id (agent, job, conversation, voice, etc.)
•Resource belongs to a different account
Recovery
Verify the id and that your key's account owns the resource.
voice_not_foundHTTP 404
invalid_request_error
The requested voice id does not exist or isn't accessible.
Common causes
•Unknown voice_id
•Voice not shared with your account
Recovery
List available voices and use a valid voice_id.
workflow_not_foundHTTP 404
invalid_request_error
No workflow with that id exists on this account.
Common causes
•Unknown workflow id
•Workflow belongs to a different account
Recovery
List your workflows and use an id your key's account owns.
workflow_emptyHTTP 400
invalid_request_error
The workflow exists but has no nodes, so there is nothing to run.
Common causes
•The workflow was created but never given any nodes
Recovery
Add at least one node in the workflow editor, then start the run again.
unknown_inputHTTP 400
invalid_request_error
An input key in the request does not match any fillable input of the workflow.
Common causes
•A node_id in `inputs` isn't an input node of this workflow
•Typo in the node id
Recovery
The error.message lists every fillable input id for that workflow — use one of those keys.
run_not_foundHTTP 404
invalid_request_error
No such run for that workflow on this account.
Common causes
•Unknown run id
•Run id belongs to a different workflow or account
Recovery
Poll with the run id returned by the run-create call on the same workflow.
missing_api_keyHTTP 401
authentication_error
No API key was supplied.
Common causes
•The Authorization: Bearer <key> header was absent
Recovery
Send your key in the Authorization header on every request.
invalid_api_keyHTTP 401
authentication_error
The API key header is missing, malformed, or unknown.
Common causes
•Key was rotated or revoked in the API keys dashboard
•Malformed key value
Recovery
Regenerate the key in /app/admin/api-keys and update your environment. Never commit keys to source control.
insufficient_scopeHTTP 403
permission_error
The API key lacks a scope required by this endpoint.
Common causes
•The key was minted without the scope this route requires
Recovery
Mint a key with the needed scope (see each endpoint's required scope) and retry.
account_key_not_agent_scopedHTTP 403
permission_error
An account-level key was used on an agent-scoped endpoint.
Common causes
•Account-level keys cannot operate AS a specific agent
Recovery
Use an agent-bound key for agent-scoped operations.
agent_scope_mismatchHTTP 403
permission_error
An agent-bound key was used against a different agent.
Common causes
•The key is bound to agent A but the request targeted agent B
Recovery
Use the key minted for the agent you're addressing.
plan_requiredHTTP 403
permission_error
Your plan does not include this endpoint or feature.
Common causes
•Feature gated to a higher plan tier
Recovery
Upgrade your plan to access this endpoint.
plan_limit_exceededHTTP 403
permission_error
The request is not allowed under your current plan's limits.
Common causes
•A per-plan quota (other than daily count or credits) was exceeded
Recovery
The error.message explains the limit. Upgrade your plan or reduce usage.
content_policyHTTP 403
permission_error
The request was blocked by content / voice-safety policy.
Common causes
•Text or audio tripped a moderation rule
•Voice-safety (impersonation / consent) policy blocked the request
Recovery
Adjust the input to comply with the content policy and retry.
impersonation_blockedHTTP 400
invalid_request_error
The reference clip was blocked by the anti-impersonation gate.
Common causes
•The reference audio matched a protected/known voice
Recovery
Use a reference clip you have the right to clone.
voice_not_availableHTTP 403
permission_error
The voice exists but cannot currently be synthesized.
Common causes
•The cloned voice is still awaiting moderation review
•The voice is under a takedown hold
Recovery
This is NOT an auth failure — do not rotate your key. Pick a different voice_id, or wait for the voice to clear review (the message says which state it is in).
ip_blockedHTTP 403
permission_error
The request originated from a blocked IP address.
Common causes
•Your IP is on a denylist (abuse mitigation)
Recovery
Contact support@sonicvox.ai if you believe this is a mistake.
insufficient_creditsHTTP 402
billing_error
You don't have enough credits to complete this request.
Common causes
•Credit balance below the cost of the requested operation
•Auto top-up disabled or failed and the prepaid balance is exhausted
Recovery
Top up credits (or enable Auto Top-Up) in billing, then retry. This is NOT retryable until the balance is restored.
daily_limit_exceededHTTP 429
rate_limit_error
You hit your plan's daily usage cap for this operation.
Common causes
•The per-day request/usage allowance for your plan is used up
Recovery
Retry after the daily window resets, or upgrade your plan for a higher cap.
rate_limitHTTP 429
rate_limit_error
You exceeded the per-API-key rate limit for this endpoint.
Common causes
•Too many requests per minute to a single tool endpoint
•Multiple concurrent calls hitting the same limit bucket
Recovery
Retry after the Retry-After header value (seconds). Implement exponential backoff. Some handlers emit this same condition as rate_limited or rate_limit_exceeded — treat all three identically.
rate_limitedHTTP 429
rate_limit_error
Alias of rate_limit emitted by some handlers — same meaning.
Common causes
•Per-key rate limit exceeded
Recovery
Back off per the Retry-After header and retry.
rate_limit_exceededHTTP 429
rate_limit_error
Alias of rate_limit emitted by some handlers — same meaning.
Common causes
•Per-key rate limit exceeded
Recovery
Back off per the Retry-After header and retry.
transcription_failedHTTP 502
media_processing_error
The transcription / ASR step failed upstream.
Common causes
•ASR worker error
•Unintelligible or corrupt audio
Recovery
Retry with a clean input; if it persists, contact support with the request_id.
enhancement_failedHTTP 502
media_processing_error
An audio enhancement / effect step failed upstream.
Common causes
•Effects/enhancement worker error
Recovery
Retry; if it persists, contact support with the request_id.
clone_errorHTTP 502
media_processing_error
The voice-cloning worker returned an error.
Common causes
•Cloning service failure (status is passed through from upstream)
Recovery
Retry with a valid reference; if it persists, contact support with the request_id.
tts_errorHTTP 502
media_processing_error
The text-to-speech worker returned an error.
Common causes
•TTS engine failure
Recovery
Retry; if it persists, contact support with the request_id.
voice_service_errorHTTP 502
media_processing_error
A voice service call failed upstream.
Common causes
•Voice backend returned an error
Recovery
Retry; if it persists, contact support with the request_id.
worker_errorHTTP 502
media_processing_error
A generic processing worker returned an error.
Common causes
•Upstream GPU/worker failure
Recovery
Retry with exponential backoff; if it persists, contact support with the request_id.
unknown_endpointHTTP 404
invalid_request_error
The requested path is not an endpoint of this API.
Common causes
•A typo in the URL
•An endpoint from a different API or a newer version
Recovery
Check the API reference for the exact path. Note that paths are case-sensitive and have no trailing slash.
tts_request_rejectedHTTP 422
invalid_request_error
The synthesis engine could not process this request.
Common causes
•An unsupported model / language / voice combination
•Text the engine cannot render (e.g. a script the chosen model does not cover)
Recovery
Check GET /api/v1/models for the languages and capabilities of each engine. Retrying unchanged will not help — nothing was charged.
clone_request_rejectedHTTP 422
invalid_request_error
The cloning engine could not use this reference clip.
Common causes
•The clip is unusable for cloning — too noisy, silent, or an unsupported encoding
Recovery
Send a clean 3–60s recording of a single speaker. Retrying the same clip will not help.
voice_not_permittedHTTP 403
permission_error
You may not convert into the requested target voice.
Common causes
•The target voice is not yours, published, or shared to the community
•The voice has not cleared the impersonation screen
Recovery
Use a voice you own or one from the public library. GET /api/v1/voices lists every voice this key may use.
workflows_unavailableHTTP 403
permission_error
Workflows is not enabled for this account.
Common causes
•Workflows is an admin-gated MVP and the key's owner is not enabled for it
Recovery
Contact support to be enabled. The endpoints stay published so the contract is stable when access is granted.
conversion_failedHTTP 502
media_processing_error
A Voice Changer job could not be staged or queued.
Common causes
•The uploaded audio could not be staged for processing
•The conversion could not be enqueued
Recovery
Retry with exponential backoff. No credits are charged for a job that never queued.
generation_failedHTTP 502
media_processing_error
A sound-generation job could not be queued.
Common causes
•The generation queue was unreachable
Recovery
Retry with exponential backoff. No credits are charged for a job that never queued.
request_timeoutHTTP 408
invalid_request_error
The upload took too long to receive, so no transcription was attempted.
Common causes
•A large or slow upload consumed the synchronous request budget
Recovery
Retry with a smaller file. Nothing was charged — the timeout fires before any engine work begins.
transcription_timeoutHTTP 504
media_processing_error
Transcription exceeded the synchronous budget.
Common causes
•The audio was long or the engine was saturated
Recovery
Split the audio into shorter segments, or retry when load is lower. Reserved credits are settled to the work actually done.
provider_errorHTTP 502
media_processing_error
An upstream provider returned an error.
Common causes
•Third-party/provider dependency failure
Recovery
Retry with exponential backoff; if it persists, contact support with the request_id.
service_errorHTTP 502
media_processing_error
A supporting service call failed (e.g. storing the reference audio for a clone).
Common causes
•Object-storage write failed while staging your upload
Recovery
Retry the request; if it persists, contact support with the request_id.
service_unavailableHTTP 503
api_error
The service is temporarily unavailable.
Common causes
•A dependency is down or capacity is temporarily exhausted
Recovery
Retry after a short delay with exponential backoff.
connection_errorHTTP 503
api_error
Could not reach an upstream dependency.
Common causes
•Network/connection failure talking to a backend service
Recovery
Retry after a short delay; if it persists, contact support with the request_id.
endpoint_disabledHTTP 503
api_error
This endpoint is currently disabled.
Common causes
•The endpoint was administratively turned off (maintenance / feature flag)
Recovery
Check the status page at /status; retry later or contact support.
internal_errorHTTP 500
api_error
Unexpected server error.
Common causes
•Transient infrastructure issue
•A bug we haven't caught yet
Recovery
Retry with exponential backoff. If it persists, capture the request_id and email support@sonicvox.ai — we can trace every 5xx via that ID.
server_errorHTTP 500
api_error
Unexpected server error (alias of internal_error).
Common causes
•Transient infrastructure issue
•Unhandled server condition
Recovery
Retry with exponential backoff; include the request_id when contacting support.