TikTok
Video requirements, cover images, and privacy settings.
TikTok
Posting uses the TikTok for Developers Content Posting API. OAuth scopes: video.upload, user.info.basic. Accounts must accept TikTok's Content Posting API terms during connection.
Post types
postType | What it is |
|---|---|
video | Standard video post |
photo | Multi-photo carousel (new TikTok format) |
Live streams and duets can't be created via API.
Video specs
| Property | Requirement |
|---|---|
| Format | MP4, MOV, MPEG |
| Codec | H.264 (AVC), AAC audio |
| Max file size | 4 GB |
| Max duration | 10 minutes |
| Aspect ratio | 9:16 strongly preferred (1:1 and 16:9 accepted but auto-cropped) |
| Resolution | 720p minimum; 1080p recommended |
| Frame rate | 23 – 60 fps |
Videos outside these specs are rejected at upload. TikTok doesn't transcode.
Payload
{
"platform": "tiktok",
"accountId": "acc_01H...",
"status": "publish",
"postType": "video",
"content": "Behind-the-scenes of our launch day.",
"media": [{ "id": "med_01H...video" }],
"options": {
"privacy": "public",
"allowComments": true,
"allowDuet": true,
"allowStitch": true
}
}Caption limit: 2,200 characters. Hashtags count toward that.
Privacy settings
options.privacy:
| Value | Who sees it |
|---|---|
public | Everyone |
followersOnly | Only your followers |
private | Only you (effectively a draft on TikTok's side) |
Interactions
allowComments(default true)allowDuet(default true)allowStitch(default true)
Disable per-post if brand safety needs it.
Cover image
TikTok auto-generates a cover from a frame of the video. Custom covers are NOT supported via the public API. If it matters, generate the thumbnail yourself and burn it into the first frame of the video before uploading.
Music attribution
API uploads use the original audio from the video. You cannot programmatically attach a TikTok-licensed music track (that's app-only). If you need background music, mix it into the video file before uploading.
Photo posts
postType: "photo" with 2–35 images:
{
"platform": "tiktok",
"postType": "photo",
"content": "Summer photo dump.",
"media": [
{ "id": "med_01H...1" },
{ "id": "med_01H...2" },
{ "id": "med_01H...3" }
]
}Images: JPEG/PNG, max 20 MB each. Aspect ratios: 9:16, 1:1, or 16:9 (TikTok crops mismatched ratios).
Scheduling
TikTok's API does NOT support server-side scheduling. Postato workers handle this for you: we hold scheduled posts and fire them at scheduledAt. The actual upload to TikTok happens at fire time.
Gotchas
- "Draft" status: TikTok's API includes a "draft on device" concept that requires the end user to open the TikTok app and confirm publishing. Postato's
status: "draft"does NOT trigger this; it's Postato-side only. If you need the "review in app" flow, you'd currently have to build it client-side. - Audit mode for unaudited apps: apps in TikTok's "unaudited" state can only post as private to the connected user. Get audited before going to production.
- Video processing time: after upload, TikTok processes the video for 1–5 minutes. The post doesn't appear in feeds until processing completes.
post.publishedfires at API success, not feed availability. - Duplicate detection: TikTok's de-dup is aggressive. Re-uploading the same file (even slightly modified) may be flagged as spam. Vary the content across posts.