TikTok ad length: 10 minutes in-feed, 5 to 60 seconds App Bundle

TikTok's in-feed page allows up to 10 minutes and Spark ads have no limit, while App Bundle says 5 to 60 seconds. Which length to render, and how to trim it.

5 min readSume
All posts

TikTok's two ad pages give two different answers. The in-feed page says non-Spark ads can run up to 10 minutes, with no duration restriction for Spark ads, and the Global App Bundle page says 5 to 60 seconds and recommends 21 to 30 seconds. If one file has to serve both, render 21 to 30 seconds.

What each page says

I read these two TikTok Business Help Center pages on 2026-10-05. I did not fetch a TikTok page about organic uploads, so I do not state an organic length limit here.

TikTok video ad durations, TikTok Business Help Center (read 2026-10-05)
PlacementDuration statedOther detail on the page
In-feed, Spark adsNo restrictions.mp4 or .mov; caption up to 4 lines
In-feed, non-Spark adsUp to 10 minutes.mp4, .mov, .mpeg, .3gp, .avi; 500 MB or less
Global App BundleBetween 5 and 60 s, recommend 21 to 30 s.mp4, .mov, .mpeg, .avi; within 500 MB

Where the two answers come from

Sources: In-feed ads and Global App Bundle video ad specifications.

How the Sume catalog lines up

Most AI video clips are shorter than any of these ceilings, so the real problem is the floor and the sweet spot. On Sume's catalog, seedance-2.5 accepts 4 to 30 seconds at 480p, 720p and 1080p, and wan-3.0 accepts 2 to 30 seconds, per the Video Router docs. Every other catalog model has a 15 second limit, apart from the special-purpose Motion Transfer and Recast models. A single seedance-2.5 call can therefore land inside TikTok's recommended 21 to 30 second window without any stitching.

Trim to the shorter ceiling

When a long source needs to become a short ad, cut it instead of regenerating. The video trim API takes start and either end or duration and returns a new MP4. It accepts a source up to 1800 seconds and writes an output up to 900 seconds, with a minimum of 0.2 seconds. The rate is $0.02 per job. For an App Bundle file, cut to at most 60 seconds:

curl -X POST https://api.sume.com/v1/video-trim \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: bundle-cut-001" \
  -d '{
    "video_url": "https://media.sume.com/artifacts/artf_demo/long.mp4",
    "start": 12,
    "duration": 28,
    "precision": "exact"
  }'

Reading the result

The result is read from GET /v1/jobs/:id/result as kind: video_trim, with duration_seconds and a new video_url. If the request has no end and no duration, the API refuses it with video_trim_range_required; if it has both, you get video_trim_range_conflict.

Why shorter is also cheaper downstream

There is a cost reason to pick the shorter file too. A TikTok ad file is judged on its first seconds, and a 28 second cut is cheaper to caption than a 3 minute one. A standalone caption job reserves $0.20 for a clip of up to 60 seconds. Longer clips are billed differently, so confirm the live rate in GET /v1/catalog before you caption a 10 minute file.

A simple rule per placement

Spark ads reuse an organic post, so a file prepared for a Spark placement is whatever your organic video already is. For non-Spark placements, make the length decision per placement:

  • App Bundle: 21 to 30 seconds, never above 60.
  • In-feed non-Spark: the page allows up to 10 minutes, but nothing requires you to use it.
  • Spark: keep the organic cut and check it is .mp4 or .mov.

Why the mismatch matters

The two pages are written for different buying paths. Global App Bundle is a placement for app promotion, where TikTok recommends a short window, and in-feed covers the general case. A creative team that buys both will get a rejection if it uploads a 90 second cut to the bundle placement, even though the same file is accepted in-feed. The cheapest way to avoid that is to keep a naming convention: one file per placement, with the length in the name.

A cutdown plan from one master

Plan the cutdowns from one longer master. The table shows a sensible set, built only from the limits above and the Sume trim limits. Every row is one trim job at $0.02, so a three-file set costs 6 cents before captions.

Cutdown plan using Sume video trim at $0.02 per job (docs read 2026-10-05)
FileLengthPlacementTrim cost
A28 sGlobal App Bundle$0.02
B60 sGlobal App Bundle upper bound$0.02
CFull cutIn-feed non-Spark, up to 10 minutesNone

One habit

If you are unsure which file a platform will accept, test with the smaller one first. A rejected upload costs more than a trim job.

Re-read before a launch

Both numbers are only as current as the date on the table caption. Before a large campaign, open the two TikTok pages again, compare them with the rows above, and note the date you checked. If a page has changed, update your master length first and only then re-cut the variants.

The takeaway

The in-feed and App Bundle pages differ on length by a factor of ten. If you build one master, build it for the stricter page.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume