Skip to main content
All error responses follow a consistent JSON shape:

Error reference

404 is returned for cross-organisation access attempts as well as genuinely missing resources. This prevents enumeration of other organisations’ job IDs.

Rate limit errors — 429

Standard (single job):
Batch variant — includes jobs_requested:
The 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 current rate limit state: Check X-RateLimit-Remaining-Minute before submitting a large batch to confirm you have enough headroom.

Validation errors — 400

Common triggers for VAL_001:
  • language field missing or not matching any entry in GET /api/v1/languages (case-sensitive)
  • Neither file nor audio_url provided to POST /transcribe
  • audio_url is not a valid HTTPS URL
  • Batch body is not an array or { jobs: [...] } object
  • Batch jobs array has 0 or more than 20 entries
  • Individual batch job missing audio_url or language
  • Invalid audio MIME type or file extension on file upload

402 — Insufficient Credits

Contact your account administrator or email support@lyrcs.ai to add 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.