TikTok API: posting reference
TikTok is supported via TikTok's Content Posting API. Both photo posts and video posts (reels) are available. Personal and business TikTok accounts can both connect. Comments, first comments and watch-depth analytics use TikTok's Business (Accounts) API, through a second, optional consent: Enable comments (see Social Inbox below).
For an overview and use cases, see TikTok API.
Channel ID: tiktok
Supported content types
| Type | Supported | Notes |
|---|---|---|
| Feed post | ✅ | Photo post (1-35 images) or a single video |
| Story | - | Not supported |
| Reel | ✅ | Vertical video |
Minimal example
Video reel:
Terminal
Photo post:
Terminal
Platform-specific options
| Field | Type | Description |
|---|---|---|
tiktok.title | string | Photo carousels only. The title TikTok shows above the caption on Photo Mode posts, max 90 characters. TikTok's photo endpoint takes the title and the caption as separate fields; the caption comes from content. Ignored on video posts, which have a single caption field. Read back as tiktok.title. |
tiktok.privacy_level | string | Who can see the post. One of PUBLIC_TO_EVERYONE (default), MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY. |
tiktok.disable_comment | boolean | Disable comments on the post. |
tiktok.disable_duet | boolean | Disable duets (video only). |
tiktok.disable_stitch | boolean | Disable stitches (video only). |
tiktok.video_cover_timestamp_ms | integer | Video only. Timestamp (ms) of the frame to use as the cover. TikTok only accepts a frame, never an image: a custom video_cover is skipped on TikTok and the frame is used instead. |
tiktok.is_aigc | boolean | Disclose the content is AI-generated. Reel-type videos only; not sent on photo posts or on a video published as a feed post. |
tiktok.brand_content_toggle | boolean | Mark as a paid partnership promoting a third-party brand. |
tiktok.brand_organic_toggle | boolean | Mark as promoting your own business / brand. |
tiktok.auto_add_music | boolean | Photo carousels only. When true, TikTok auto-selects a soundtrack. Defaults to false. |
tiktok.first_comment | string | Auto-posted as the first comment right after the video publishes, max 150 characters. Needs comments enabled on the channel (see Social Inbox below) and a public video with comments allowed. See Automatic first comment. |
When privacy_level is omitted, the post publishes as PUBLIC_TO_EVERYONE. TikTok decides per creator which levels an account may use; if the account can't use the level you send, the post publishes as SELF_ONLY (private) instead.
Media requirements
| Media | Requirement |
|---|---|
| Video | MP4, MOV, or WebM, aspect ratio 9:16 or 16:9, 3 seconds up to the account's own limit (3, 5 or 10 minutes, set by TikTok per creator), max 1 GB (OmniSocials' upload ceiling: 1 GB for media added by URL, 100 MB for direct file uploads; TikTok itself allows up to 4 GB) |
| Photo | JPEG, PNG, or WebP (PNG is converted to JPEG at post time), 1-35 images per post, max 20 MB per image |
Photo posts must contain only images. Video posts must contain exactly one video. Mixing is not allowed.
Alt text. Per-media alt entries are accepted but not delivered; the platform's API does not support alt text on third-party posts. It is safe to send the same media objects you use for other platforms.
Character limit
Captions cap at 2,200 characters on videos (TikTok's video endpoint has a single title field) and 4,000 characters on photo posts. Longer returns 400 validation_error at create time. Photo post titles (tiktok.title) cap at 90 characters; longer returns 400 validation_error.
Limitations
- Posts publish straight to the profile. Sending a video to the creator's TikTok drafts (inbox upload mode) is not supported.
brand_content_toggle: truetriggers TikTok's branded content review workflow. The post may take longer to publish.- TikTok's API has no native scheduling. Scheduled OmniSocials posts are held on our side and published at the scheduled time.
- Custom cover images are not supported: TikTok takes a frame of the video as the cover (
tiktok.video_cover_timestamp_ms). - Published videos can't be deleted from OmniSocials: TikTok's API has no delete. Remove them in the TikTok app.
- Comments, duets, and stitches can be disabled at post time but cannot be changed later
Social Inbox
Comments on your TikTok videos land in the Social Inbox once comments are enabled on the channel. Enabling is a second TikTok authorization, started from the Enable comments button on the TikTok channel card under Settings -> Organisation -> Workspaces. New comments arrive in real time, with a check every 15 minutes as a safety net. You can reply, like or unlike (liking is app-only for now), and hide or delete comments (POST /inbox/messages/{id}/hide, DELETE /inbox/messages/{id}; see Hiding and deleting comments). TikTok DMs are not part of the inbox.
Replies post from the connected TikTok account and are text only, capped at 150 characters. TikTok holds fresh comments and replies in spam review for roughly 15 to 20 minutes before they are publicly visible. See TikTok comments in the Social Inbox guide.
The same authorization unlocks first comments (tiktok.first_comment, above) and watch-depth analytics.
Watch-depth analytics
TikTok's regular posting API only reports views, likes, comments, and shares. Once comments are enabled on the channel, the analytics endpoints (GET /analytics/posts/:id, the bulk variant, and GET /posts/recent-platform) add these fields to the TikTok metrics map, as TikTok reports them:
| Metric | Meaning |
|---|---|
average_time_watched | Average seconds a viewer watched |
full_video_watched_rate | Share of views that watched to the end |
total_time_watched | Total seconds watched across all views |
favorites | Times the video was saved to favorites |
reach | Unique accounts that saw the video |
impression_sources | Where the video was seen (For You, Following, and so on), as percentages |
audience_types | Viewer types (new viewers, followers, and so on), as percentages |
audience_countries | Top 10 viewer countries, as percentages |
They cover roughly the 200 most recent videos of the account. The breakdown keys (impression_sources, audience_types, audience_countries) appear only when TikTok returns them. The same authorization adds account insights to GET /analytics/accounts: profile views, video views, reach, accounts engaged, follows gained and lost, bio link clicks, online followers, and audience demographics (country, gender, age). Channels that enabled comments before 22 August 2026 need one more consent for the insights scopes (video.insights, user.insights): click Unlock analytics permissions on the TikTok channel card. When the authorization or scope is missing the keys are absent, not zero.