TikTok
TikTok publishing is asynchronous: the Direct Post API accepts an upload
and returns a publish_id, then notifies us via webhook when the video
actually goes live (or fails). post.buzz handles the pending state and
reconciles the post automatically.
Capabilities
| Publish | ✅ Video, Photo mode |
| Insights | ✅ views, likes, comments, shares, follower count |
| Fetch comments | ➖ |
| Reply to comments | ✅ (manual) |
| Like comments | ✅ like only (no unlike edge) |
| Send DM | ➖ |
| Delete post | ➖ |
| Comment automation | ➖ |
Comment automation does not work on TikTok. TikTok's public API does not
expose comment reading — the granted scopes don't include comment.manage
(enabling it first requires the "Comment Management" product in the TikTok
Developer Portal). With no inbound comments, the automation loop has nothing
to trigger on. Replying from the inbox is implemented and works when you fire
it manually.
Post types & media limits
Videos (Reels)
| Constraint | Value |
|---|---|
| Files | 1 video (required) |
| Max size | 1 GB |
| Resolution | 360×360 to 4096×4096 |
| Aspect ratio | 0.01:1 to 10:6 |
| Duration | max 10 min (600 s) |
The effective duration cap is also checked against the creator's
max_video_post_duration_sec from TikTok's creator info query, which can be
lower for accounts without a long-video allowance.
Images (Photo Mode)
| Constraint | Value |
|---|---|
| Files | 1–10 images |
| Format | JPG/JPEG/WebP only |
| Max size | 20 MB each |
| Max width | 1920 px |
Photo mode is chosen automatically from the media file extensions — an all-image post goes out as a photo post; it can't be forced via the post type.
PNG is not valid for TikTok Photo Mode and will be rejected. Convert PNG assets before targeting a TikTok photo post.
Text limits
text: 2,200 characters. Text-only posts are rejected — media is required.
Privacy
Every publish resolves a privacy_level against the creator's allowed
options (queried from TikTok's creator info endpoint), so the post uses the
strictest setting the account actually permits rather than a hardcoded value.
How data arrives
TikTok sends Content Posting API completion/failure events to
/api/tiktok/webhook. The handler verifies the TikTok-Signature
(HMAC-SHA256 over <timestamp>.<rawBody> keyed with the client secret), flips
the matching pending_completion schedule to its terminal state, and
reconciles the parent post. The endpoint is idempotent; TikTok retries for 72 h
on non-200. There are no comment events — the webhook is publish-only.
See Webhooks.
Connect notes
- Configure the callback URL
<APP_ORIGIN>/api/tiktok/webhookin the Developer Portal under your app's Webhooks product. - Scopes (
user.info.basic,user.info.profile,user.info.stats,video.upload,video.publish,video.list) must match what your TikTok app is approved for. - See Connect a channel.