TikTok

TikTok is a video-led publishing surface with a small number of important platform-specific controls. UniPost keeps those under `platform_options.tiktok` while preserving a consistent top-level request shape.

Single video or photo carousel publishing with privacy controls.
TikTok account requirementWhite-label/public-use requirement: your TikTok app must pass audit before posting to non-allowlisted accounts. Sandbox apps are limited to allowlisted accounts.

At a glance

Publishing
Supported
Scheduling
Supported
Analytics
Limited
Inbox
Not supported
Connection
OAuth — Quickstart and White-label both supported

Feature matrix

FeatureSupportNotes
Video postsSingle video
Photo carouselUp to 35 images
SchedulingUse scheduled_at
Privacy optionsUse platform_options.tiktok
AnalyticsPartialPost engagement + view count require TikTok analytics scopes. Production OAuth does not request those scopes until TikTok approves them.
Text-only postsXTikTok is media-first
ThreadsXNot applicable
Inbox / commentsXNot part of the UniPost inbox today

Known constraints

LimitationWhy
Daily safety cap50 publishes/day per connected TikTok account (UTC reset). Failed posts do not count toward the cap.
Audit required for public useTikTok Content Posting API apps must pass audit before posting to non-allowlisted accounts
Analytics scopes are not defaultProduction OAuth currently requests only video.publish, video.upload, and user.info.basic. user.info.profile, user.info.stats, and video.list stay behind TIKTOK_ANALYTICS_SCOPES_ENABLED until TikTok approves them.
No text-only postsTikTok is strictly media-led
Inbox is not supportedComments and DMs are not in UniPost inbox today

Publishing

Ready to publish?Use the shared Publishing guide for hosted URLs, local file uploads, preflight validation, and async publish status. Then use the TikTok examples below for platform-specific payload shape.

Publish examples by surface

Each example calls POST/v1/posts with Bearer auth. Swap the account_ids for your own, then copy the snippet for your language.

Video post

Media & field requirements

FieldRequiredLimitsNotes
media_urls or media_idsRequired1 video OR up to 35 imagesUse media_urls for hosted assets or media_ids for local files uploaded via POST/v1/media. This is the primary publish surface.
captionOptional2,200 charsPair with media
platform_options.tiktok.privacy_levelOptionalprivacy enumControls audience visibility
platform_options.tiktok.upload_modeOptionalpull_from_url / file_uploadUse file_upload if CDN domain is not registered

Hosted URLs: pass the public URL in media_urls. Local files: reserve an upload with POST/v1/media, PUT the bytes to the returned upload_url, then publish with media_ids. Full flow in the Publishing guide.

Media specifications

Per-surface limits for text, images, and video. These are the source of truth UniPost uses for preflight validation and media optimization — treat hard-limit values as enforced and "recommended" values as platform guidance.

Video

TikTok's primary surface. One video per publish; captions and hashtags both count against the caption budget.

TypeRequirementValue
TextCaption2,200 chars (hashtags + mentions count)
TextHashtagsIncluded in caption budget; ≤ 100 total
VideoFormatsMP4, MOV, WebM
VideoMax per post1
VideoMax file size4 GB
VideoDuration3 sec – 10 min (Content Posting API ceiling)
VideoAspect ratio9:16 recommended; 1:1 and 16:9 accepted but under-distributed
VideoDimensionsMin 720 × 1,280 px; 1,080 × 1,920 recommended
VideoFrame rate23 – 60 fps (30 fps recommended)
VideoCodecH.264 or H.265 (HEVC)
VideoAudioAAC stereo

Image-only post with its own title and description fields. No video allowed.

TypeRequirementValue
TextTitle90 chars (auto-truncated in-app; hashtags stripped)
TextDescription4,000 chars
ImageFormatsJPEG, WebP
ImageMax per post35 images
ImageMax file size20 MB per image
ImageAspect ratio9:16 recommended
ImageDimensionsAuto-resized to 1,080 × 1,920 px
ImageCover selectionplatform_options.tiktok.photo_cover_index picks the cover

Platform-specific options

OptionValuesNotes
platform_options.tiktok.privacy_levelSELF_ONLY / PUBLIC_TO_EVERYONE / MUTUAL_FOLLOW_FRIENDS / FOLLOWER_OF_CREATORAudience visibility
platform_options.tiktok.photo_cover_index0-based numberWhich image becomes the carousel cover

Analytics

MetricSupportNotes
Video viewsPartialRequires video.list; this scope is not requested in production until TikTok approves it
LikesPartialRequires video.list; this scope is not requested in production until TikTok approves it
CommentsPartialRequires video.list; this scope is not requested in production until TikTok approves it
SharesPartialRequires video.list; this scope is not requested in production until TikTok approves it
ImpressionsXTikTok exposes views, not display impressions
ReachXNot exposed by TikTok
SavesXNot exposed by TikTok

Connection modes

Pick the setup that matches how the account is owned. Quickstart is fastest when you publish to your own accounts; White-label is required when your customers bring their own accounts through a branded flow. Full setup details in Quickstart and White-label.

ModeBest forApp / credentialsAvailability
QuickstartFast setup — UniPost handles OAuthUniPost-managed appFree / paid quota
White-labelYour customers connect their own accountsYour OAuth appPaid plans only

White-label/public-use requirement: your TikTok app must pass audit before posting to non-allowlisted accounts. Sandbox apps are limited to allowlisted accounts.

Validation errors

CodeWhat it means
media_requiredTikTok requires video or image carousel media
mixed_media_unsupportedDo not mix image and video in one publish body
invalid_upload_modeTikTok upload mode is not recognized

Next steps