Build a run status chip from the Format events phase timeline

Sume has no SSE stream for Format runs. Poll status_url and events_url to show queued, preparing, running and finalizing in your UI without faking progress.

4 min readSume
All posts

Show a status chip, not a percentage. Sume does not stream Format run progress: there is no SSE or WebSocket channel, and events_url is a polled phase timeline with preparing, running and finalizing. A chip built on those phases is honest. A progress bar built on guesses is not.

What you can read

Every run receipt carries its own URLs, so you never build a path by hand.

Where to read run state (Sume docs, read 2026-10-07)
Receipt fieldReturnsUse it for
status_urlSmall payload: status, next_action, cancelable, expires_at, queueThe chip and the poll loop
events_urlPhase timeline: preparing, running, finalizingA second line of text under the chip
result_urlFull receipt once terminal; 409 run_not_completed beforeReading the output
cancel_urlStops the runA Cancel button

Map states to chip text

Keep the words close to the real states.

  • queued: Waiting to start. If queue.state is runtime_unavailable, say it is taking longer than usual.
  • processing with phase preparing: Getting set up.
  • processing with phase running: Making your video. This can last 15 to 30 minutes for long-form host video.
  • processing with phase finalizing: Saving the files.
  • completed, failed, canceled: show the result or the error.

Poll without hurting yourself

Start at about five seconds and double the gap up to one minute. A one-second loop adds nothing and spends read budget. A 429 or 503 inside the loop is temporary: the run keeps going while you back off. Use expires_at on a non-terminal receipt as your ceiling, since Sume force-finalizes a run that exceeds it as failed.

Prefer the webhook for the final state

Use the poll only for the chip. For the result, take the signed format.run.terminal webhook and keep the poll as a backup for the day your endpoint is down. In TypeScript, the SDK's subscribeFormatRun wraps create-and-wait, and its onStatus callback reports statuses from a poll, not from a log feed (Embed a Format in your product).

What not to show

Do not show the agent's reasoning or logs. The events timeline does not contain them, and the API does not offer them. If a run did something you did not expect, open its thread in Agents and read the first message, which holds the exact text the agent received.

Sources

Related posts

More in Agents

All Agents posts

Written by Sume