TikTok in-feed ad minimums: 540x960 and 516 kbps for a Sume MP4
TikTok non-Spark in-feed ads need 9:16 at 540x960 or more, 500 MB or less and 516 kbps or more. Sume's default 1080x1920 clears the size floor; check bitrate.

TikTok's non-Spark in-feed video ads need a vertical 9:16 file of at least 540x960, up to 10 minutes, 500 MB or less, at 516 kbps or more. Sume's Timeline 1.0 renders 1080x1920 by default, which is twice the minimum on each side. The docs do not state a bitrate for that output, so measure it before you upload.
The spec
| Item | Non-Spark in-feed ad |
|---|---|
| Vertical 9:16 | At least 540x960 |
| Horizontal 16:9 | At least 960x540 |
| Square 1:1 | At least 640x640 |
| Formats | .mp4, .mov, .mpeg, .3gp, .avi |
| Duration | Up to 10 minutes |
| File size | 500 MB or less |
| Bitrate | 516 kbps or more |
| Captions | White, fixed font, no links, @ or hashtags |
Spark Ads differ
Spark Ads accept .mp4 or .mov with no duration limit, and the caption is taken from the organic video (maximum 4 lines). The page publishes downloadable safe-zone files and does not mention AI-generated content, so disclosure is a separate question.
What a Sume file gives you
Timeline 1.0 defaults to 1080x1920 MP4 and accepts output.width and output.height as even integers from 256 to 2160. 1080x1920 is 2x the 540x960 floor in each dimension, so the pixel minimum is met by default. Do not set a width below 540 for a 9:16 ad.
Length is bounded too: audio.duration_seconds is 1 to 1800 on the timeline, and the ad limit is 10 minutes (600 seconds), so a timeline longer than 600 seconds is over the ad cap.
Check bitrate and size yourself
Video inspect returns a probe and stills and never re-encodes. The docs name only probe.has_audio among its fields, so this post does not promise a bitrate field there. Download the file and read it with ffprobe, which prints the container bit rate in bits per second:
ffprobe -v error -show_entries stream=width,height:format=bit_rate,size -of default=nw=1 clip.mp4
# bit_rate must be at least 516000; size must be at most 500000000 bytesA pre-upload gate
Turn the spec into a pass or fail test. Width and height at or above 540x960 for 9:16; duration at or below 600 seconds; size at or below 500 MB; bit rate at or above 516 kbps; container one of the listed formats. The ffprobe line above gives the first, fourth and size values in one call. A file that fails any line goes back for a re-render before it reaches the ad account.
Captions have their own rules on the same page: white text, a fixed font, and no links, @ or hashtags. If you burn captions into an ad, keep them to plain words.
Arithmetic check
500 MB at 516 kbps is far longer than any ad allows (516,000 bits per second is 64,500 bytes per second, so 500 MB lasts about 7,752 seconds), so the 10-minute cap bites long before the size cap does at the minimum bitrate. A higher bitrate changes that: at 8 Mbps (1 MB per second), a 500 MB file would last 500 seconds, which is under the 600-second limit. Always check the actual file.
Sources
Related posts
More in Media tools
- TikTok safe zone: no single number, so test a caption anchor ratio
TikTok has no safe-zone figure I could read from its own help page. Place burned-in captions with design.placement.anchor_ratio, then check a still.
- TikTok video limit: guides say 10 or 60 minutes, so cut to the lower
Third-party guides give TikTok 10 minutes in-app and up to 60 for upload. Probe the file with video inspect, then cut to the lower figure with video trim.
- TikTok video width and height: 1080x1920, and how to export it
TikTok width and height as third-party guides state them, 1080x1920 at 9:16, and two Sume routes to that file: crop and scale, or a Timeline render.
- Sume audio_url_and_parts_exclusive: pick one spine for a VO Short
Sume timeline rejects audio.url together with audio.parts. Send a single url spine, or up to 20 parts[], never both; the hint is use_audio_url_or_audio_parts.
Written by Sume