Why did my Shorts episode Format run fail after 90 minutes?
A Sume Format run has an expires_at deadline of 90 minutes from creation, after which it is force-finalized as failed. Split an episode into scene runs.

A Format run is force-finalized as failed when its expires_at passes, and that deadline is 90 minutes after created_at. It can be earlier when the run is older than 25 minutes and has been silent for 10.
If an episode run keeps hitting it, the fix is not a longer timeout. It is smaller runs, one per scene.
What the receipt tells you
A non-terminal receipt holds expires_at, and the small poll route GET /v1/format-runs/{run_id}/status returns it with status, next_action and cancelable. When the run is terminal, expires_at is null. Use the value to set your own timeout instead of inventing one.
The docs also warn that the status payload never contains the output or artifacts; read the run itself for those.
| Condition | Result |
|---|---|
| Created, still working | Deadline is created_at plus 90 minutes |
| Older than 25 minutes and silent for 10 | Finalized as failed earlier |
| Terminal | expires_at is null |
| Poll route | GET /v1/format-runs/{run_id}/status |
Splitting an episode
Make one run per scene and chain them with previous_run_id, which continues an earlier run of the same Format as one more turn of the same conversation. The scene redo post shows the pattern. For a whole season, put the scene runs in a bulk queue as in the 100-episode post.
Smaller runs also make cost visible: each receipt reports usage.billable_amount_usd_micros against its cap.
- Keep a scene to one generation plus its assembly.
- Set a per-run
generation_spend_cap_usd. - Retry a failed scene alone; the rest of the episode stands.
A scene-sized run budget
Think of the 90 minutes as a budget for one conversation turn, not for a season. A scene that generates two clips, joins them and returns a receipt should finish in a fraction of that. If a run needs most of the window, it is probably doing too much: split it before the deadline decides for you.
Poll the small status route on a schedule that suits the work. A few seconds is too aggressive for a video run; a minute is plenty. When next_action or status tells you the run is finished, read the run itself for artifacts, since the status payload never carries them. Use expires_at as your own client-side ceiling so a stuck run does not hold your pipeline.
After a failure, check the error on the terminal receipt before you retry. A run that was force-finalized at the deadline is a signal to shrink the work, not to repeat it unchanged.
Sources
Related posts
More in Formats
- Shorts series sequential playback: fade out or hard cut each episode?
YouTube plays Shorts series episodes in order. Pick a hard cut or a short fade at the end of each one, with the Timeline 1.0 fade limits.
- Bulk queue item error: format_run_canceled vs format_run_failed
In a Sume bulk queue, a failed child reads format_run_failed and a canceled child reads format_run_canceled. The real reason is in the child run receipt.
- TikTok 60-minute uploads vs Sume's 30-minute source limit
Sociality.io reports TikTok uploads up to 60 minutes. Sume trims and Timelines stop at 1800 seconds (30 minutes). What fits, and the cut points for the rest.
- Virtual try-on or virtual fitting: which Sume Format for clothing?
Both are Sume catalog Formats that take a garment still and return 9:16 video. Try-on is an outfit-change reveal; fitting is a fit preview with a small turn.
Written by Sume