Timeline sizes for TikTok's three ad ratios: 540x960, 960x540, 640x640
TikTok's non-Spark minimums are 540x960 (9:16), 960x540 (16:9) and 640x640 (1:1). All three fit Timeline's even 256 to 2160 px output range at $0.10 a minute.

TikTok's specification page (read 2026-10-08) sets minimums of 540x960 for 9:16, 960x540 for 16:9 and 640x640 for 1:1 for non-Spark video ads. Timeline 1.0 accepts output.width and output.height as even integers from 256 to 2160, so all three minimums are valid outputs, and each render costs $0.10 per started minute regardless of the size you pick.
The three sizes
Smallest legal request for each ratio, all within Timeline's range and all even:
| Ratio | TikTok minimum | `output.width` | `output.height` | Even and in 256 to 2160? |
|---|---|---|---|---|
| 9:16 | 540x960 | 540 | 960 | yes |
| 16:9 | 960x540 | 960 | 540 | yes |
| 1:1 | 640x640 | 640 | 640 | yes |
Request body
The default output is 1080x1920. To ask for the TikTok minimum on a vertical cut, set the size explicitly and let the sources decide the frame rate:
{
"audio": { "mode": "silence", "duration_seconds": 15 },
"video": [
{ "source_url": "https://media.sume.com/artifacts/artf_demo/hook.mp4", "start": 0, "duration": 15 }
],
"output": { "width": 540, "height": 960 }
}Why the minimum is rarely the right target
A minimum is a floor, not a recommendation. The page lists 9:16 as the recommended vertical ratio with that floor, and a render at 540x960 gives the smallest accepted picture. Use it for drafts and checks; render the version you ship at the default 1080x1920, which costs the same $0.10 per minute.
video[].fit defaults to cover, which fills the frame and crops what does not fit. For a 1:1 source on a 540x960 canvas you can choose contain (bars), blur or stretch instead. Pick one deliberately, because the cropping changes what viewers see.
Checking the result
Timeline returns video_url and duration_seconds. The run does not report pixel dimensions in the fields documented on the Timeline page, so confirm width and height with a probe from video inspect before you upload.
Check the other TikTok limits at the same time: at most 500 MB, bitrate of at least 516 kbps, and a container from mp4, mov, mpeg, 3gp or avi. Timeline returns an MP4.
Even sizes and the limits
Timeline 1.0 takes an even width and height from 256 to 2160, with frame rates of 24, 25, 30 or 60. All three TikTok minimum sizes are even and in range, so each can be requested exactly. A request with an odd size such as 541x960 is refused, so round up to the next even number when you derive a size from a ratio.
For other sizes at the same ratio, scale both sides by the same factor and keep them even. For 9:16, 720x1280 and 1080x1920 are both exact; for 1:1, 720x720 and 1080x1080 are. The default output is 1080x1920 when you set nothing.
A quick check in your head
Divide the width by the height. 540 / 960 = 0.5625, which is 9/16. 960 / 540 = 1.7778, which is 16/9. 640 / 640 = 1. If your size does not give one of these three ratios, it is not one of the three TikTok non-Spark shapes the page lists, whatever its pixel count.
Sources
Related posts
More in Developers
- Timeline audio concat or audio.parts: which join for narration takes?
Use audio.parts when the narration only feeds one render; use Timeline audio concat when you need a reusable file. Concat is $0.01 per job, up to 1,800 s.
- Timeline plan call: price a narrated render before you spend
POST /v1/timeline-1.0/plan is unbilled and returns billable_minutes and estimated_cost_usd_micros. How to price a narration plus music render first.
- Timeline plan needs no Idempotency-Key; render does: a wrapper
POST /v1/timeline-1.0/plan is free and takes no Idempotency-Key. Render is paid and requires one. A wrapper plans first, then renders with a derived key.
- Transcribe a 90-second clip with video inspect: cost and reservation
Video inspect with transcribe true adds Sume STT at $0.01 per audio minute; send duration_seconds 90 so the hold fits, or it reserves one minute.
Written by Sume