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

NameTypeDescription
characterstext2,200
imagesmediaup to 35 per post; more than that and the first 35 go out with a warning
carouselmedia2-35 items
videomedia1 per post
text alonemediamedia required
posts / 24hlimit8,640
deletes / 24hlimitTikTok has no delete API; posts can only be removed in the app
statusstatebeta

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

NameTypeDescription
privacyLevelstringRequired 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.
titlestringRequired 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.
postModedirect | draftdirect (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.
disableCommentbooleanTurn comments off for this post. Cannot be set to false if the creator disabled comments account-wide.
disableDuetbooleanTurn duets off for this post. Video posts only.
disableStitchbooleanTurn stitches off for this post. Video posts only.
brandContentTogglebooleanDeclare paid partnership content ("Branded Content"). TikTok does not allow branded content to be private, so this cannot be combined with privacyLevel SELF_ONLY.
brandOrganicTogglebooleanDeclare 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.
isAigcbooleanDeclare that the content was generated by AI. Worth setting when you made the video or images.
videoCoverTimestampMsnumberWhich frame to use as the cover, in milliseconds into the video. TikTok does not accept a cover image file, only a timestamp.
contentstringText 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.