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.

4 min readSume
All posts

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.

Format run deadlines (read 2026-10-07)
ConditionResult
Created, still workingDeadline is created_at plus 90 minutes
Older than 25 minutes and silent for 10Finalized as failed earlier
Terminalexpires_at is null
Poll routeGET /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

All Formats posts

Written by Sume