Bulk queue concurrency 16 on Sume is a window, not a speed promise
Sume bulk Format runs accept concurrency 1 to 16. It limits how many children start at once and does not promise throughput. What 100 ad items really do.

The concurrency field on a Sume bulk Format queue, from 1 to 16, is the most children the queue keeps running at once. It is a ceiling on your own window, not a speed guarantee. A queue of 100 ad items at concurrency 16 works through the items in waves of at most 16, and the workspace's generation concurrency still applies to every child, so the real pace can be lower than the number you sent.
What the field does and does not do
The bulk-runs page defines the request: concurrency between 1 and 16, and items between 1 and 100, each with the same body as a single run. The response is a 202 with a queue receipt that has counts, items and a status_url. Nothing in the docs promises a completion time, so any time estimate you make is yours.
| Setting | Range | What it means |
|---|---|---|
| concurrency | 1 to 16 | Children running at once |
| items | 1 to 100 | Run bodies in one queue |
| workspace concurrency | set per workspace | Still applies to children |
| status | GET /v1/format-run-queues/{id} | Poll; completed means all terminal |
The wave arithmetic
With 100 items and concurrency 16, the number of waves is ceil(100 / 16) = 7, because 6 waves cover 96 items and a seventh covers the last 4. Wall time is then roughly the number of waves times the length of a typical child, if nothing else is limiting. A video child can take minutes, so budget on that order, and measure one run before you promise a deadline.
Dropping concurrency to 4 gives ceil(100 / 4) = 25 waves. That is slower, but it smooths spend, since fewer children are in flight and reserved at once.
Choosing a number
Pick a high value when speed matters and your balance is deep, and a low one when you want to watch the first results before the rest start. Remember that a spend ceiling is not part of the queue. Use generation_spend_cap_usd in each item body for per-run limits, and check your balance before you start.
curl -sS -X POST https://api.sume.com/v1/formats/sume/sume-video-hook/bulk-runs \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Idempotency-Key: ads-batch-01" \
-H "Content-Type: application/json" \
-d '{"concurrency": 4, "items": [
{"instruction": "Hook A", "generation_spend_cap_usd": 5},
{"instruction": "Hook B", "generation_spend_cap_usd": 5}
]}'Reading the finish
A status of completed means every item is terminal, not that every item succeeded. Read the counts, including failed. A child that cannot start becomes a failed item with run_id null, and the queue carries on. There is no queue webhook, so use a per-item communication.webhook_url or poll status_url, and there is no cancel-queue endpoint, so cancel a single child at its run endpoint.
What we did not measure
We did not time a queue for this article. The numbers above are arithmetic from the documented limits, and your real pace depends on the Format and the model it uses.
A rule of thumb for ad tests
For a first pass over a hook grid, use a mid value such as 8. You get most of the parallelism, and if the first results show a broken prompt you have only half a window in flight to cancel. For a repeat of a known-good grid, go to 16. Neither number changes the price of a run; it only changes how many are in progress at once, and so how much balance is reserved at one moment.
Cancel at the child, not the queue. If a hook is wrong, cancel its run at /v1/format-runs/{run_id}/cancel and let the rest continue. Items that already finished keep their results.
If a queue is slower than the arithmetic above, check the workspace first: other jobs share the same generation concurrency, and your children wait their turn. A lower concurrency value will not fix that, and a higher one will not either, since the workspace limit sits above it. Read the counts on the status URL to see how many items are running and how many are queued.
Because every child reserves its own spend, the amount reserved at one moment is about the window size times the per-run reserve. At concurrency 16 with a $5 cap per item, that is up to $80 of exposure at once, and at 4 it is $20. Pick the window so that the exposure fits your balance.
Sources
Related posts
More in Formats
- Can a 4:5 or 2:3 video run in Google Ads? What the specs allow
Google Ads lists 16:9, 9:16 and 1:1 as primary and says ratios in between are allowed; a spec page also names 4:3, 2:3 and 4:5. Exact sizes for Sume Timeline.
- Hook line in instruction or input? Sume Format run for ad variants
Put the hook text in the instruction field, and put product data in input. Rules, limits and errors for varying an ad hook across Sume Format runs.
- Instagram says upload the highest resolution possible: what's the max?
Instagram's creator page says upload the highest resolution possible but gives no pixel number. Sume Timeline's ceiling is 2160 per edge, so 1214x2160 vertical.
- Smallest vertical video size that passes Google Ads and TikTok
Google lists 720x1280 as the vertical minimum, TikTok in-feed 540x960 and its app bundle 720x1280. One Timeline output size clears them all, with the table.
Written by Sume