TikTok Spark Ads: 10-minute cap on sparked videos, probe then trim
TikTok's Spark Ads page says videos over 10 minutes cannot be sparked, though the in-feed page says no duration limit. Probe the length, then trim.

A long organic TikTok cannot be sparked: TikTok's About Spark Ads page says there is a 10 minute maximum on videos that can be sparked (read 2026-10-03). The same page says there are no restrictions on video ratio, resolution, file type, duration, bitrate or file size, and the Auction In-Feed page lists the Spark duration as having no restrictions too. The two statements pull in different directions, so treat 10 minutes as the safe ceiling and cut anything longer before it goes near an ad.
This post shows how to find out how long a file really is and how to make a sub-10-minute version with Sume.
Two TikTok pages, one practical rule
The auction page covers the ad formats and lists Spark videos as .mp4 or .mov with captions drawn from the organic post, up to four lines on display. The Spark Ads page covers the programme: you can publish ads from your own posts or from other creators' posts with authorization, text for a Spark Ad push can be edited when you set up the ad, and a video must be un-authorized as a Spark Ad before it can be deleted from the organic account (read 2026-10-03). Each Ads Manager account can support at most 10,000 Spark Ads.
Only the Spark Ads page mentions the 10 minute figure. When two pages disagree, the stricter number is cheaper to obey than to argue about, because a rejection costs you the time you spent on the campaign.
| Item | What the page says | Practical step |
|---|---|---|
| Maximum length | 10 minutes for videos that can be sparked | Probe the duration; cut anything above 600 seconds |
| Format limits | None on ratio, resolution, type, bitrate or size | Still keep .mp4 or .mov |
| Caption | From the organic post, up to four lines shown | Edit the post before you authorize it |
| Account cap | 10,000 Spark Ads per Ads Manager account | Count your active ads |
| Deleting a post | Un-authorize it as a Spark Ad first | Do this before removing the organic video |
Probe the length, then cut
Video inspect reads one media.sume.com clip and returns probe facts without producing a new file. With frames: false you get no stills, so the call is cheap and quick. Its source cap is 1800 seconds, which is 30 minutes, so a clip longer than that is refused and needs another route.
Video trim then returns a new MP4 with only the range you ask for. The script below probes the clip and, when it is longer than 600 seconds, trims the first 590. The docs show the probe as an object but do not list its field names on the page, so the code tries duration_seconds and then duration; print the probe once and adjust if your response names it differently.
import os, time, requests
BASE = "https://api.sume.com"
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
def inspect(url, key, **body):
r = requests.post(BASE + "/v1/video-inspect", headers={**H, "Idempotency-Key": key},
json={"video_url": url, **body})
r.raise_for_status()
rid = r.json()["request_id"]
while True:
v = requests.get(f"{BASE}/v1/video-inspect/{rid}", headers=H).json()
v = v.get("video_inspect", v)
if v.get("status") in ("completed", "failed", "canceled") or v.get("probe"):
return v
time.sleep(3)
def run(path, body, key):
r = requests.post(BASE + path, headers={**H, "Idempotency-Key": key}, json=body)
r.raise_for_status()
job = r.json()["request_id"]
while requests.get(f"{BASE}/v1/jobs/{job}/status", headers=H).json()["status"] not in ("completed", "failed", "canceled"):
time.sleep(3)
return requests.get(f"{BASE}/v1/jobs/{job}/result", headers=H).json()
clip = "https://media.sume.com/artifacts/artf_demo/long-organic.mp4"
probe = inspect(clip, "spark-probe-001", frames=False)["probe"]
length = probe.get("duration_seconds") or probe.get("duration")
print(probe)
if length and length > 600:
print(run("/v1/video-trim", {"video_url": clip, "start": 0, "duration": 590}, "spark-cut-001"))
Keep the numbers in one place
Spark Ads tend to be managed by more than one person: a creator posts, a marketer requests the code, and someone else watches the budget. A short checklist saves a round trip. Write down the length of each candidate video, the date its authorization code was set to expire, the caption as it appears today, and whether the video has been un-authorized before deletion. TikTok's page says the code duration can be customized to meet campaign needs and does not name the choices on that page (read 2026-10-03), so record the value you picked rather than relying on memory.
For the length column, the probe is the source of truth. A video that looks like nine minutes in the app can be a few seconds over once you export it, and a cut costs $0.02 under the public trim rate to try again. Run the probe on every candidate that is close to the limit, not only on the obviously long ones.
After the cut
A trimmed MP4 is a new file, not the organic post. Spark Ads use the post that lives on TikTok, so the cut version is only useful if you publish it as a new organic video and authorize that one. Remember that the caption comes from the organic post, which is why you edit it before you generate the authorization code.
If you only need a shorter ad and the long video can stay organic, you do not have to spark it at all. Cut the version for the ad, run it as a normal in-feed creative, and keep the long one for your profile.
Sources
Related posts
More in Media tools
- Too many full songs in an Instagram video? Meta says it may be limited
Meta's music guidelines: more full-length tracks make a video more likely to be limited, and a visual is required. What to check, and how to cut short beds.
- Transloadit /video/thumbs offsets vs Sume video frames at[]
Transloadit /video/thumbs takes up to 999 thumbnails by offsets or count. Sume video frames returns at most 24 stills per call, by at[] seconds or fps up to 2.
- Trending videos search for holiday hooks: TikTok metadata only
Sume's trending-videos search returns TikTok video metadata for hook research at $0.10 per call; it does not return downloadable files.
- Trim a clip to 10 seconds before a Gemini Omni edit
Google caps Omni edit and extend inputs at 10 seconds. Cut longer footage first with Sume's video-trim endpoint, a flat $0.02 per job.
Written by Sume