Overview
Schedule and automate TikTok videos and photo carousels with privacy levels, branded content disclosure, and AI-generated labels.
Schedule and automate TikTok videos and photo carousels with Direct Post. Privacy levels, interaction toggles, branded content disclosure, AI-generated labels, account stats, and per-post analytics are all included.
Quick Reference
| Property | Value |
|---|---|
| Video caption | 2,200 characters |
| Photo title | 90 characters |
| Photo description | 4,000 characters |
| Photos per carousel | 2 to 35 (image kind for a single photo) |
| Video formats | MP4, MOV, WebM |
| Video max size | 4 GB |
| Video duration | Account-specific, up to 10 minutes |
| Photo formats | JPEG, WebP |
| Post types | Video, Photo, Photo carousel |
| Scheduling | Yes, with IANA timezone |
| Editing published posts | No |
| Comments through API | No |
| Remote delete | No |
| Analytics | Yes (views, likes, comments, shares) |
Before You Start
TikTok only pulls media from hosts verified in the developer app. Onepostly serves uploads from its own CDN, so every TikTok post must use URLs returned by the Media API. Any other host is rejected with INVALID_MEDIA.
Additional requirements:
privacyLevelis required on every destination and must match one of the creator's allowed values- Media is required. There are no text-only posts
- Photo carousels use
textas a 90-character title. Passdescriptionfor the full 4,000-character caption - Private posts never get a public video id, so their analytics report
unavailable - TikTok enforces a strict daily posting limit for posts created via the API. It is separate from the native app and account-specific. See Direct posting at capacity and Posting Velocity Limits
- Content moderation is stricter via the API than in the native app. Flagged posts fail with
SPAM_RISK
Connect
const { connections: list } = await connections.listConnections();
const tt = list.find((c) => c.platform === "tiktok");
// tt.id is your accountIdIf an action fails with PERMISSION_DENIED, the connection is missing the scope. Reconnect TikTok once to grant it.
OAuth Scopes
| Scope | What it enables |
|---|---|
video.publish | Direct-post publishing of videos and photo posts |
video.list | Read the account's public videos for media lists and analytics |
user.info.basic | Account identity (open id, display name, avatar) |
user.info.profile | Username and profile details |
user.info.stats | Follower, likes, and video counts |
Token Lifetime
| Token | Lifetime | Behavior |
|---|---|---|
| Access token | ~24 hours | Refreshed automatically by Onepostly |
| Refresh token | ~365 days | After expiry, a password change, or revocation, reconnect the account |
Capabilities
| Action | Supported | Notes |
|---|---|---|
| Video post | Yes | MP4, MOV, WebM, up to 4 GB |
| Photo carousel | Yes | 2 to 35 photos, JPEG / WebP |
| Single photo | Yes | JPEG / WebP |
| Text-only post | No | Not a TikTok API capability |
| Stories | No | Not a TikTok API capability |
| Inbox draft | No | Direct Post only |
| Schedule | Yes | Cancel any time before it publishes |
| Comments (read / reply) | No | Not available through TikTok's API |
| Remote delete | No | Not available through TikTok's API |
| Analytics | Yes | Views, likes, comments, shares |
What You Can't Do
These features are not available through TikTok's API:
- Text-only posts (media is required)
- Threads, quotes, or reply chains
- Editing a published video or photo post
- Deleting a published post
- Stories
- Reading or replying to comments