Agents

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.

5 min readSume
All posts

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.

From Create a run, Advanced: run a schedule via API, Agent Completions, and Run webhooks, read 2026-09-26.
Field or ruleFormat runScheduled runAgent Completion
CreatePOST /v1/formats/{handle}/{slug}/runsPOST /v1/actions/{action_id}/runsPOST /v1/agent/completions
Task comes fromThe saved Format, plus optional instruction (up to 8000 characters)The schedule's saved instructionsExactly one of instruction or messages
Body {}400 invalid_requestAccepted: input defaults to {}400 invalid_request
generation_spend_cap_usd omittedThe 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_runallow (default), skip, rejectskip (default), rejectNot a listed field
attachmentsUp to 30 imagesNot a body field; dropped if sentUp to 30 images, top level or as input_image parts
modelAn Agents catalog id for the orchestratorNot a body field; the schedule saves a modelOnly sume-agent
Continue a runprevious_run_idNot a body fieldNot available yet; each completion runs in a fresh thread
Idempotency keyHeader, or body idempotency_key (header wins)Header, 1–255 charactersBehaves as on Action runs
Webhook eventformat.run.terminalaction.run.terminalagent.run.terminal
Scopesformats:read, formats:writeactions:read, actions:writeagent_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 to allow and runs concurrently, subject to workspace generation concurrency, while a schedule defaults to skip. 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). input is 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