Nightly UGC ad job: Agent Completion, Format run or schedule?
Pick the Sume surface for a nightly UGC ad job: Format run when inputs change, schedule when only the clock starts it, Agent Completion for one-off tasks.

For a nightly UGC ad job, call a Format run when your backend supplies new inputs each night, use a schedule when only the clock should start the work, and use an Agent Completion when the task text itself changes every call. All three run the same Sume agent and return the same kind of run receipt, so the choice is about what Sume stores for you.
A schedule stores what to do. A Format stores how to do it. An Agent Completion stores nothing, and you send the task on each call.
The three surfaces
Start from the table, then read the decision rules under it.
| Surface | Start with | Stored by Sume | Pick it when |
|---|---|---|---|
| Format | POST /v1/formats/{handle}/{slug}/runs | The recipe and house style | A saved workflow exists and only the inputs change |
| Scheduled | Cron, or POST /v1/actions/{action_id}/runs | Instructions, model, cron, spend cap | Only the clock (or an outside system) decides when work starts |
| Agent Completion | POST /v1/agent/completions | Nothing | The task differs on each call |
Decision rules for the nightly job
- Same recipe, new product row each night: a Format run. The Format keeps the house style, you send
inputand anIdempotency-Key. - Same instruction at 02:00 with no caller data: a schedule. It takes a five-field cron expression and an IANA timezone.
- Someone's brief arrives as free text and you do not want to save it: an Agent Completion with
messages[]orinstruction. - Many rows in one night: a bulk queue over a Format (up to 100 items, concurrency 1 to 16). Schedules and Completions have no bulk endpoint.
What differs on the wire
Schedules are authored in the dashboard at the Scheduled page, and the Developer API can list, read and start runs but cannot create or edit them. A schedule can also enable the API trigger so it accepts both a cadence and your calls.
A Completion needs the new scopes agent_completions:read and agent_completions:write, and keys created before the feature do not have them. Service-account keys cannot create Completions or Format runs.
Overlap policy also differs. A schedule defaults to skip when a run is active, while Format runs default to allow. If your nightly job can overrun into the next night, that default decides whether you get a skipped run or two concurrent ones.
One receipt shape, one webhook
Every surface accepts communication.webhook_url and sends one signed POST when the run completes or fails. The event names are action.run.terminal, format.run.terminal and agent.run.terminal, so one receiver can route on event. A canceled run and a skipped run send nothing, so read the status on the response you already have.
Authentication is the same for all three. Use a Bearer key, create the key after the feature shipped, and expect service-account keys to be refused. A new scope cannot be added to an old key, so a nightly job that starts failing with 403 insufficient_scope after a feature launch just needs a new key.
A sensible default
For a recurring ad job most teams end up with a Format for the look and either a schedule or their own cron calling the Format. Reach for Completions when you are prototyping or when the task is genuinely different every time, then promote the prompt that keeps repeating into a Format.
Sources
Related posts
More in Agents
- Get a structured ad pack back from one Sume Agent Completion
Bind an output_schema to a Sume Agent Completion to get hook, caption, CTA and a video URL as named fields, with the strict-subset rules and failure modes.
- Agent Completion cost: cap, billable_amount_usd_micros, or usage?
Where to read what an Agent Completion cost: the required spend cap, the receipt's usage.billable_amount_usd_micros, and GET /v1/usage as the billing record.
- Claude Code 2.1.287 tool heartbeats and Sume jobs_wait slices
Claude Code 2.1.287 fixed tool heartbeats not reaching SDK hosts during a stalled response stream. Sume's jobs_wait holds up to 55 s, so heartbeats matter.
- Claude Code routine artifacts: link Sume media, don't paste it
Claude Code 2.1.292 lets Scheduled and Run now routines publish a private artifact without approval. Hand off Sume results as durable media.sume.com links.
Written by Sume