Split a 10-minute TikTok into parts for 3 and 5-minute accounts
TikTok's API allows up to 10 minutes, but an account may be limited to 3 or 5. Split a 600-second video into 4 or 2 parts with Sume trim at $0.02 a job.

Short answer
For a 600-second video, a 3-minute account needs 4 parts of 150 seconds, a 5-minute account needs 2 parts of 300 seconds, and a 10-minute account needs 1 part. Cut each part with Sume's video trim at $0.02 a job, so the splits cost $0.08, $0.04 and nothing. The limit to use is the one your user's account reports, not the API's 10 minutes.
What TikTok says
TikTok's media transfer guide for the Content Posting API says video can be up to 10 minutes through the API, and that end users may be limited to 3, 5 or 10 minutes (read 2026-10-05). The same guide lists MP4, WebM and MOV, a size of up to 4 GB, and upload in chunks of 5 to 64 MB. So a video that the API accepts may still be refused for an account whose limit is lower, and the fix is to know the limit before you cut.
The split arithmetic
Parts are the smallest count that fits the limit, cut evenly. Trim jobs are $0.02 each at the public rate.
| Account limit | Parts | Seconds per part | Trim cost |
|---|---|---|---|
| 3 minutes (180 s) | 4 | 150 | $0.08 |
| 5 minutes (300 s) | 2 | 300 | $0.04 |
| 10 minutes (600 s) | 1 | 600 | $0.00 |
Generate the trim requests
The script computes the part count with ceil, divides evenly and prints one request body per part. Each body uses precision exact for a frame-accurate cut. Because duration must be 0.2 to 900 seconds, every part fits. Send each body to POST /v1/video-trim with its own Idempotency-Key; the source must already be on media.sume.com.
import json, math
def split(total, limit, url):
n = math.ceil(total / limit)
each = total / n
return [{"video_url": url, "start": round(i * each, 3),
"duration": round(each, 3), "precision": "exact"}
for i in range(n)]
url = "https://media.sume.com/artifacts/artf_demo/long.mp4"
for body in split(600, 180, url):
print(json.dumps(body))
print("trim cost: $%.2f" % (0.02 * math.ceil(600 / 180)))Cut on a pause
An even split can land mid-sentence. If the video is speech, run video inspect with transcribe set, and nudge each cut to the nearest gap between words, keeping every part under the limit. A part that is 148 seconds cut at a pause is better than 150 seconds cut in a word, and the account limit still holds.
Note the trim API's own limits: the source can be up to 1800 seconds and each output between 0.2 and 900 seconds. A 10-minute video is well inside both.
If the source is longer than 1800 seconds, such as a livestream recording, trim it into sections of 1800 seconds or less first, because the trim route refuses a longer source with source_duration_exceeded. Then split each section for the account limit. Keep a table of part number, start, duration and job id so a re-run after a failed upload cuts only what is missing.
Posting the parts
Post the parts in order and put the part number in the title text you send with each post, so viewers can follow. I did not find a TikTok field for linking parts, so use the title. Upload each part separately in chunks per the guide, and keep the Sume job id with the publish id so you can match them later.
If you want chapters instead of equal parts, use the transcript to find topic breaks and cut there. The part count then depends on the content, but the rule is the same: no part longer than the account limit. Check each part with a probe before you upload, and re-read the limit from the account at post time, since it can differ between users.
Sources
Related posts
More in Developers
- Split a 40-second brief into four Omni prompts, one character block
A Python script that turns one 40-second brief into four 10-second Gemini Omni 1.1 Flash request bodies for Sume, with one shared character block.
- Spread Graph API calls evenly: pace a nightly Reel batch
Meta advises spreading queries evenly to avoid traffic spikes. Space publish calls across the hour, and size the Sume render wave from generation_limits.
- SQLite ledger: a restarted poller never resubmits a 30-second video
Save the Sume job id and Idempotency-Key in SQLite before you poll, so a crash resumes the same $17 render instead of paying twice. Python, stdlib.
- Square YouTube Short at 1080x1080: set Timeline output size
YouTube classifies square or vertical videos up to 3 minutes as Shorts. Set Timeline 1.0 output width and height to 1080 for square; 1080x1920 for vertical.
Written by Sume