How long can an AI video Format run take? 90-minute limit

A Sume Format run expires 90 minutes after creation, sooner if silent. How to poll with backoff, when to use a webhook, and what expired means.

4 min readSume
All posts

A Sume Format run has a hard lifetime: its expires_at is 90 minutes after created_at, and earlier if the run goes silent. If you are making a long video through a Format, that is the budget for the whole run, so plan the piece to fit it or split the work across several runs.

Poll or take the webhook

The docs give two ways to learn the end state. Polling GET on the run works with backoff, up to 60 seconds between calls. A webhook, set through communication.webhook_url, delivers a format.run.terminal event when the run ends.

Waiting on a Format run, from the Sume docs, read 2026-10-06.
MethodDetailWatch for
PollingBack off, cap at 60 sStop at expires_at
Webhookformat.run.terminal, HMAC-SHA256, 5-minute window, up to 10 retriesVerify the signature first
ReplaySame Idempotency-Key and body returns 200 with idempotency_hit: trueA 202 means a fresh run

A polling loop that stops

This loop backs off, stops on any terminal status and gives up after the 90 minutes. It needs SUME_API_KEY and a run id.

import json, os, sys, time, urllib.request

TERMINAL = {"completed", "failed", "canceled", "skipped"}

def get(run_id):
    req = urllib.request.Request(
        f"https://api.sume.com/v1/format-runs/{run_id}",
        headers={"Authorization": "Bearer " + os.environ["SUME_API_KEY"]})
    with urllib.request.urlopen(req) as r:
        return json.load(r)["data"]

def wait(run_id, limit=90 * 60):
    start, delay = time.time(), 2
    while time.time() - start < limit:
        d = get(run_id)
        if d["status"] in TERMINAL:
            return d
        time.sleep(delay)
        delay = min(delay * 2, 60)
    raise TimeoutError("run did not end inside 90 minutes")

if __name__ == "__main__":
    print(wait(sys.argv[1])["status"])

What to do when time runs short

A single Format call is a poor fit for a very long edit. Split it: one run per scene or chapter, each with its own spend cap, and join the results yourself on Timeline 1.0, whose audio track can run up to 1800 seconds. That way one slow scene does not take the whole piece down with it.

Also read the end state carefully. completed is not the same as success, because the receipt can carry outcome of degraded or an output_error. Check both before you pass the file on.

Log what you saw

Record the run id, the creation time and the final status for each run you start. When a run does expire, that log tells you how long it really ran and whether a different brief would have fit.

Why 90 minutes is usually plenty

Most single-clip Format runs end well inside the limit, and the limit exists so that a stuck run does not sit in your history forever. Treat a run that nears it as a signal to simplify the brief, not to wait longer. Use a spend cap on every long run, so that a run which is spending but not finishing is stopped by money before it is stopped by the clock.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume