Why a Sume scheduled run's events_url is null, and what to poll
Action runs always return events_url null; Format runs expose a phase timeline. What to poll for a scheduled run and how to read skipped.

events_url is always null on a Sume scheduled (action) run; it is a field kept for shape parity with Format runs, which do return a real phase timeline. For an action run, poll status_url until a terminal status and read result_url for the output. cancel_url is present while the run is cancelable.
Fields by run type
| Field | Format run | Scheduled (action) run |
|---|---|---|
| status_url | Yes | Yes |
| result_url | Yes | Yes |
| events_url | Phase timeline | Always null |
| cancel_url | Yes | Yes, while cancelable |
| Per-run spend cap | Up to $500 | Clamped to the lower of the request and the schedule cap |
Statuses to handle
An action run can be queued, processing, completed, failed, canceled or skipped. skipped is not a failure: overlap policy skip records a tick that arrived while a run was active, with skip_reason previous_run_active. Treat it as no output and wait for the next tick.
Poll without the timeline
Without events, use status and time. Back off between polls, stop on any terminal status, and send an alert when a run has been processing past your own limit.
import json, os, time, urllib.request
TERMINAL = {"completed", "failed", "canceled", "skipped"}
def wait(status_url: str, limit_s: int = 1800) -> dict:
end = time.time() + limit_s
while time.time() < end:
req = urllib.request.Request(status_url, headers={
"Authorization": "Bearer " + os.environ["SUME_API_KEY"]})
with urllib.request.urlopen(req) as resp:
run = json.load(resp)
if run.get("status") in TERMINAL:
return run
time.sleep(15)
raise TimeoutError(status_url)If you need phases
If you need a phase timeline or an output schema per call, run a Format on your own tick instead; the events endpoint on a Format run reports preparing, running and finalizing.
Sources
Related posts
More in Developers
- Write a 30-second Seedance 2.5 prompt as six five-second beats
One 30-second Seedance 2.5 request needs a prompt with a timeline. Split the idea into six beats, keep one subject, and send it as a single Sume job.
- Seedance 2.5 720p on fal, 1080p on Sume: read the catalog
fal lists Seedance 2.5 Image to Video at up to 720p and 30 seconds. Sume docs list seedance-2.5 at 4-30 s and 480p/720p/1080p. Check the catalog before pinning.
- Seedance 2.5 camera move test grid: six 4-second probes at 480p
Test dolly, orbit, crane, handheld, whip-pan and static camera prompts with six 4-second Seedance 2.5 probes at 480p for about $6.45 before a 30 s run.
- Seedance 2.5 vendor terms mapped to Sume request fields
How ByteDance and BytePlus terms for Seedance 2.5 map to Sume Video Router fields: references, first and last frame, audio, and the limits that differ.
Written by Sume