Blog

Formats

Sume Formats over the API: create and version a Format, call it, run bulk batches, get structured output, take webhooks, and debug failed runs.

Start with: What is a Sume Format? Turn an agent thread into one API call

Format run scene status stand-in vs failed: which scenes to retry

Give each scene a status of succeeded, stand-in or failed, then retry only the bad ones with previous_run_id. The schema, the receipt rule and the call.

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.

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 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.

Output schema max_string_length: descriptions use a 120,000 budget

A big Format output_schema can fail with max_string_length although no field is long. The 120,000-character budget covers every key, name and string in it.

Output schema required_completeness: list every property in required

Sume's strict output_schema wants every declared property in required, and no required entry without a property. Make a field optional with a null union.

Why did my Format run do that? Read the first message of its thread

A Format run's first thread message is the text the agent received: Format pointer, your instruction, unattended note and input file path. Read it first.

400 previous_run_format_mismatch: continue a run on its own Format

Continuing a Format run on a different Format returns 400 previous_run_format_mismatch. Call the Format where the run started, or start a new run.

Format run failed primary_not_deliverable: audio under a video key

A Format that makes video fails with agent_reported_failure and primary_not_deliverable when the primary output is audio or a still. How to read and fix it.

Format run unattended_blocked: assembled_deliverable is false

unattended_blocked means the run stopped instead of claiming a deliverable it did not make. The harvested media are intermediates, not the cut.

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_depth: 10 levels, and $defs recursion is free

Sume's output_schema allows 10 levels of literal nesting. Past that you get max_depth. A self-referencing $defs entry does not add to the depth count.

Output schema node with only a description: missing_type violation

A property with only a description is legal JSON Schema, but Sume rejects it with missing_type. Give it a type, a $ref or an anyOf, and move constraints.

Output schema type float or date rejected: unsupported_type

Sume's output_schema accepts seven types only. A float, date or any type gets the rule unsupported_type. Map each to number, string with format, or an enum.

AI video generator for advertising: check a Format's sample first

GET /v1/formats returns an io profile and a showcase for each Format. How to read both before you run a paid ad, and what a null means.

Black Friday ads for electronics and furniture: Sume Formats

Adobe forecasts $63.3B in electronics and $33.4B in furniture online this season. Which Sume Formats show a gadget in use or a room before and after.

Black Friday ads for cosmetics and apparel: which Sume Formats

Adobe expects $9.2B in cosmetics and $51.3B in apparel online this season. Which Sume beauty and fashion Formats fit, and which are still, video or try-on.

AI video generator for YouTube: get 16:9 from a Sume Format

Sume's first-party example prompts are vertical. To get a 16:9 YouTube video from a Format, say so in instruction and check the width and height.

Make a music video from your own footage with AI: Sume restyle

sume-restyle redoes a clip you own with the same motion and cuts, in chunks of up to 30 seconds. What to supply, what stays, and the audio rule.

Which video model does a Sume Format use? Not the model field

The model field on a Sume Format run picks the orchestrating LLM, default gpt-6-sol. The Format's tools choose the image, video and audio models.

A/B test two hooks in one bulk queue: instruction beats the recipe

Run two opening hooks on one product by sending two items to the same Sume Format. Your instruction is placed after the recipe, so it wins where they disagree.

Queue-level webhook_url in a Sume bulk body fails: set it per item

A Sume bulk body takes concurrency, items and an optional key. A top-level webhook_url is an unknown field; set communication.webhook_url on each item.

Bulk queue finished_at: measure the wall time of a 100-item batch

A Sume bulk queue sets finished_at when every item is terminal, so created_at to finished_at is your wall time. It does not mean every item succeeded.

Bulk run concurrency 3 with 8 items: what the 202 receipt shows

With concurrency 3 and 8 items, the Sume 202 shows three running and five queued. Item 3 starts when item 0 finishes. Here is how the window and counts behave.

Bulk run has no empty item: skip sheet rows without a finished script

A Sume bulk item must name at least one of instruction, input, previous_run_id or attachments. Filter unfinished sheet rows on your side before you send.

One dead image URL fails the whole 100-item Sume bulk create

Sume fetches every attachment at create time, so one broken image URL in a bulk body fails the create before any queue exists. Check URLs first.

