Selling on many channels: queue 100 product videos overnight
Amazon says over 95% of independent sellers sell on several channels. Queue up to 100 Sume Format runs with a concurrency window and wake up to a media set.

To make a product video for every SKU without babysitting each one, create a bulk queue on a Sume Format: one POST with up to 100 items and a concurrency number, then poll the queue. Sume runs the items as ordinary Format runs on its side, so your laptop does not need to stay open.
The reason this matters now: Amazon's multichannel announcement says over 95% of independent sellers sell across multiple channels, and independent sellers created 12 million or more AI-generated listings in 2025 (read 2026-10-04). More listings, more channels, more media to produce.
What is a bulk queue?
Per the docs, a bulk request is a server-side queue of ordinary Format runs, not a different engine. Each item is one sandbox, one agent turn and one run receipt. There is no public list-queues or cancel-queue endpoint; you cancel a child run instead.
| Method and path | Scope | Purpose |
|---|---|---|
| POST /v1/formats/{handle}/{slug}/bulk-runs | formats:write | Create a queue of up to 100 runs |
| GET /v1/format-run-queues/{queue_id} | formats:read | Poll the queue |
| GET /v1/format-runs/{run_id} | formats:read | Read one child run |
| POST /v1/format-runs/{run_id}/cancel | formats:write | Cancel one child |
How do you create the queue?
Send one item per SKU, each with an instruction and an input. A valid create returns 202. Use a key derived from the batch name for the Idempotency-Key, so repeating the call returns the original instead of making a second queue. Service-account keys cannot create Format runs or bulk queues, so use a normal API key that carries formats:write.
import os, requests
items = [
{"instruction": "9:16 clip for " + s, "input": {"url": u}}
for s, u in [("SKU-1", "https://example.com/1.jpg"),
("SKU-2", "https://example.com/2.jpg")]
]
r = requests.post(
"https://api.sume.com/v1/formats/" + os.environ["SUME_FORMAT"] + "/bulk-runs",
headers={
"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
"Idempotency-Key": "holiday-batch-1",
},
json={"concurrency": 3, "items": items},
timeout=60,
)
print(r.status_code, r.text[:500])
What should you set for concurrency?
The concurrency window is how many items are in flight at once; the first window of items is already running on the 202 receipt when the list is longer. Start small, such as 3 as in the docs example, and watch the queue. A higher number finishes sooner but spends sooner.
How do you know what the batch cost?
Each child run receipt carries a usage object with the generation spend and its cap. The docs call GET /v1/usage the authoritative billing record, so read the batch cost there by run_id. See our note on adding AI media cost per SKU.
Sources
Related posts
More in Formats
- Cyber Monday email header: a magazine cover Format with room for type
sume-magazine-cover-campaign returns a cover-style still with space for headline text. Add the sale line in your email builder so it stays editable.
- Three Demand Gen video hooks in one Sume bulk run
Queue three hook variants of one video in a single Sume Format bulk run (up to 100 items per request) so you can test which opening works.
- Format run queue.position is always null: no queue depth published
The status response has a queue object, but position is null on purpose. Use queue.state and expires_at for waiting UX instead of a fake countdown.
- Argon 1M output tokens vs Sume Format 120,000-character schema cap
A 1M-token output limit does not lift Sume's output_schema limits. The 120,000 characters bound the schema, and the fallback projection reads 8,000 characters.
Written by Sume