Release a 50-SKU holiday batch in two bulk queues: 5 first, 45 after

Submit 5 SKUs as a pilot queue, review the clips, then queue the other 45. Sume bulk queues take 1-100 items at concurrency 1-16. Runnable payload builder.

4 min readSume
All posts

A Sume bulk queue has no pause button or approval step, so the way to put a person between a pilot and the full batch is to submit two queues. Post 5 of your 50 SKUs as a pilot queue, review the finished clips, and only then post the other 45. Each queue is a server-side list of ordinary Format runs, with concurrency from 1 to 16 and 1 to 100 items, per the bulk runs docs read 2026-10-05. The approval is your policy, not a Sume feature, and it costs nothing extra because each queue is billed run by run.

Why two queues and not one

Once a queue is accepted with 202, the first concurrency items are already in flight, and the API has no public cancel-queue endpoint; cancelling means cancelling each child run. A queue of 50 with concurrency 8 would have eight SKUs spending before you saw a single result. A pilot queue limits what is at risk before review to five runs.

The queue receipt shows completed when every item is terminal, which is not the same as success. Branch on counts.failed before you treat the pilot as clean, as the bulk-run failure guide explains.

The two payloads

The builder below creates both bodies, sets a per-item generation_spend_cap_usd, and checks the documented limits. Use a fresh Idempotency-Key for each queue: replaying a spent key returns 202 with the old queue, which for the second queue would mean it never starts.

import json

SKUS = ["sku-%03d" % n for n in range(1, 51)]


def item(sku):
    return {"instruction": "Product clip for " + sku,
            "input": {"sku": sku},
            "generation_spend_cap_usd": 8}


def queue(skus, concurrency):
    assert 1 <= concurrency <= 16 and 1 <= len(skus) <= 100
    return {"concurrency": concurrency, "items": [item(s) for s in skus]}


pilot = queue(SKUS[:5], concurrency=5)
rest = queue(SKUS[5:], concurrency=8)
print(len(pilot["items"]), len(rest["items"]))
print(json.dumps(pilot)[:100])

What to review between queues

Poll GET /v1/format-run-queues/{id} until the pilot is terminal, then read each child at GET /v1/format-runs/{run_id}. A per-item communication.webhook_url gives you a signed delivery for each SKU as it finishes, as in the webhook review queue.

Two-queue release plan, Sume bulk-run docs read 2026-10-05
StepQueueItemsConcurrencyGate
1Pilot55Reviewer approves clips and counts.failed is 0
2Remainder458Poll counts, requeue failures
3Retry queueFailed SKUs onlyUp to 16New Idempotency-Key

Choose the pilot SKUs to be the hard ones, such as reflective or transparent products, not the easy ones, so a pass means something. Workspace generation concurrency still applies to the children, so a larger concurrency value does not run faster than your plan allows. For batches larger than 100, see the 250-SKU split into three queues.

Sources

Related posts

More in Formats

All Formats posts

Written by Sume