Does a Format run webhook fire per clip? No, once per turn
A Format run sends one format.run.terminal webhook per agent turn, however many clips it made. A continued run is new and sends its own.

No. A Format run is one agent turn, so its terminal event fires exactly once, however many clips, images or files the turn made. Sume has no per-artifact run event and does not plan one (Run webhooks). Read the finished clips from artifacts[] on the receipt after the single event arrives.
What fires and when
The event of the first run already fired and does not fire again when you continue.
| You do | Webhook |
|---|---|
| Start a Format run | One format.run.terminal when it ends. |
Continue it with previous_run_id | A new run with a new id, and its own single event. |
| Start a scheduled run | One action.run.terminal. |
| Start an Agent Completion | One agent.run.terminal. |
If you need progress inside a turn
Use the generation-job layer (Webhooks). It fires one event per job when the job completes. Job events name a job, not a step of your recipe, so map a job to a scene on your side.
Handler checklist
- Route on the
eventname, and do not parse the body to find the run type. - Make the handler idempotent on the run id. A redelivery can reach you twice.
- On a continued run, expect a different run id and the same
thread_id. - Poll
GET /v1/format-runs/{run_id}if the event never arrives.
Sources
Related posts
More in Formats
- No queue webhook on Sume bulk runs: count item webhooks instead
Sume bulk queues have no queue-level webhook. Put a webhook_url on each item and count terminal events to know a season is finished.
- Output schema 400 missing_items: an array node needs items
A Format output_schema with an array and no items fails with 400 and rule missing_items before anything runs. The bad schema, the fix, the violation.
- Output schema unsupported_ref: $defs must live at the schema root
A $ref to a nested $defs, an external URL or a missing name fails with unsupported_ref in a Sume output_schema. Move $defs to the root and fix the pointer.
- Output schema max_enum_values: 1,000 values per enum, then what
Sume refuses an enum of more than 1,000 values with rule max_enum_values. Use a string with a pattern or format, or split the list into two enums.
Written by Sume