REST API

Add lyrics to anything. One endpoint.

Transcribe, transliterate, translate and align 48+ languages in a single async call. Per-minute pricing, no minimums. Single jobs, batch up to 20, or alignment-only if you already have the transcript.

POST/v1/transcribe
# audio_url has no size limit. 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" }
file upload or URLword-level timestampsasync + webhook48+ languages
§ I · Integration

Three calls. Done.

i

POST a job

Send your audio file or URL, language code, and output preferences. The API returns a job ID immediately — processing happens asynchronously.

ii

Poll or receive a webhook

Pass a webhook_url at creation time and we'll POST the result when the job completes. Or poll GET /v1/jobs/{id} — jobs finish in under a minute for most songs.

iii

Download the outputs

Download URLs are included in the completed job response. LRC, SRT, word-level JSON — both original script and transliterated — ready to ingest.

GET/v1/jobs/{id}
// status: "processing" | "complete" | "failed"
{
  "status": "complete",
  "transcript": "ਹਵਾ ਚੱਲੀ ਸ਼ਾਮ ਢਲੀ…",
  "download_urls": {
    "lrc_original": "https://…/download/lrc/original",
    "words_original": "https://…/download/words/original"
  }
}
§ II · Endpoints

Four endpoints cover every workflow.

Paths below are relative to https://lyrcs.ai/api — so /v1/transcribe is POST https://lyrcs.ai/api/v1/transcribe.

POST/v1/transcribe

Transcribe, transliterate, translate and align audio. Accepts a file upload (multipart, 4.5 MB ceiling) or an HTTPS audio URL with no size limit.

languagereq
ISO language name, e.g. Punjabi, Hindi, Tamil
file
Audio file (multipart). Required if audio_url is absent. Hard 4.5 MB ceiling — larger bodies are rejected with a plain 413 before reaching the API.
audio_url
HTTPS URL to an audio file. Required if file is absent, and the only option above 4.5 MB. Must stay publicly reachable until the job starts.
align
Default true. Set false for transcript-only jobs.
word_align
Default true. Word-level timestamps in addition to line-level.
review
Default false. Pauses pipeline until a human approves the transcript.
webhook_url
HTTPS URL to notify when the job completes.
POST/v1/batch

Submit up to 20 jobs in a single call. Each job follows the same schema as /v1/transcribe.

jobsreq
Array of job objects (max 20). Each has audio_url, language, and optional align/word_align/review.
webhook_url
Batch-level webhook — fires once when all jobs complete.
GET/v1/jobs/{id}

Poll a job for status and results. Returns download URLs for all output formats once the job is complete.

No body parameters. Cross-org enumeration is blocked; 404 for jobs not owned by your org.
§ III · Outputs

Every format, both scripts.

LRCline-level

Standard .lrc format with per-line timestamps. Delivered for both original script and transliteration.

/v1/jobs/{id}/download/lrc/{type}
SRTsubtitle

.srt subtitle format. Drop into video editing software or a player that supports SRT.

/v1/jobs/{id}/download/srt/{type}
Word JSONword-level

Array of { word, timestamp } objects with millisecond precision. Powers karaoke and word-by-word highlighting.

/v1/jobs/{id}/download/words/{type}
Cultural notesin response body

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.

§ IV · Advanced

Human review gate. Batch. Webhooks.

Human review gate

Pass "review": true to pause the pipeline before alignment. 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.

Webhooks

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 is identical to the GET /v1/jobs/{id} response.

Use POST /v1/webhook-test to send a sample payload to your endpoint.

Batch jobs

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.

Ready to integrate?

Full reference docs, code samples, and language coverage at docs.lyrcs.ai. Request API access below.