Every error.
A clearer next step.
Stable codes. Useful context. All OpenSEP API errors
follow application/problem+json.
Know what happened.
Know what to do.
Use code to handle the error, retryable to decide your next step, and request_id when contacting support.
{
"code": "file.too_long",
"status": 413,
"retryable": false,
"title": "Audio is too long",
"request_id": "req_example"
}| Code & next step | HTTP | Retryable |
|---|---|---|
auth.unauthenticatedNo valid session or token was presented. Sign in and retry. | 401 | No |
auth.ambiguous_credentialBoth a session cookie and a bearer token were sent. Send exactly one. | 401 | No |
auth.csrf_originThe request did not carry an acceptable Origin. Browser calls must come from opensep.com itself. | 403 | No |
auth.principal_forbiddenThe credential is valid but this account or principal type may not perform the action. | 403 | No |
auth.fresh_session_requiredThe action needs a recent sign-in. Sign in again and retry. | 403 | No |
demo.turnstile_failedThe human-verification token was missing, expired, or invalid. | 403 | No |
demo.quota_exhaustedA demo limit is spent: the grant’s one separation, today’s allowance, or the hourly burst cap. Sign up for a free account, or retry after the Retry-After interval when one is sent. | 429 | Yes |
wallet.too_many_active_jobsThe account already has the maximum number of jobs queued or running (waiting jobs count). Finish or cancel one and retry. | 429 | Yes |
wallet.blockedThe account is on hold (for example after a payment dispute). Contact support. | 402 | No |
file.not_foundNo such file for this account. Files are never visible across accounts. | 404 | No |
file.expiredThe file passed its retention horizon and is gone. Uploads are deleted after 1 day. Results stay available for 3 days. | 410 | No |
file.too_largeThe declared size exceeds the upload limit for your plan. `detail` names the plan and the limit. | 413 | No |
file.too_longThe audio is longer than the per-file limit for your plan. `detail` names the plan and the limit. | 413 | No |
file.not_uploadedThe upload was declared but the bytes never arrived, or the file is not ready yet. | 409 | No |
file.unsupportedThe declared content type is not an audio or video type. | 422 | No |
file.probe_failedThe file could not be decoded as audio, or its length could not be read from its header; `probe_error` on the file says which. | 422 | No |
file.too_many_pendingToo many declared uploads are still pending for this account. | 429 | Yes |
file.storage_fullThe account holds as many uploaded bytes as its plan allows at once (10× the per-file limit); results do not count. Delete an upload or wait for one to expire; `detail` names the number. Uploads are deleted after 1 day. Results stay available for 3 days. | 429 | Yes |
file.in_useA job that is still running references this file. | 409 | No |
job.not_foundNo such job for this account. | 404 | No |
job.invalid_stateThe job is in a state where the requested transition is not allowed (for example cancelling a finished job). | 409 | No |
legal.acceptance_requiredThe account has not accepted the current Terms and Privacy Policy. Open the app and accept them, then retry. | 403 | No |
queue.timeoutThe job waited in the queue longer than the limit and was not started. Try again, or move to a plan with a faster queue. | 503 | Yes |
runpod.queue_timeoutRunPod kept the job in its own queue past the queue budget (one hour after submit), so it was cancelled there and never started. Nothing was charged; retry. | 503 | Yes |
runpod.lostRunPod answered five status polls in a row that it had no such run, so the job was failed and its run cancelled there. Nothing was charged; retry. | 503 | Yes |
idempotency.key_requiredThis mutating request must carry an Idempotency-Key header. | 422 | No |
idempotency.key_mismatchThe Idempotency-Key was reused with a different request body. | 409 | No |
idempotency.in_flightAn identical request is still being processed. Retry after the Retry-After interval. | 409 | Yes |
idempotency.key_spentThis Idempotency-Key's earlier attempt was refused or released its reservation, and nothing was created. Retry with a new Idempotency-Key; that is a fresh attempt. | 409 | No |
billing.no_subscriptionThe account has no active paid subscription for this action. | 409 | No |
billing.provider_errorThe payment provider did not respond correctly. Safe to retry. | 502 | Yes |
billing.plan_change_unavailableThe subscription is cancelling at the end of its period (resume it first, then change plan), or its period has already ended and the scheduled change is due. | 409 | No |
billing.no_pending_changeThe subscription has no scheduled plan change to withdraw; it already renews on its current plan. | 409 | No |
billing.subscription_existsThe account already holds a live subscription (active or past due, cancelling or not). Checkout is refused before the payment provider is called, so a second subscription is never opened; manage or resume the existing one instead. | 409 | No |
ops.stale_intentAn operator approval was recorded against a gate the intent has since moved past. Re-read the intent and decide again. | 409 | No |
ops.revision_exhaustedThree revisions have already been recorded for this gate of this intent. Approve it or drop it instead. | 409 | No |
ops.unfreeze_refusedThe account is not frozen by a chargeback (it is not frozen, or frozen for another reason such as deletion), so the operator unfreeze has nothing to lift. | 409 | No |
ops.access_not_recordedAn operator lookup or a play of a customer file could not write its access record, so nothing was returned and no link was made. Safe to retry; the retry writes its own record. | 503 | Yes |
storage.unavailableObject storage did not answer twice. Nothing was stored; safe to retry. | 503 | Yes |
range.not_satisfiableThe `Range` asks for bytes the file does not have; `Content-Range: bytes */<size>` gives its length. | 416 | No |
validation.failedThe request body or query failed validation; `errors[]` lists the fields. | 422 | No |
feature.disabledThe feature is switched off right now; `feature` names which one. | 403 | No |
rate_limit.exceededToo many requests. Slow down and retry after Retry-After. | 429 | Yes |
payload.unsupported_media_typeRequest bodies must be application/json. | 415 | No |
not_foundNo such route or resource. | 404 | No |
internalSomething failed on our side. The `request_id` lets support find it. | 500 | Yes |
No matching error codes.
Try a broader search or turn off the retryable filter.