One bad item in a 100-variant bulk run: 400 and nothing runs
A Sume bulk run checks every item before it creates the queue. One bad row returns 400 invalid_request with details.index, and none of the 100 videos start.

When one item in a Sume bulk request is malformed, the whole create fails with 400 invalid_request and details.index names the bad item. No queue exists and nothing is dispatched, so no variant from that request starts. Fix the row at that index and send the batch again. Items that are valid but later fail to start are different: those become failed items inside an accepted queue.
This is from Sume's Bulk runs docs. A bulk create takes concurrency (an integer 1 to 16) and items (1 to 100 entries), and each item is the same body as a single Format run.
What counts as a bad item?
A spreadsheet row with an empty script is the usual cause for a UGC batch: the item then has nothing to name, and the whole request is refused.
| Problem | Result |
|---|---|
concurrency is not an integer from 1 to 16 | 400 invalid_request |
items is missing, empty, or has more than 100 entries | 400 invalid_request |
| An item is not an object | 400 invalid_request |
An item names none of instruction, input, previous_run_id, attachments | 400 invalid_request, details.index set |
| Unknown top-level field | Rejected |
How is that different from an item that fails later?
The create has two phases. Before the queue exists, the request is checked for the problems above, plus attachment resolution: the invalid_attachment, attachment_not_found, attachment_too_large and attachment_fetch_failed codes fire before the queue is created too. After 202, each child goes through ordinary Format-run admission (wallet, workspace generation concurrency, spend caps). A child that cannot start becomes one failed item with run_id: null, and the rest of the queue continues.
How do I avoid it?
Four habits keep a batch from failing at create:
- Check each row on your side before you build the request: drop any row with no instruction or input, as the docs' own production-batch example does for rows with no finished draft.
- Keep the batch within 100 items; split larger lists across requests, each with its own
Idempotency-Key. - Treat a
400as a clean failure: nothing ran, so resending after the fix repeats nothing. - Log
details.indexand map it back to your sheet row.
Sources
Related posts
More in Developers
- Re-ran a UGC variant bulk run and got the old queue: why
Replaying a Sume bulk-run Idempotency-Key with the same body returns 202 and the existing queue, no new videos. A changed body is 409. Mint a key per batch.
- Veo 3.1 returns one video per request: how to get 4 variants
Google's Veo 3.1 table says one video per request. To get four variants on Sume, send four requests with four Idempotency-Keys, and watch queue_full.
- AI SDK stream cancel on disconnect: the Sume job keeps running
AI SDK 7.0.127 fixes stream cancellation when consumers disconnect. A cancelled stream does not cancel a Sume job: save the job id and read status later.
- AI SDK 7 tool search with deferred tools and Sume tools
AI SDK 7.0.127 lets a search() callback rank eligible deferred tools. Load a few Sume tools up front and fetch the rest by tools_schema on demand.
Written by Sume