Upload 15 YouTube Shorts at a time: prepare the batch with Sume

YouTube's upload page lets you pick up to 15 Shorts at once. Prepare 15 correctly sized clips with Sume trim jobs, one idempotency key each.

5 min readSume
All posts

YouTube's upload page says you can choose up to 15 short videos at a time, so a batch is 15 files. To get 15 clean files ready, send 15 video trim jobs, each with its own Idempotency-Key, and collect the returned MP4 URLs. Sume prepares the files; you still finish each one in YouTube's Edit draft step.

The YouTube facts come from Upload YouTube Shorts, read 2026-10-02. The Sume facts come from video trim, Jobs and results and Webhooks.

What does YouTube say about a multi-file upload?

Four things from the page. Shorts can be up to 3 minutes with a square or vertical aspect ratio. You can choose up to 15 short videos at a time. Before publishing you click Edit draft to complete each video's details. And the default privacy for creators aged 13 to 17 is private, while for 18 and older it is public.

It also warns that using copyright-protected material could lead to a Content ID claim, and that takedown notices may lead to removal and a copyright strike. Audio you did not make is the thing to settle before you fill a 15-file batch, not after.

How do I make 15 files with Sume?

Video trim needs a Sume-hosted source, start, and one of end or duration. It returns a new MP4 and leaves the source alone. Submit one job per range. The key rule: Idempotency-Key is required, and it must be unique per range, or a retry of one range could be mistaken for another. Use a stable key derived from the source and range so a crashed script can rerun without creating duplicates.

Default mode is async, so each submit returns a job id (request_id). Poll GET /v1/jobs/:id/status or pass a webhook_url, then read GET /v1/jobs/:id/result for video_url and duration_seconds.

import os, requests

API = "https://api.sume.com/v1/video-trim"
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
SRC = "https://media.sume.com/artifacts/artf_demo/webinar.mp4"
ranges = [(i * 100, 60) for i in range(15)]  # (start, duration)

for start, dur in ranges:
    r = requests.post(
        API,
        headers={**H, "Idempotency-Key": f"batch1-{start}-{dur}"},
        json={"video_url": SRC, "start": start, "duration": dur},
        timeout=60,
    )
    r.raise_for_status()
    print(start, r.json()["data"]["request_id"])

What does it cost and how long does it take?

The public rate for video trim is $0.02 per job and the docs say to confirm it in GET /v1/catalog, so 15 trims are $0.30 at the documented rate. Trim is worker ffmpeg only, with no model inference. The source can be at most 1800 seconds and a cut at most 900 seconds; a Short stays under YouTube's 180 seconds because you set duration.

This post gives no timing figure because the docs do not publish one. Fire the jobs, then wait on them.

Batch limits, YouTube and Sume docs (read 2026-10-02)
ItemLimitFrom
Files per uploadUp to 15YouTube upload page
Short lengthUp to 3 minutesYouTube upload page
Trim sourceAt most 1800 sSume video-trim
Cut length0.2 to 900 sSume video-trim
Price per trim$0.02Sume video-trim, confirm in catalog

What should I check before I click upload?

Check that each result is square or vertical (a trim keeps the source's shape), that duration_seconds is 180 or less, and that no clip carries music you cannot clear. Then upload the 15 files together and complete each draft. If the privacy default surprises you, remember it depends on the account's age as stated above.

Sume cannot batch-publish to YouTube. It stops at the file.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume