TikTok 3-5 creatives per ad group: render five cuts from one Timeline
TikTok's best-practice page suggests 3-5 creatives per ad group. Render five variants from one master by changing one slot, and cost the batch first.

TikTok's creative best-practice page suggests 3 to 5 creatives per ad group and 3 to 5 ad groups per campaign. To fill one group, render five variants of a master from one Timeline body, swapping only the opening slot. Each render is its own job with its own idempotency key, so a failed one retries on its own.
What TikTok's page says
On "Creative best practices for performance ads" (read 2026-10-05), the page recommends 3-5 creatives per ad group and 3-5 ad groups per campaign. It also says to refresh creatives when delivery trends decline or daily new users are low, and to add new creatives to an existing ad group instead of creating a new one.
One body, five openings
Timeline 1.0 takes an ordered video[] list. Each slot has a source_url, start, duration and optional source_in, which picks where inside the source the slot begins. Keep the body slots the same in all five requests and change only the first slot's source_in or source_url.
The first slot must start at 0 and later starts must increase. Slots shorter than 0.2 seconds are refused, which keeps fast cuts honest.
for i in 0 1 2 3 4; do
curl -s -X POST https://api.sume.com/v1/timeline-1.0/render \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Idempotency-Key: ad-group-hook-$i" \
-H "Content-Type: application/json" \
-d @"hook-$i.json"
doneCost the batch first
Timeline is priced at $0.10 per ceil output minute in the docs. A cut of 30 seconds is one billed minute, so five cuts reserve five minutes, or $0.50 at that list rate. POST /v1/timeline-1.0/plan is unbilled and returns the estimate for a body without creating a job; check the live rate in GET /v1/catalog before you commit.
Refreshing later
When TikTok's page says to add creatives to the same ad group, you need new cuts fast. Keep the five JSON bodies in a folder; a refresh is a copy with a new first slot and a new idempotency key.
Poll with GET /v1/jobs/:id/status and fetch /result when done, or use webhook mode if you run many at once.
- Change one thing per variant.
- Name files by hook, not by date.
- Check one frame of each before upload.
Sources
Related posts
More in Use cases
- 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.
- TikTok ad minimum 540x960 vs 480p AI video: which resolution to pick
TikTok's ad spec asks for 9:16 video of at least 540x960. A 480p AI clip falls short on its short side. Generate at 720p or higher on Sume.
- TikTok ad text allows no links, @ or hashtags: a Python lint
TikTok's in-feed spec says ad text shows in white, uncustomizable, with no clickable links, @ symbols, or hashtags. A short check catches them before upload.
- TikTok ad tips: transitions, stickers, graphics, and what Sume covers
TikTok's page lists transitions, stickers and graphics as creative tips. See which Sume's Timeline and compose endpoints produce, and which they do not.
Written by Sume