Error reference
PAY_001 and PAY_002 are different problems. PAY_001 means you are out
of credits. PAY_002 means your plan does not cover the feature you asked for,
and buying credits will not fix it.Retired codes
404 is returned for cross-organisation access attempts as well as genuinely
missing resources. This prevents enumeration of other organisations’ job IDs.
RATE_001, SRV_001 and IDEM_001 are worth retrying automatically.
Everything else describes something a retry cannot change.
IDEM_002 is a bug in your code, not a transient failure. It means one
Idempotency-Key was sent with two different request bodies. Retrying will not
help; generate a fresh key per submission. We refuse rather than replaying the
first result, because replaying would silently drop the second song.Rate limit errors — 429
Standard (single job):jobs_requested:
retry_after field is the number of seconds to wait before retrying. A Retry-After header with the same value is also included.
Rate limit headers
Every authenticated response includes the rate limit state for the budget that request drew from. Submissions and reads are metered separately, so the numbers differ depending on which you called.X-RateLimit-Meter tells you which set of numbers you are looking at. A GET /jobs/{id} reports your read headroom; only a submission reports the budget that
governs how many songs you can send. See Default rate limits
for the ceilings.
Check X-RateLimit-Remaining-Minute on a submission before sending a large batch to
confirm you have enough headroom. Rejected requests do not consume quota.
Validation errors — 400
Common triggers forVAL_001:
languagefield missing or not matching any entry inGET /api/v1/languages(case-sensitive)- Neither
filenoraudio_urlprovided toPOST /transcribe audio_urlis not a valid HTTPS URL- Batch body is not an array or
{ jobs: [...] }object - Batch
jobsarray has 0 or more than 20 entries - Individual batch job missing
audio_urlorlanguage - Invalid audio MIME type or file extension on file upload
402 — Insufficient Credits
Download endpoints — 202, 409 and 404
The download endpoints (/download/lrc/*, /download/srt/*, /download/words/*)
distinguish three cases, and the difference is what tells a client whether to
retry:
409 responses carry a code: JOB_001 for a failed job (with stage and
message describing what went wrong) and JOB_002 for output that was never
requested, such as calling an LRC download on an align=false job.
Prefer polling GET /jobs/{id} and fetching downloads once it reports
status: "complete".
Job failure codes
Neither is retryable on the same job.
JOB_001 at the transcription stage may
be worth resubmitting; JOB_002 means resubmitting with different flags.