Docs · Errors

Error Catalog

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.

invalid_jsonHTTP 400

invalid_request_error

The request body was not valid JSON.

Common causes
  • •Malformed JSON (trailing comma, unquoted key, truncated body)
  • •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.

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.