Skip to main content

Endpoint

Runs alignment on a job you already submitted. Two situations, one endpoint: The second case matters after an edit. Word-level timings are positional, so correcting a line leaves them describing words that are no longer there; re-aligning re-derives every output together so they cannot disagree.

It does not charge

Your credit is bound to the song when the job is created, at your organisation’s tier — the tier is an entitlement, not a per-feature price. A transcript-only job on Lyrics Pro has already paid the price that includes alignment, so aligning it later costs nothing further. Alignment does require Lyrics Pro; a Lyrics Basic organisation receives 402.

Request

No body. The job id in the path is the whole request.

Responses

Alignment queued — 202:
Re-aligned — 200, synchronous:
This is the one thing that moves a job out of complete. A transcript-only job is complete; queueing alignment returns it to processing until the timings land. Everywhere else complete is terminal — here your own request changed what the job is for.
Completion is observed by polling GET /jobs/{id}. No new job.complete webhook is fired for work requested this way.

Repeat calls are cheap

Re-aligning text that has already been timed would produce an identical result, so it is not done. A repeat call on unchanged text returns immediately:
Edit the lyrics — at the review gate, or in the studio — and the next call re-derives normally. A job whose timings came from the older aligner is always re-aligned, unchanged text or not, because switching aligner genuinely changes the result.
This endpoint draws on the submit rate limit, not the read limit, because it performs real work. Status polling is unaffected.

Errors

A failed re-alignment never leaves you worse off: nothing is written unless the new timings are usable.

Relationship to the withdrawn POST /v1/align

The old endpoint took audio and lyrics and created a second job for a recording already in the system — a second charge for one song. It never worked and returns 410. This endpoint is its replacement, and takes a job id precisely so there is one row, one charge, and audio already in the bucket.