Skip to content

OmnAPI Error Codes

Reference

Every error follows the same envelope:

{
"success": false,
"error": {
"code": "INSUFFICIENT_CREDITS",
"message": "Not enough credits to start this task.",
"details": {}
}
}

Every response — error or success — carries X-Request-Id in the headers. Always include this in support tickets; it’s the single fastest way for us to trace the problem.

An HTTP error describes the request outcome; it does not by itself prove that no task or charge exists. A synchronous operation can fail or time out after a task was created.

SituationMeaningRecovery
Validation/authentication/budget rejection confirmed before creationNo new task was acceptedCorrect the stated issue, then retry
Error contains taskId or pollUrlA task exists; its settled state determines the final chargeQuery that task
HTTP 5xx, connection lost, or local timeout with no receiptSubmission outcome may be unknownReplay the original route/body with the saved idempotency key
Polled task is FAILED or CANCELLEDThe task is terminalInspect refunded, creditsCharged and retryable before starting a new attempt

A missing task ID in the client is not evidence that submission failed. See Idempotency and recovery.

This is the curated, human-readable view of the platform error codes. Module-specific codes, such as the MV_* family for the Music Video API, are documented in their module guide rather than repeated here. For request and response schemas, see the Interactive API Reference.

CodeHTTPRecovery
INVALID_API_KEY401Include x-api-key; confirm the value is active and unexpired, or rotate it.
FORBIDDEN403Inspect details.requiredScope / details.clientIp for key restrictions. Paid creation can also be blocked by a billing hold; check billingStatus and resolve payment review or debt before retrying.
CodeHTTPRecovery
BAD_REQUEST400Fix malformed JSON or a structurally missing required field.
VALIDATION_ERROR400Field present but invalid (range, length, enum). Read structured entries from details.issues[]; details.errors is a legacy serialized summary.
MISSING_REQUIRED_FIELD400The named field is required.
INVALID_MODEL400Use a documented model path or omit the model override.
INVALID_FEATURE400Use a feature supported by the selected model and endpoint.
FEATURE_NOT_SUPPORTED400Upgrade plan access or remove the unsupported feature.
CodeHTTPRecovery
INSUFFICIENT_CREDITS402Add credits from the dashboard. For MV, Vidu, Subtitles, or Audio Editing, increase maxCredits only when the error details show that your submitted budget cap was exceeded. Suno and Producer do not accept maxCredits.
BALANCE_NOT_INITIALIZED402Account balance is not ready yet. Open the dashboard once, then retry.
CREDIT_DEDUCTION_FAILED500Recover the original request with the same idempotency key; check any returned taskId before a new attempt.
CREDIT_REFUND_FAILED500File a ticket with X-Request-Id.
CodeHTTPRecovery
TASK_NOT_FOUND404Confirm the task id and that the task is still available.
TASK_ALREADY_EXISTS409Idempotency collision (rare). Re-poll the original id.
CONFLICT409Generic state/idempotency conflict (e.g. competing edit). Re-poll or reconcile, then retry.
TASK_CREATION_FAILED500Recover with the original idempotency key and body; poll a returned taskId.
TASK_EXECUTION_FAILED500 / (task status)Generation failed after the task was accepted. Inspect errorMessage; eligible credits are refunded unless partial output was billable.
EXPIREDtask statusThe feature-specific task deadline passed after a final status read. Inspect retryable and refunded, then submit a fresh task when retryable.
PROVIDER_PROCESSING_TIMEOUTtask statusAn accepted generation operation remained non-terminal through its processing deadline. Inspect retryable and refunded, then submit a fresh task when retryable.
TASK_CANCELLED409 / (task status)Cancelled before completion. Contact support if unexpected.
CodeHTTPRecovery
PROVIDER_ERROR502The selected generation service rejected the call. Inspect errorMessage; eligible credits are refunded if surfaced on a task.
PROVIDER_NOT_FOUND404Use a documented model path or omit the model override.
PROVIDER_TIMEOUT504The selected generation service did not respond in time. Retry with backoff.
PROVIDER_RATE_LIMITED429Temporary capacity or rate limit at the selected generation service. Retry after exponential backoff.
NO_AVAILABLE_ACCOUNT503No generation capacity is currently available. Transient — retry.
SERVICE_UNAVAILABLE503Gateway in maintenance / shedding load. Retry with backoff.
SUNO_INPUT_INVALIDtask statusFix the unsupported Suno value or resource combination.
SUNO_RESOURCE_ACCESS_DENIEDtask statusUse a resource compatible with the requested operation; do not blind-retry.
SUNO_FINALIZATION_FAILEDtask statusInspect refunded, then retry later with a new idempotency key.
SUNO_TEMPORARILY_UNAVAILABLEtask statusBack off and retry a new attempt after the temporary service condition clears.
SUNO_OPERATION_FAILEDtask statusNon-retryable Suno failure; inspect the request and contact support with X-Request-Id.
CodeHTTPRecovery
RATE_LIMITED429Respect the Retry-After header. See Rate Limits.
CodeHTTPRecovery
INTERNAL_SERVER_ERROR500Unexpected platform error. Capture X-Request-Id and file a ticket.
NOT_FOUND404Confirm the HTTP method and URL.

