video-captions alignment_reason: the six values explained
Failed script_text caption jobs may carry an alignment_reason such as invalid_stt_span or overlapping_stt_spans. Six values are documented in the schema.

When a script_text caption job fails alignment, the error details may include an alignment_reason plus the script and STT word counts. The six documented values are invalid_alignment_payload, empty_aligned_words, invalid_stt_span, overlapping_stt_spans, non_monotonic_timings and script_coverage_mismatch.
What the details contain
The OpenAPI schema says these details are public-safe: the reason and the word counts only, never the script text, STT word text or raw model payloads. Compare script_word_count with stt_word_count first. A large gap points at a script that does not match what was said.
| alignment_reason | Reading from the name | First check |
|---|---|---|
| invalid_alignment_payload | The alignment response was malformed | Retry once, then simplify the script |
| empty_aligned_words | No words came back aligned | Confirm the video has speech |
| invalid_stt_span | A transcribed word had a bad time span | Retry, or omit script_text |
| overlapping_stt_spans | Transcribed word times overlap | Retry, or omit script_text |
| non_monotonic_timings | Times went backwards | Retry, or omit script_text |
| script_coverage_mismatch | Script and speech differ too much | Match the script to the audio |
The documented fix
The docs list script_alignment_mismatch and script_alignment_failed as the public error codes and suggest the next action simplify_script_text_or_omit. Omitting script_text burns the STT wording instead. The reasons in the middle column are descriptions of the names, not guarantees, since the docs do not explain each one.
A practical order
First check the video has audible speech, because silent clips fail as caption_no_speech. Then shorten or simplify the script so it matches the spoken words. If it still fails, drop script_text and, if the wording matters, supply authored cues instead. The mismatch fix post covers the common case.
Sources
Related posts
More in Media tools
- A series theme from one Lyria track, ducked under every episode
Generate a theme once with Music 1.0 on Lyria 3.5, then reuse it under each episode with Timeline 1.0 soundtrack, loop, fade_out and duck_db. Request body.
- The Shorts like button is a heart: keep captions clear of it
On YouTube Shorts the like control is a heart, and dislike is for long-form. Where creator hearts come from, and how to keep burned-in text clear of the icons.
- Shorts thumbnail 2160x3840 hits GPT Image 2.5's 8,294,400 px cap
YouTube's Shorts thumbnail size, 2160x3840, is exactly 8,294,400 pixels, the top of Sume's GPT Image 2.5 custom range. 1080x1920 is not legal; 1088x1920 is.
- Slack's 1 GB file limit is not the cap that binds a Sume video clip
Slack lets you add files up to 1 GB, far above what Sume's trim, timeline and source caps produce. Check the Sume limits that actually shape a clip.
Written by Sume