Skip to main content
Every job can return two blocks of evidence alongside its results: what a second, independent listener made of the transcript, and how the timings were produced. Neither changes the output. They tell you where to look if you want to check something before it goes live — which matters most on the API, where no one from your team sees the lyrics unless you route them somewhere yourself. Both appear on 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.
Do not write if (!job.second_opinion) and treat both cases the same. That reads “we never checked” as “the transcript is clean”, which is the opposite of what it means. Test for null explicitly.
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 of line 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 and null on every response, so you can write your integration against them before they are switched on.