Channels
TikTok
How an agent publishes to TikTok through uplika: the privacy choice TikTok requires, drafts sent to the app, and what the Content Posting API does not offer.
Quick reference
| Name | Type | Description |
|---|---|---|
characters | text | 2,200 |
images | media | up to 35 per post; more than that and the first 35 go out with a warning |
carousel | media | 2-35 items |
video | media | 1 per post |
text alone | media | media required |
posts / 24h | limit | 8,640 |
deletes / 24h | limit | TikTok has no delete API; posts can only be removed in the app |
status | state | beta |
These numbers come from the same file the server validates against. TikTok has no text-only posts and cannot mix a video with photos. The text limit differs by post type: 2,200 on a video, 4,000 on a photo post.
Why is privacyLevel required?
TikTok's rules say the person must choose visibility deliberately and there must be no default. uplika has no dropdown for an agent, so the requirement lives in the argument: options.tiktok.privacyLevel is required and has no default. The values an account may use differ per account, so call get_publish_options first and pass one of the values it returns.
How do I publish my first video?
Upload a video, call get_publish_options for the account, then publish with the media id and a privacyLevel from that answer.
curl -X POST https://api.uplika.com/v1/posts \
-H "Authorization: Bearer $UPLIKA_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Caption #hashtags",
"accountIds": ["conn_..."],
"mediaIds": ["med_..."],
"options": { "tiktok": { "privacyLevel": "SELF_ONLY" } }
}'What options.tiktok takes
| Name | Type | Description |
|---|---|---|
privacyLevel | string | Required unless postMode is draft. One of the values that get_publish_options returns for this account, e.g. PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR or SELF_ONLY. The list differs per account, so do not hard-code it. |
title | string | Required for a photo post, up to 90 characters. A video post has no title field at all and passing one is rejected; a video's text comes from content. |
postMode | direct | draft | direct (default) posts to the profile. draft sends it to the creator's TikTok inbox; they open the notification and finish it in the app, choosing the visibility themselves. While this app awaits the Content Posting audit this is the only way to get something out publicly: a direct post can only be SELF_ONLY, but on this path we send no visibility at all. The trade is that it is not on the profile until the person finishes it, so there is no link and no metrics in the meantime. |
disableComment | boolean | Turn comments off for this post. Cannot be set to false if the creator disabled comments account-wide. |
disableDuet | boolean | Turn duets off for this post. Video posts only. |
disableStitch | boolean | Turn stitches off for this post. Video posts only. |
brandContentToggle | boolean | Declare paid partnership content ("Branded Content"). TikTok does not allow branded content to be private, so this cannot be combined with privacyLevel SELF_ONLY. |
brandOrganicToggle | boolean | Declare that the post promotes the creator's own brand ("Your Brand"). Leave it out rather than sending false: not declaring and declaring 'no' are different statements. |
isAigc | boolean | Declare that the content was generated by AI. Worth setting when you made the video or images. |
videoCoverTimestampMs | number | Which frame to use as the cover, in milliseconds into the video. TikTok does not accept a cover image file, only a timestamp. |
content | string | Text for this channel only. When set it replaces the shared content for this channel, and the length and media checks use it. Leave it out to use the shared content. |
Generated from the same schema the server validates with. GET /v1/platforms returns it too.
What is not available?
Deleting a post and reading comments: the Content Posting API has neither, so delete_post and list_replies refuse with a clear code rather than pretending. A video post has no title field at all; only photo posts do. Cover images are a timestamp into the video, not a file.
Frequently asked
Why does uplika not just default the privacy to public?
Because TikTok's review rules forbid a default. The person has to choose. That rule is what the required argument enforces.
Why did my post come back with no link?
Before the Content Posting audit clears, TikTok returns no public post id for API uploads. The post exists on the account as private. Use postMode draft to publish publicly in the meantime.
Can I set a cover image?
Only as a timestamp: options.tiktok.videoCoverTimestampMs picks a frame from the video. TikTok does not accept a cover file.