CONTENT_POLICY_REJECTED can appear as HTTP 422 before a new task is accepted, or on a terminal FAILED task. It has retryable: false. Read error.details on an HTTP error and the task’s public failure fields when polling:

FieldMeaning
errorReason / reasoncopyright_similarity, audio_recording_match, artist_reference, content_policy, or unknown
actionRequiredmodify_lyrics, replace_audio, remove_artist_reference, or modify_input
rejectedFieldThe input to change: lyrics, audio, prompt, description, or input

Change the named input, then make a deliberate new request with a new key. Do not automatically retry identical rejected input. On a failed task, inspect refunded and creditsCharged separately; a retry recommendation is not a refund receipt. An unknown reason is not proof of a copyright match.

message and errorMessage text is for people; it can change and is not a stable contract. When a failure’s internal details cannot be shown, an Omn V1 music video reports a generic message with an unchanged errorCode:

WhereMessage
Task errorMessage (read, list, stream and webhooks), MVView.lastErrorMessage and failureReason.message, and failureMessage on GET /api/v1/mv/{mvId}/finalThis MV could not be processed. Please retry later with a new idempotency key.
MVView.scenes[].sourceJob.errorMessageThis scene could not be rendered. Edit the scene to render it again.

Branch on errorCode, retryable and refunded. See Omn V1 during generation.

ClassRetry?Notes
Auth / validation (401, 403, VALIDATION_ERROR)NoFix the request and re-submit.
INSUFFICIENT_CREDITSNoTop up first, or raise an intentionally low MV/Vidu/Subtitle/Audio Editing maxCredits spend cap.
Unsupported engine choice (MV_ENGINE_UNSUPPORTED, 422)NoChange the request, render tier or schedule, or choose another MV engineVersion. An MV that is not_eligible for an upgrade stays as delivered; MVView.capabilities.upgrade reports this before you request one. See Omn V1 rejections.
Omn V1 MV busy or incomplete (MV_PRECONDITION_FAILED, 409, reason upgrade_in_progress, operation_in_progress or mv_not_complete)Yes, after the blocking work finishesWait for the running operation, or finish and recompose pending edits, then retry with the same key and body. rendering_superseded is not retryable: choose a current rendering. See Omn V1 upgrades.
Omn V1 source unavailable (MV_PRECONDITION_FAILED, 409, reason source_assets_unavailable)No, unchangedRequired source media is unavailable; the new operation was rejected before charging. A temporary verification failure instead returns retryable 503 MV_PROVIDER_UNAVAILABLE. See Source media.
Omn V1 Task ended before rendering (MV_NATIVE_SHOT_PROMPT_TOO_LONG, MV_NATIVE_REFERENCE_REJECTED)NoThe Task is refunded; change the prompt or reference images and create a new Task. See Omn V1 during generation.
Omn V1 reference check unavailable (MV_NATIVE_REFERENCE_REVIEW_UNAVAILABLE)Yes, laterThe Task is refunded; create it again with a new Idempotency-Key.
RATE_LIMITEDYes, after Retry-AfterHonor the header.
Generation-service transient (PROVIDER_TIMEOUT, PROVIDER_RATE_LIMITED, NO_AVAILABLE_ACCOUNT)Yes, with backoff1s → 2s → 4s → 8s → cap 30s, max 5 tries.
Server error (INTERNAL_SERVER_ERROR, CREDIT_DEDUCTION_FAILED)Yes, with backoffSame schedule.
EXPIRED / PROVIDER_PROCESSING_TIMEOUT (on task)Resubmit when retryableThe previous task is already final; also inspect refunded before reconciliation.