TikTok video specs for API uploads and ads, mapped to Sume

TikTok's posting API takes MP4, WebM, or MOV at 23–60 fps, 360–4,096 px, and up to 10 minutes. How a Sume clip maps to that, and how to upload it.

5 min readSume
All posts

TikTok's Content Posting API accepts MP4, WebM, or MOV video in H.264, H.265, VP8, or VP9, at 23 to 60 fps, 360 to 4,096 pixels on each side, and up to 4 GB, with up to 10 minutes through its Upload Video endpoint. To post a Sume video, generate it in 9:16, read its probe, conform the frame rate or size with video trim if needed, and upload the bytes with FILE_UPLOAD, because TikTok's URL pull only takes URLs on a domain or URL prefix you have verified.

TikTok's limits are quoted from its Media Transfer Guide (last updated August 4, 2026) and its Auction In-Feed Ads help page (last updated June 2026), read on 2026-09-27; both can change. Sume facts come from Video generation, Video trim, Timeline 1.0, and Video inspect.

What are TikTok's video specs for API uploads and ads?

The posting API and Non-Spark in-feed ads publish different limits. Spark Ads list only .mp4 or .mov and no duration restriction.

  • All TikTok creators can post 3-minute videos, and some can post 5 or 10 minutes. TikTok users may trim a developer-sent video in the app to fit their account's maximum.
From TikTok's Media Transfer Guide and Auction In-Feed Ads, read 2026-09-27.
SpecContent Posting APINon-Spark in-feed ads
ContainerMP4 (recommended), WebM, MOV.mp4, .mov, .mpeg, .3gp, .avi
CodecH.264 (recommended), H.265, VP8, VP9Not listed
Frame rate23–60 fpsNot listed
Picture size360–4,096 px for height and width9:16 (recommended) ≥ 540×960; 16:9 ≥ 960×540; 1:1 ≥ 640×640
DurationUp to 10 minutes through the Upload Video endpointUp to 10 minutes
File sizeUp to 4 GBUp to 500 MB
BitrateNot listedAt least 516 kbps

How do I generate a vertical clip for TikTok?

Send POST /v1/videos with aspect_ratio: "9:16" on a model that lists it; Vertical 9:16 video generation has the per-model list and a request. One generated clip runs at most 30 seconds, on seedance-2.5 or wan-3.0 (lengths by model), so a longer TikTok is a Timeline assembly. An avatar video is 9:16 by default at 720p, for scripts Sume estimates at 4–60 seconds.

No model advertises pixel sizes (supported_sizes is null), so read the result's width and height from the probe.

Where does Sume output land against TikTok's limits?

Video trim, video filter, and Timeline return MP4 files. Timeline, filter, and trim's default exact mode encode video with libx264, which FFmpeg's docs describe as an H.264 encoder (the full encoder settings). Against TikTok's numbers:

  • Frame rate: Timeline and trim output.fps take 24, 25, 30, or 60, all inside TikTok's 23–60. A generated clip's own rate is not documented, so check it.
  • Picture size: Timeline and trim take 256–2,160 px per edge, so pick 360 or more. Timeline's default 1080×1920 also clears the 540×960 ad minimum.
  • Length: Timeline assembles 1–1,800 seconds from media.sume.com clips. Cap audio.duration_seconds at 600 for the Upload Video endpoint's 10 minutes, or at 180 for the 3 minutes every creator can post.

How do I check and conform the file before upload?

Run a free, probe-only POST /v1/video-inspect with frames: false. It returns duration_seconds, width, height, fps, video_codec, audio_codec, and size_bytes, among others (probe fields).

If the rate or size misses, re-encode with POST /v1/video-trim from start: 0 for the clip's full duration (up to 900 seconds), with output: { width, height, fps }. Give both edges only when they keep the clip's aspect ratio: today, two edges scale the frame to exactly that size (conform details).

curl -X POST https://api.sume.com/v1/video-trim \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: tiktok-conform-001" \
  -d '{
    "video_url": "https://media.sume.com/artifacts/artf_demo/clip.mp4",
    "start": 0,
    "duration": 20,
    "output": { "width": 1080, "height": 1920, "fps": 30 }
  }'

How do I upload the file to TikTok?

The Media Transfer Guide documents two ways in:

  • FILE_UPLOAD: initializing returns an upload_url, and you send the bytes to it. Chunks are 5–64 MB (the last up to 128 MB), a file under 5 MB goes whole, a file over 64 MB must be chunked, and chunks go up in order, 1 to 1,000 of them.
  • PULL_FROM_URL: TikTok downloads from a URL that must belong to a domain or URL prefix you verified in TikTok for Developers. It must use https and not redirect; a 3xx answer is invalid. The download times out one hour after it starts.

Which Sume URL can I hand to TikTok?

Neither Sume URL passes TikTok's pull rules. Completed jobs can include public artifacts under https://media.sume.com, which is Sume's domain, not a path you own, as TikTok's pull requires. The /v1/videos/{id}/content link needs your API key and answers with a redirect. So take the media.sume.com URL from GET /v1/jobs/{id}/result, download it, and send the bytes with FILE_UPLOAD (download steps), or copy the file to a domain you have verified.

What can't Sume set for TikTok?

Check these yourself before you upload:

  • Bitrate and file size: trim, filter, and Timeline take no bitrate or size field and refuse codec or crf keys. For the ad floor, compute the average from the probe as size_bytes × 8 ÷ duration_seconds ÷ 1,000 (kbps, audio included) and compare it with 516.
  • Safe zones: TikTok publishes them as downloadable template files that vary with dimension, ad caption length, and extra formats, so there are no numbers to map. Burned-in captions move with design.placement.anchor_ratio, except on punch and tiktok-green (caption placement).

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume