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
- isTerminalJobStatus vs isTerminalRunStatus: skipped only ends runs
The Sume SDK has two terminal checks. Jobs end on completed, failed or canceled; runs also end on skipped. Reusing one for both breaks a custom poll loop.
- Seedance 1.5 Pro retires Nov 11: pin a live Sume model id
ElevenLabs says ByteDance retires Seedance 1.5 Pro on Nov 11, 2026. Pin an id Sume's video catalog lists today and verify its limits first.
- 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.
Written by Sume