# TikTok API: Posting Reference

TikTok is supported via the TikTok Business API. Both photo posts and video posts (reels) are available. The connected account must be a TikTok Business account, not a personal account.

**Channel ID:** `tiktok`

## Supported content types

| Type | Supported | Notes |
|------|-----------|-------|
| Feed post | ✅ | Photo posts only (1-35 images) |
| Story | - | Not supported |
| Reel | ✅ | Vertical video |

## Minimal example

Video reel:

```bash
curl -X POST https://api.omnisocials.com/v1/posts/create \
  -H "Authorization: Bearer $OMNISOCIALS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "reel",
    "content": { "default": "New drop 🔥" },
    "accounts": ["your-tiktok-account-id"],
    "media_urls": ["https://example.com/video.mp4"],
    "tiktok": {
      "privacy_level": "PUBLIC_TO_EVERYONE"
    }
  }'
```

Photo post:

```bash
curl -X POST https://api.omnisocials.com/v1/posts/create \
  -H "Authorization: Bearer $OMNISOCIALS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": { "default": "Weekend shots" },
    "accounts": ["your-tiktok-account-id"],
    "media_urls": [
      "https://example.com/photo1.jpg",
      "https://example.com/photo2.jpg"
    ],
    "tiktok": {
      "privacy_level": "PUBLIC_TO_EVERYONE"
    }
  }'
```

## 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. Required. One of `PUBLIC_TO_EVERYONE`, `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`](/creating-posts#video-covers) is skipped on TikTok and the frame is used instead. |
| `tiktok.is_aigc` | boolean | Disclose the content is AI-generated. |
| `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](/creating-posts#automatic-first-comment). |

`privacy_level` is required on every TikTok post. Omitting it returns `400`.

## Media requirements

| Media | Requirement |
|-------|-------------|
| Video | MP4 or MOV, 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 4 GB |
| Photo | JPEG or PNG, 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

- Only TikTok Business accounts can connect. Personal accounts are rejected at OAuth time.
- `brand_content_toggle: true` triggers TikTok's branded content review workflow. The post may take longer to publish.
- TikTok's API does not support scheduling posts further than 10 days in advance
- 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, and you can reply and like or unlike them from the inbox (liking is app-only for now).

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](/inbox#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 |

They cover roughly the 100 most recent videos of the account. Channels that enabled comments before 22 August 2026 need one more consent for the `video.insights` scope: click **Unlock watch-time analytics** on the TikTok channel card. When the authorization or scope is missing the keys are absent, not zero.
