Sume bulk Format runs: 100 items, one concurrency window, cost control
POST /v1/formats/{handle}/{slug}/bulk-runs queues up to 100 ordinary Format runs. Set concurrency and a per-run cap, and poll the queue with format-run-queues.

Send one POST /v1/formats/{handle}/{slug}/bulk-runs with up to 100 items and a concurrency number. The queue is server-side, so you do not drive the fan-out from your laptop, and every item is an ordinary Format run with its own receipt. Poll GET /v1/format-run-queues/{queue_id} for the queue and GET /v1/format-runs/{run_id} for each child.
What the API gives you
Scopes match single runs: formats:write to create and formats:read to poll. Service-account keys cannot create Format runs or bulk queues and fail with 403 insufficient_scope. There is no public list-queues or cancel-queue endpoint, so cancel a child at POST /v1/format-runs/{run_id}/cancel.
| Method | Path | Scope |
|---|---|---|
| POST | /v1/formats/{handle}/{slug}/bulk-runs | formats:write |
| GET | /v1/format-run-queues/{queue_id} | formats:read |
| POST | /v1/format-runs/{run_id}/cancel | formats:write |
Filter before you queue
A decision model can pick which items go into the queue, so that you pay only for the ones that pass. Build the items list after the gate, and send an Idempotency-Key for the queue request.
def build_items(rows, keep):
items = [
{"instruction": r["ask"], "input": {"url": r["url"]}}
for r in rows
if keep(r)
]
if not 1 <= len(items) <= 100:
raise ValueError(f"need 1-100 items, got {len(items)}")
return {"concurrency": 3, "items": items}
rows = [{"ask": f"clip {i}", "url": f"https://example.com/{i}.jpg"} for i in range(5)]
print(build_items(rows, lambda r: r["ask"] != "clip 2"))
Check the docs before you ship
Sume's limits and field names change faster than blog posts do. Read the linked docs pages for the current request fields before you ship, and send a dry_run or a low spend cap on your first real call.
Sources
Related posts
More in Formats
- Sume catalog Formats for ads: which of 27 slugs to read first
The Sume Format catalog lists 27 slugs. Group them by the ad job their names suggest, then confirm each with GET /v1/formats/sume/{slug} before you call it.
- Format run input extra keys: context only, not echoed in output
Keys your Format does not read, like a sheet row number, reach the run as context and do not return in output. Store them beside the 202's id and thread id.
- Format status_url never holds output: poll it, then fetch the result
A Sume Format run's status_url returns a small poll payload with no output or artifacts. Poll it with backoff up to expires_at, then call result_url once.
- sume-virtual-try-on or sume-virtual-fitting: read the io profile first
Two catalog Formats sound alike. Before you send a model photo and a garment to either, read GET /v1/formats/sume/{slug} for its io profile and spend cap.
Written by Sume