Transcribe, transliterate, translate and align 52 languages in a single async call. Single jobs, batch up to 20, or hold a job for an artist to approve before the timings are made.
# audio_url supports files up to 100 MB. Multipart file uploads cap at 4.5 MB. curl https://lyrcs.ai/api/v1/transcribe \ -H "Authorization: Bearer $KEY" \ -H "Content-Type: application/json" \ -d '{ "audio_url": "https://…/track.mp3", "language": "Punjabi", "word_align": true, "webhook_url": "https://your-app.com/hook" }' → 202 { job_id: "job_9f2a…", status: "queued" }
Send your audio file or URL, language code, and output preferences. The API returns a job ID immediately — processing happens asynchronously.
Pass a webhook_url at creation time and we'll POST the result when the job completes. Or poll GET /v1/jobs/{id} — most songs finish in under a minute. A job submitted with review=true instead waits for a human, so poll for review_approved_at rather than a deadline.
Download URLs are included in the completed job response. LRC, SRT, word-level JSON — both original script and transliterated — ready to ingest.
// status: "processing" | "complete" | "failed" { "status": "complete", "transcript": "ਹਵਾ ਚੱਲੀ ਸ਼ਾਮ ਢਲੀ…", "download_urls": { "lrc_original": "https://…/download/lrc/original", "words_original": "https://…/download/words/original" } }
Paths below are relative to https://lyrcs.ai/api — so /v1/transcribe is POST https://lyrcs.ai/api/v1/transcribe.
/v1/transcribeTranscribe, transliterate, translate and align audio. Accepts a file upload (multipart, 4.5 MB ceiling) or an HTTPS audio URL for files up to 100 MB.
languagereqfileaudio_urlalignword_alignreviewreview_stagereview_deliveryend_userisrcexternal_idwebhook_urlIdempotency-Key/v1/batchSubmit up to 20 jobs in a single call. Each job follows the same schema as /v1/transcribe.
jobsreqwebhook_url/v1/jobs/{id}Poll a job for status and results. Returns download URLs for all output formats once the job is complete, and — while a job is held for review — the lyrics as an array of lines.
—/v1/jobsList your jobs, newest changes last, with a resumable cursor. This is how a catalogue-sized integration syncs — poll this once rather than every job individually.
updated_sincestatusexternal_id / isrc / end_user_id / batch_idlimit / cursor/v1/jobs/{id}/approveApprove a job held for review, from your own server. Lets the artist review lyrics inside your product instead of being sent to a lyrcs.ai link — the outputs are identical either way.
linestransliterated_lines/v1/jobs/{id}/alignAlign, or re-align, a job that already exists — either a transcript-only job, or one whose lyrics have since been corrected. One job, one charge, audio we already hold.
—Standard .lrc format with per-line timestamps. Delivered for both original script and transliteration.
/v1/jobs/{id}/download/lrc/{type}.srt subtitle format. Drop into video editing software or a player that supports SRT.
/v1/jobs/{id}/download/srt/{type}Array of { word, timestamp } objects with millisecond precision. Powers karaoke and word-by-word highlighting.
/v1/jobs/{id}/download/words/{type}Idioms, cultural references, and context notes generated during transcription. Returned in the job response, not a separate download.
LRC, SRT and word JSON are each delivered in two variants: original script (e.g. Gurmukhi, Devanagari) and transliterated. The {type} path segment is original or transliterated.
Pass "review": true to pause the pipeline for human review. The completed transcription response includes a review_url — a shareable link where a human can approve or edit the transcript before alignment proceeds.
Useful for supervised workflows, editorial teams, or high-value tracks.
Pass webhook_url at job creation and we'll POST the completed job payload to your endpoint instead of making you poll. The webhook body carries the same job fields as the GET /v1/jobs/{id} response, wrapped with a top-level event field.
Use POST /v1/webhook-test to send a sample payload to your endpoint.
Submit up to 20 jobs in a single call via POST /v1/batch. Rate limits are checked against the full batch size before any jobs are created. A single batch-level webhook fires when all jobs complete. Poll GET /v1/batch/{id} for per-job status.
Rate limits: 10 / minute · 100 / hour · 1,000 / day.
Full reference docs, code samples, and language coverage at docs.lyrcs.ai. Request API access below.