GET /api/v1/jobs/{job_id} and in the job.complete and
job.awaiting_review webhook payloads.
null means “not checked”, not “nothing found”
This is the one thing to get right.
An empty
suggestions array is the strongest positive signal the pipeline
produces — an independent listener heard the same words we transcribed. null
tells you nothing at all about the lyrics.
Both blocks are null when the feature is not enabled for your account, and
second_opinion is additionally null for languages the second listener does
not cover, and on jobs created before this feature existed.
second_opinion
A second speech engine listens to the song independently and its transcript is compared against ours, line by line. It does not see our lyrics first, so where the two agree, two systems reached the same words separately.The two kinds are not equally important
section findings deserve more of your attention than line findings.
A line finding is usually a spelling or vowel-length difference. A section
finding means the listener heard singing where our transcript has nothing —
which can mean a whole verse or chorus is missing.occurrences lists every place the same change applies. at_seconds is
approximate — accurate enough to seek a player to the right part of the song, not
a timestamp for publishing. Use the LRC or word-level downloads for that.
Expect disagreements on clean transcripts
Sung material produces genuine disagreement between any two engines: held vowels, ad-libs, backing vocals, and compound words that one system splits and the other joins. A handful ofline suggestions on a correct transcript is normal and does
not mean the lyrics are wrong.
The check is deliberately tuned to over-report rather than under-report, because a
missed verse is expensive and a spurious spelling suggestion is not.
alignment
How the timings on this job were produced, and which lines look suspect.coverage is the share of the transcript that received a timing, and is null
unless forced alignment produced the result.
line_flags
Lines whose audio matches their text far worse than the other lines in the same song. In practice this is a short list — often empty — and each entry is worth thirty seconds of listening.What this catches: a line placed where its words are not sung. Forced
alignment must place every line it is given, so a long instrumental break can
pull the following line in early. It also catches transcription errors large
enough to matter against the line’s length.What it does not catch: a wrong word that still sounds close to what was
sung. An empty
line_flags is not a guarantee of correctness — it means
nothing stood out against the rest of this song.A reasonable way to use these
1
Treat section findings as blocking
Any
kind: "section" finding is worth a human listen before publishing. This
is the case where lyrics may simply be absent.2
Check every flagged line
line_flags is short by design. Seek to the line and listen.3
Watch for forced_rejected
It means this specific job fell back to a less accurate timing method.
4
Let line findings inform, not block
A few
kind: "line" suggestions are normal on correct transcripts.Availability
Both are enabled per account and are off by default. Contact us if you would like either turned on — the second listener adds a small per-song cost, forced alignment does not. When neither is enabled, both fields are present andnull on every response, so
you can write your integration against them before they are switched on.