align=true (the default). All require authentication.
LRC and SRT endpoints
Word-level JSON endpoints
These endpoints are only available when the job was submitted with
word_align=true (the default). They return a JSON array where each entry contains a single word and its start timestamp.
Response — 200 OK:
Content-Type: application/json; charset=utf-8Content-Disposition: attachment; filename="<original_filename>[_transliterated]_words.json"
202:
GET /api/v1/jobs/{id} returns status: "complete" and words_original appears in results.downloads.
If the job was not submitted with word_align=true, word-level timings are
never produced and the endpoint returns 409 rather than 202 — see
Terminal responses below.
Response — 200 OK
Returns a plain-text file with:Content-Type: text/plain; charset=utf-8Content-Disposition: attachment; filename="<original_filename>[_transliterated].<ext>"
Not ready yet — 202
If the job exists but alignment has not completed, the endpoint returns202 instead of 404:
202 always means keep waiting — the output is still coming. Poll
GET /api/v1/jobs/{id} and fetch downloads once status is "complete".
Terminal responses
A409 means stop polling — this file is never going to exist. There are
two reasons, distinguished by the code:
The job failed (JOB_001):
JOB_002) — the job was submitted with
align=false, or word-level timings were requested on a job with
word_align=false:
These previously returned
202 { "status": "processing" } indefinitely, which
gave a caller no way to tell “still working” from “never coming”. Treat 202
as retry and 409 as terminal.Download URLs are returned directly in
results.downloads on the job response and in the job.complete webhook payload. You do not need to construct them manually.Examples
Download from webhook payload
If you’re using webhooks, the download URLs arrive in thejob.complete payload:
Authorization header to fetch.
See LRC & SRT Formats for a description of the file formats and when to use each.