A failed Format run webhook still has the receipt: salvage artifacts

When a Sume Format run fails, the webhook has status ERROR but payload is still the full receipt, with artifacts and output_error. Read them before you retry.

Format io is null on older Formats: pick by your own input kind

On Sume's Format list, the io block is null for Formats saved before the field existed. Do not route on it alone; read input_kind and output_kind when present.

Free plan 120 writes a minute: a 100-item bulk queue is one request

A Sume bulk create is one POST against the write budget, and polling spends the separate read budget. Here are the per-plan limits and what that means.

Localize one Sume Format into six languages: one bulk item each

To make one ad in six languages, send six items to one Sume bulk queue with the language in input and one Idempotency-Key scheme. Here is the shape and limits.

Log format.version on every bulk child: which recipe made which video

A Sume bulk queue can span a Format edit. Store format.version from each child receipt so you know which recipe made which video.

primary_output_key on a headline string: primary_output_url is null

If primary_output_key names a text field in your Sume output_schema, the receipt echoes the key but primary_output_url is null. Point it at the media field.

Refresh last year's holiday Format: one commit, rerun with v2 keys

Update a Sume Format for this holiday season with one Contents API commit, then re-queue with v2 Idempotency-Keys. Runs read the package they started with.

Seasonal Format: a new slug per season, or edit the same one in place?

Edit one Sume Format in place and keep one address, or create a slug per season and keep each look reproducible. Contents API has no revert, which tips it.

Share one packshot across 100 bulk items with an asset_id

To reuse one product image in a 100-item Sume bulk run, upload it once and pass asset_id. Sume does not copy an asset_id or a media.sume.com URL again.

Can a Sume Format package hold a product CSV? Only five file types

A Format package accepts .md, .json, .yaml, .yml and .txt files. Put the product feed row in each run's input, not in the package. Here are the limits.

Same Idempotency-Key on two Formats starts two runs: holiday A/B

A Sume Idempotency-Key is scoped to one Format. Reusing a key across two holiday Formats starts two runs, so make the key carry the variant.

Sume Format run timeout: your client stops, the run keeps billing

A client timeout on a Sume Format run does not cancel it. The run continues and bills. Store the run id, read expires_at, and call cancel_url to stop it.

Create a Sume Format over the API: auto_init and the first package sha

POST /v1/formats with auto_init (default true) commits a minimal SKILL.md and returns package_sha, contents_url and vanity_invoke_url. Keep all three.

Sume Format webhook: verify the timestamp, register the final URL

Sume signs format.run.terminal with HMAC-SHA256, expects a response in 10 seconds, retries up to 10 times and does not follow redirects. Register the final URL.

Sume Format run idempotency key: order id plus version, not uuidgen

Derive the Sume Format run Idempotency-Key from your order id plus a version. A fresh uuidgen per request makes the header do nothing and double-bills retries.

List Sume Format runs: cursor pages, newest first, one Format only

Sume lists Format runs per Format, newest first, limit 1 to 100 and a next_cursor. There is no cross-Format list, so keep your own index of run ids.

Sume Format output_schema: strict false does not loosen the rules

Setting strict to false in a Sume Format output_schema does not relax the OpenAI-strict subset. Fix the schema instead. Responses-style text.format is refused.

Commit several Sume Format files in one PUT: a change set

PUT a files list to a Sume Format's contents URL and it is one commit with one version bump. Files you do not name stay as they are. Existing paths need a sha.

Bulk Format runs on Sume: concurrency 1-16, 1-100 items, fail early

A Sume bulk run takes concurrency 1 to 16 and 1 to 100 items. A bad item fails the whole create with details.index before any queue exists. Nothing dispatches.

Which JSON Schema keywords a Sume Format output_schema accepts

Sume Format schemas use an allowlist: unknown keywords fail with unsupported_keyword. Number bounds are allowed; oneOf and allOf are not. Table inside.

A queue of 100 Shorts: unique input and a cap per item

Sume bulk runs queue up to 100 Format runs. Give each item its own input and spend cap so no two Shorts read alike. Limits and a request shape from the docs.

Same intro and outro on every Short: allowed on YouTube?

YouTube allows a repeated intro and outro if the rest differs. What that means for AI-made Shorts built on a fixed format, and how to vary the body.