TikTok API Reference

Publish videos and photo carousels to TikTok with privacy and interaction controls.

Quick reference

authOAuth 2.0
text Limit2,200 characters
max Media35 photos OR 1 video
media RulePhotos and video cannot be mixed
max Video Duration10 min
entity SelectionNone
first CommentNot supported (TikTok has no comment-creation API)

Content types

Text-only

Not supported — media is required

Images

Up to 35 photos. JPEG and WebP only.

Video

1 video per post. MP4 or WebM. Max 500 MB.

Carousel

Up to 35 images (photo mode)

GIF

Not supported

Media requirements

Constraints enforced by TikTok's API. Requests that violate these limits will be rejected.

ConstraintValue
Max image size10 MB
Max video size500 MB
Image formatsJPEG, WEBP
Video formatsMP4, WEBM
Max video duration10 min
Image aspect ratio0.56:1 to 1:1
Min image dimensions360x360 px
Max media items35
GIF supportNo

Platform settings

Pass these fields inside platformSettings.tiktok in the request body.

privacy
stringRequired

Who can view the post. Required — posts are rejected rather than published with a guessed privacy level. The value must be enabled on the connected account.

PUBLIC_TO_EVERYONEFOLLOWER_OF_CREATORMUTUAL_FOLLOW_FRIENDSSELF_ONLY
postMode
stringRequired

How the post is delivered. 'direct' publishes straight to the profile; 'inbox' sends it to the creator's TikTok app inbox to finish manually in TikTok. Required — there is no default; posts are rejected rather than routed with a guessed mode.

directinbox
allowComments
booleanOptional

Whether viewers can comment on the post.

Default: true

allowDuet
booleanOptional

Whether viewers can create duets (video only).

Default: true

allowStitch
booleanOptional

Whether viewers can stitch the video.

Default: true

autoAddMusic
booleanOptional

Automatically add trending music to photo/carousel posts.

Default: false

isAIGenerated
booleanOptional

Disclose that the content is AI-generated.

Default: false

Code examples

Basic post

curl -X POST https://schedulala.com/api/v1/posts \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Check this out! #fyp",
"platforms": [
{ "platform": "tiktok", "accountId": "acc_tt" }
],
"mediaItems": [
{ "type": "video", "url": "https://example.com/clip.mp4" }
],
"platformSettings": {
"tiktok": {
"privacy": "PUBLIC_TO_EVERYONE",
"postMode": "direct",
"allowComments": true
}
},
"publishNow": true
}'

Post with media

curl -X POST https://schedulala.com/api/v1/posts \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Photo carousel! #photography",
"platforms": [
{ "platform": "tiktok", "accountId": "acc_tt" }
],
"mediaItems": [
{ "type": "image", "url": "https://example.com/photo1.jpg" },
{ "type": "image", "url": "https://example.com/photo2.jpg" },
{ "type": "image", "url": "https://example.com/photo3.jpg" }
],
"platformSettings": {
"tiktok": {
"privacy": "PUBLIC_TO_EVERYONE",
"postMode": "direct",
"autoAddMusic": true
}
},
"publishNow": true
}'

Quirks & gotchas

!

35 photos OR 1 video per post — you cannot mix photos and video.

!

Only JPEG and WebP images — PNG is not supported.

!

Image aspect ratio: 9:16 to 1:1 (portrait-first platform).

!

Minimum image dimensions: 360x360 px.

!

GIFs are not supported.

!

Privacy options may be restricted by the creator's account settings.

!

Branded content cannot use SELF_ONLY privacy level.

Related