YouTube Shorts series: queue episodes as one Format bulk run
Queue 1 to 100 episodes of a Shorts series in one Sume Format bulk run, set a concurrency of 1 to 16, and branch on counts.failed, not on completed.

Treat the episodes of a Shorts series as the items of one Sume Format bulk run: POST /v1/formats/{handle}/{slug}/bulk-runs takes 1 to 100 items in order, runs them under a concurrency window of 1 to 16, and you poll one queue for progress. The bulk run produces the episodes; uploading them and grouping them into seasons happens in YouTube.
9to5Google reports that YouTube is introducing a Shorts series feature that lets creators organize Shorts into seasons and episodes, rolling out from 2026-09-23. Queue facts below are from Sume's Bulk runs page, read 2026-09-30.
What goes in the queue request?
Two fields matter. concurrency is a required integer from 1 to 16: how many child Format runs stay in flight at once. items is a required array of 1 to 100 entries, in order, and each entry has the same body as a single run. Each item must name at least one of instruction, input, previous_run_id or attachments. A bad item fails the create with 400 invalid_request and a details.index, before any queue exists, so nothing is dispatched.
const key = process.env.SUME_API_KEY;
if (!key) throw new Error("Set SUME_API_KEY");
const episodes = [1, 2, 3].map((n) => ({
instruction: "Episode " + n + " of the series: write and produce a 30 second Short.",
}));
const res = await fetch("https://api.sume.com/v1/formats/acme/shorts-series/bulk-runs", {
method: "POST",
headers: {
Authorization: "Bearer " + key,
"Content-Type": "application/json",
"Idempotency-Key": "series-s1-" + Date.now(),
},
body: JSON.stringify({ concurrency: 2, items: episodes }),
});
console.log(res.status, await res.json());How do episodes stay consistent with each other?
An item may carry previous_run_id, which continues an earlier run of the same Format as another turn of the same conversation. That is useful when episode 4 should build on a run you already have. The docs describe previous_run_id as pointing at an earlier run and say nothing about referencing another item in the same queue, so for items queued together put the shared context (series bible, tone, characters) in each item's instruction, and use previous_run_id for runs that already exist.
How do I know the batch finished?
| Question | Answer in the docs |
|---|---|
| Items per queue | 1 to 100, in order |
| Concurrency window | Integer 1 to 16 |
| Queue-level webhook | None. The queue object has no webhook |
| Per-item webhook | communication.webhook_url on each item |
Status completed | Every item is terminal, not "all succeeded" |
| Retry safety | Fresh Idempotency-Key per batch; a spent key returns 202 with the old queue |
What should I do after the queue finishes?
Poll status_url and branch on counts.failed. Read each child run for its output, then review the episodes yourself before posting. If you plan to upload many AI-made Shorts, read YouTube inauthentic content and AI video batches first, and see batch-producing episodes by length for sizing.
Sources
Related posts
More in Use cases
- YouTube A/B testing video cuts: build hook variants by API
Build three hook variants of one video as separate files: trim for the hook, Timeline to join hook and body, and a fresh Idempotency-Key per request.
- YouTube thumbnail sizes fhd, qhd and uhd: frames from a clip
YouTube's Data API added fhd (1080p), qhd (1440p) and uhd (4K) thumbnail sizes on 2026-09-11. Here is how Sume's video-frames max_edge lines up.
- YouTube thumbnails.set now allows 50MB: what to upload from Sume
YouTube's API history says thumbnails.set went from 2MB to 50MB on 2026-09-14. A video-frames still at source size (jpeg or png) fits the listed types.
- AI album cover generator: square art at 3000×3000
Generate square album art, then upscale: Apple recommends at least 3000×3000. On Sume, generate 2400×2400 and upscale it 1.25× to reach 3000×3000.
Written by Sume