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 field names the parameter that 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.
sandbox_unsupported_routeHTTP 400
invalid_request_error
A sandbox key called a write endpoint that has no sandbox behaviour.
Common causes
•The key is a sandbox key (X-SonicVox-Sandbox responses) and the endpoint creates or mutates real resources
•Only the generation endpoints have canned sandbox responses; other writes are refused rather than faked
Recovery
Read-only endpoints work normally with a sandbox key. For this operation, mint a live key (Settings → API Keys) — nothing was created or charged.
•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.
invalid_languageHTTP 400
invalid_request_error
The `language` code is not one the transcriber supports.
Common causes
•A language NAME was sent instead of its code ("english" rather than "en")
•A regional or non-standard variant that is not in the supported list
•`language` was sent as something other than a string
Recovery
Send a supported code, or omit the field entirely to auto-detect. Rejected before the engine runs, so nothing is charged.
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, or is longer than the endpoint processes in one request.
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)
•Speech-to-text only: the audio is longer than one synchronous request can transcribe (roughly 30 minutes on current hardware). The error message states the exact limit for your request
•Speech-to-speech only: the audio is longer than the Voice Changer converts (the cap is published as max_source_seconds by GET /v1/speech-to-speech). The error message states the measured length
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. For long recordings, transcribe over the streaming endpoint (POST /v1/speech-to-text/stream/token), which has no single-request time window.
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.
workflow_invalidHTTP 400
invalid_request_error
The workflow can't run as saved. The message names the first problem; nothing was started or charged.
Common causes
•A step's id was saved before the step-id rule (letters, digits, - and _, up to 64 characters)
•A connection points at a step or port that no longer exists, or the steps form a loop
•A Composition step has no video, or no voiceover, music or sound effect, connected to it
Recovery
Open the workflow in the editor, fix or re-add the named step, save, 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
Legacy catch-all no longer emitted by the v1 API — kept for old clients that match on it.
Common causes
•Older API versions emitted this one code for three unrelated conditions
Recovery
Current responses use the specific codes instead: rate_limit_exceeded (per-minute), daily_limit_exceeded (daily window), concurrency_limit_exceeded (parallel jobs), account_limited (policy state). If you match on rate_limit today, also match those four.
concurrency_limit_exceededHTTP 429
rate_limit_error
Too many of your generations running at once — your plan caps parallel jobs.
Common causes
•Submitting a new synthesis/transcription while the plan's concurrent-job cap is already full
Recovery
Wait for one of your in-flight jobs to complete and resubmit, or serialise your submissions. Backing off on a timer alone does not help — the slot frees when a job finishes, not when time passes.
account_limitedHTTP 429
rate_limit_error
The account is temporarily limited after repeated content-policy violations.
Common causes
•Multiple generations flagged by moderation in a short window
Recovery
Do not retry — the limit clears on its own after a cooling-off period, and repeated attempts extend it. Review the content policy; contact support if you believe the flags were wrong.
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.
forbiddenHTTP 403
permission_error
The key authenticated, but this resource belongs to someone the key cannot act for.
Common causes
•Reading workspace usage without being a workspace owner or admin
Recovery
Not retryable with this key. Use a key owned by an account with the required role.
text_too_longHTTP 400
invalid_request_error
The text exceeds this endpoint's per-request character limit.
Common causes
•Sending long-form content to an endpoint that caps 'text' (the limit is stated in the message)
Recovery
Split the text and send multiple requests, or use the endpoint built for long-form content. The message states the exact limit.
upstream_errorHTTP 502
media_processing_error
A service behind this endpoint failed to answer.
Common causes
•The realtime/agents backend returned an error or timed out
Recovery
Retryable with backoff. If it persists, check the status page at /status and include the request id when contacting support.
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.
model_unavailableHTTP 422
invalid_request_error
The requested TTS model is temporarily switched off.
Common causes
•An operator has darkened this specific engine while it is degraded — the rest of the platform is serving normally
Recovery
Retry with a different model. GET /v1/models lists what is currently available.
storage_errorHTTP 502
media_processing_error
Stored files for this resource could not be deleted, so nothing was deleted.
Common causes
•Object storage rejected or timed out on the delete
Recovery
Nothing was removed — retry the delete. 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.
quote_exceededHTTP 409
invalid_request_error
The workflow run is quoted above the max_credits you sent, so nothing was started.
Common causes
•The run's inputs make a step cost more than you allowed (e.g. a longer text into Text to Speech)
•A step is priced at an upper bound because its input comes from a step that hasn't run yet
Recovery
The message carries the quote. Resend with a higher max_credits, shorten the inputs, or run the upstream step first so its output is cached and the quote becomes exact.
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.
telephony_disabledHTTP 503
api_error
Outbound calling is not available on this deployment.
Common causes
•No SIP trunk or telephony provider is configured for this deployment.
•The call-worker cannot reach a SIP service.
Recovery
Configure a SIP trunk and telephony provider, then retry.
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.