Sume Agent Completions vs Format vs Scheduled runs: request body diff
Sume Format runs, Scheduled runs, and Agent Completions share field names, not rules: spend-cap defaults, null, on_active_run, attachments, and scopes differ.

Sume's Format runs, Scheduled (Action) runs, and Agent Completions run the same agent and return the same receipt shape, but their request bodies are not interchangeable: the instruction source, the spend cap's default and null, on_active_run, attachments, unknown-field handling, scopes, and webhook events all differ by surface.
The comparison comes from Sume's Create a run, Advanced: run a schedule via API, and Agent Completions docs pages, read on 2026-09-26. For which surface fits which job, see What is a video agent?
Which request fields differ between the three surfaces?
Scheduled is the product name; the wire namespace is /v1/actions. Each surface differs in where the instruction comes from and what Sume has saved for you, and the body follows from that.
| Field or rule | Format run | Scheduled run | Agent Completion |
|---|---|---|---|
| Create | POST /v1/formats/{handle}/{slug}/runs | POST /v1/actions/{action_id}/runs | POST /v1/agent/completions |
| Task comes from | The saved Format, plus optional instruction (up to 8000 characters) | The schedule's saved instructions | Exactly one of instruction or messages |
Body {} | 400 invalid_request | Accepted: input defaults to {} | 400 invalid_request |
generation_spend_cap_usd omitted | The Format's cap ($400 if it never set one) | The schedule's cap ($1.00 when unset) | 400 invalid_request: required, no default |
on_active_run | allow (default), skip, reject | skip (default), reject | Not a listed field |
attachments | Up to 30 images | Not a body field; dropped if sent | Up to 30 images, top level or as input_image parts |
model | An Agents catalog id for the orchestrator | Not a body field; the schedule saves a model | Only sume-agent |
| Continue a run | previous_run_id | Not a body field | Not available yet; each completion runs in a fresh thread |
| Idempotency key | Header, or body idempotency_key (header wins) | Header, 1–255 characters | Behaves as on Action runs |
| Webhook event | format.run.terminal | action.run.terminal | agent.run.terminal |
| Scopes | formats:read, formats:write | actions:read, actions:write | agent_completions:read, agent_completions:write |
What does null mean for the spend cap on each surface?
The field has one name and three rule sets. On a Format run, a number up to 500 is honored even above the Format's own cap, null runs at the $500 platform maximum, and 0 or anything above 500 is a 400. On a Scheduled run, a number is clamped to the lower of the request and the schedule's cap, so it can lower the cap but never raise it; null runs with no automation ceiling, while wallet balance, generation admission, and org limits still apply; 0 is a 400. On an Agent Completion the cap is required and has no default, and the Agent Completions page does not document a null value. More in spend caps for unattended AI agents.
Why does a body copied between surfaces misbehave?
Three rules catch people who port a body from one surface to another:
on_active_run: a Format defaults toallowand runs concurrently, subject to workspace generation concurrency, while a schedule defaults toskip. The Format docs say not to copy schedule bodies into Format calls. See how to prevent overlapping agent runs.- Unknown fields: a Format answers
400 unknown_parameter, with a suggestion when the name is close (webook_url→webhook_url). A schedule accepts only its listed properties and silently drops unknown top-level ones, so a typo fails quietly. - Size: a Format body is capped at 4 MiB (
413 payload_too_large).inputis capped at 64 properties and 2 MiB on both Formats and schedules.
How do idempotency and webhooks compare?
On all three, replaying an Idempotency-Key with the same payload returns the original receipt with idempotency_hit: true, and reusing it with a different payload is 409 idempotency_conflict. Format keys are scoped to one Format and run up to 255 characters. On a schedule, a request without a key has no replay protection, so every such request starts a new run.
communication.webhook_url works the same on all three surfaces: one signed POST when the run completes or fails, carrying the same receipt the poll endpoints return. The event name tells you the family. A skipped run and a canceled run never deliver one.
Which run id works where?
Each family lives behind its own URL prefix: /v1/format-runs/…, /v1/action-runs/…, and /v1/agent-runs/…. Format and Action run ids both start with arun_, so the id cannot tell those two apart: store the surface next to the id. An Action or Format run id does not resolve on /v1/agent-runs (404 agent_run_not_found). In the TypeScript SDK, waitForRun requires family: "format", "action", or "agent".
Service-account keys cannot create Format runs, Scheduled runs, or Agent Completions. Each refusal is 403 insufficient_scope, with a details.reason naming the surface.
Sources
Related posts
Written by Sume