How to Post to TikTok via API (2026 Guide)


TikTok's Content Posting API lets you upload and publish videos programmatically. On paper, that sounds simple. In practice, it is one of the most restrictive social media APIs available — strict app review, a two-step chunked upload flow, no native scheduling, and rate limits that can stall a production pipeline.
This guide walks through both options for posting to TikTok via API: the native Content Posting API and PostEverywhere's unified social media scheduling API. You will get working code examples, a clear picture of the approval process, and an honest comparison so you can pick the right path for your project.
Table of Contents
- Why TikTok's API Is Different
- Option 1: TikTok Content Posting API (Native)
- Option 2: PostEverywhere API
- Side-by-Side Comparison
- TikTok API Approval Process
- Rate Limits and Quotas
- Common Pitfalls
- FAQs
Why TikTok's API Is Different
Most social platforms — Instagram, LinkedIn, Facebook — let you publish content through a relatively straightforward API call. You authenticate, send a POST request with your media and caption, and the platform publishes it.
TikTok does not work that way. The Content Posting API is intentionally locked down:
- Video only. No photo carousels, no text posts through the API. If you need to post images, you are out of luck unless you convert them to video first.
- Two-step upload. You first initialise an upload to get a URL, then send your video in chunks, then trigger the publish. Three round trips minimum.
- No scheduling. The API publishes immediately or creates a draft. There is no
scheduled_publish_timeparameter — that is a feature TikTok reserves for its own creator tools. - Strict app review. Every app that wants Content Posting access must go through TikTok's manual review. This takes days to weeks.
- Privacy settings are mandatory. Every publish request must include a privacy level, disclosure settings for branded content, and comment control preferences.
If you are building a tool that posts to multiple platforms, TikTok is the one that will slow you down the most.
Option 1: TikTok Content Posting API (Native)
Prerequisites
Before you write a single line of code, you need:
- A TikTok Developer account — Register at developers.tiktok.com.
- An approved app with Content Posting scope — Create an app and request the
video.publishandvideo.uploadscopes. This triggers a manual review. - OAuth 2.0 tokens — TikTok uses the authorization code flow. Your user must grant permission through TikTok's consent screen. Tokens expire after 24 hours; refresh tokens last 365 days.
Authentication Flow
TikTok uses a standard OAuth 2.0 authorization code grant:
- Redirect the user to
https://www.tiktok.com/v2/auth/authorize/with yourclient_key,scope, andredirect_uri. - The user approves your app. TikTok redirects back to your URI with a
codeparameter. - Exchange the code for an access token by calling
https://open.tiktokapis.com/v2/oauth/token/.
The access token is what you include in every subsequent API call. Store it securely — and build token refresh logic from day one. If your access token expires mid-upload, the whole operation fails.
Step 1: Initialise the Upload
The first call tells TikTok you want to upload a video. You specify the file size and how you want to upload (chunked or direct from URL):
curl -X POST 'https://open.tiktokapis.com/v2/post/publish/inbox/video/init/' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Content-Type: application/json; charset=UTF-8' \
-d '{
"source_info": {
"source": "FILE_UPLOAD",
"video_size": 52428800,
"chunk_size": 10485760,
"total_chunk_count": 5
}
}'
TikTok responds with a publish_id and an upload_url. You will need both.
Step 2: Upload Video Chunks
Split your video into chunks of the size you specified, then upload each one sequentially:
curl -X PUT 'UPLOAD_URL_FROM_STEP_1' \
-H 'Content-Range: bytes 0-10485759/52428800' \
-H 'Content-Type: video/mp4' \
--data-binary @chunk_001.mp4
Repeat for each chunk, incrementing the Content-Range header. If any chunk fails, you need to retry that specific chunk — TikTok does not support resumable uploads across sessions.
Step 3: Publish the Video
Once all chunks are uploaded, trigger the actual publish:
curl -X POST 'https://open.tiktokapis.com/v2/post/publish/video/init/' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Content-Type: application/json; charset=UTF-8' \
-d '{
"post_info": {
"title": "Your video caption goes here #hashtag",
"privacy_level": "PUBLIC_TO_EVERYONE",
"disable_duet": false,
"disable_comment": false,
"disable_stitch": false,
"video_cover_timestamp_ms": 1000
},
"source_info": {
"source": "FILE_UPLOAD",
"video_size": 52428800,
"chunk_size": 10485760,
"total_chunk_count": 5
}
}'
The privacy_level field is required. Your options are PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, or SELF_ONLY. If you omit it, the request fails.
What You Cannot Do with the Native API
- Schedule posts for a future time. There is no scheduling parameter. You either publish now or create a draft.
- Post photos or carousels. The Content Posting API is video-only.
- Post to multiple accounts in one call. Each request targets a single authenticated user.
- Edit after publishing. Once published, you cannot update the caption, privacy settings, or cover image through the API.
If you need TikTok scheduling, you will need to build a queue on your side and trigger publishes at the right time — or use a tool that handles it for you.
Option 2: PostEverywhere API
PostEverywhere's developer API wraps TikTok's Content Posting API (and seven other platforms) behind a single endpoint. You do not deal with chunked uploads, token refresh, or privacy setting requirements — the API handles all of that internally.
One Request to Publish
curl -X POST https://api.posteverywhere.com/v1/posts \
-H "Authorization: Bearer YOUR_PE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"platforms": ["tiktok"],
"content": "Your video caption goes here #hashtag",
"media_url": "https://your-cdn.com/video.mp4",
"publish_at": "2026-04-15T14:00:00Z"
}'
Five lines. No chunked uploads, no privacy level boilerplate, no separate initialise-and-publish steps.
What This Gives You Over the Native API
- Scheduling. Set
publish_atto any future time. PostEverywhere queues the video and publishes it when the time comes. TikTok's native API does not support this at all. - Multi-platform publishing. Change
"platforms": ["tiktok"]to"platforms": ["tiktok", "instagram", "youtube"]and post the same video everywhere from one request. - Automatic chunked uploads. Pass a
media_urland PostEverywhere handles the download, chunking, and upload to TikTok's servers. - Token management. Connect TikTok accounts once through PostEverywhere's OAuth flow. The API handles token refresh automatically.
- Webhook callbacks. Get notified when your post publishes successfully or fails, so you can build reliable workflows without polling.
Building a TikTok integration? PostEverywhere's developer API handles chunked uploads, token refresh, and scheduling — so you can ship in hours instead of weeks. Get your API key →
Scheduling a TikTok Post
The native TikTok API has no scheduling. With PostEverywhere, you add a single field:
curl -X POST https://api.posteverywhere.com/v1/posts \
-H "Authorization: Bearer YOUR_PE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"platforms": ["tiktok"],
"content": "Scheduled TikTok video #automation",
"media_url": "https://your-cdn.com/video.mp4",
"publish_at": "2026-04-20T18:30:00Z"
}'
The API returns a post_id you can use to check status, reschedule, or cancel before it publishes. If you are already scheduling TikToks through the PostEverywhere dashboard, the API works the same way — just programmatic.
Side-by-Side Comparison
| Feature | TikTok Native API | PostEverywhere API |
|---|---|---|
| Authentication | OAuth 2.0 per user, 24h token expiry | API key, tokens managed internally |
| Upload flow | Chunked upload (3+ API calls) | Single request with media_url |
| Scheduling | Not supported | publish_at parameter |
| Multi-platform | TikTok only | 8 platforms in one request |
| App review required | Yes (days to weeks) | No — connect accounts via OAuth |
| Privacy settings | Required in every request | Handled automatically |
| Rate limits | Varies by scope and approval tier | Included with plan |
| Webhook callbacks | Polling only | Native webhook support |
| Photo/carousel posts | Not supported | Supported (platform-dependent) |
| Cost | Free (after approval) | Starts at $19/mo |
If you need full control over TikTok's API and you are only posting to TikTok, the native API is free and capable. If you are building a product that publishes to multiple platforms, or you need scheduling, or you want to skip the approval process, PostEverywhere's API is the faster path. Check the full API documentation for endpoint details.
TikTok API Approval Process
This is the part that catches most developers off guard. You cannot just create a TikTok app and start posting. Here is what the approval process actually looks like:
Step 1: Create a Developer Account
Go to developers.tiktok.com and register. This is instant — no approval needed for the account itself.
Step 2: Create an App
In the developer portal, create a new app. You will need to specify:
- App name and description
- Platform (web, iOS, Android)
- Redirect URIs for OAuth
- Which scopes you need (select
video.publishandvideo.uploadfor posting)
Step 3: Submit for Review
Once you request the Content Posting scopes, your app enters TikTok's manual review queue. You will need to provide:
- A demo video or screenshots showing how your app uses the API
- A privacy policy URL — TikTok requires this for all apps
- A terms of service URL
- A detailed description of your use case — vague descriptions get rejected
How Long Does Approval Take?
Based on developer reports and TikTok's own documentation:
- Best case: 3-5 business days
- Typical: 1-2 weeks
- If you get rejected and resubmit: Add another 1-2 weeks per round
TikTok does not offer an expedited review track. There is no way to pay for faster approval.
Common Rejection Reasons
- Vague use case description. "Social media management tool" is not specific enough. Explain exactly which users will post, how often, and why they need API access.
- Missing privacy policy. A placeholder page will not pass review. You need a real privacy policy that mentions TikTok data handling.
- Requesting unnecessary scopes. Only request the scopes you actually need. Requesting
user.info.basicalongsidevideo.publishwhen you do not use profile data raises flags. - No demo. TikTok wants to see your app working (even with mock data). A Loom video walkthrough is usually enough.
- Branded content without disclosure. If your app posts sponsored content, you need to show how you handle TikTok's branded content disclosure requirements.
Sandbox Mode
While your app is in review, you can use TikTok's sandbox environment for testing. Sandbox mode lets you make API calls against test accounts, but posts are never actually published. This is useful for building your integration while you wait for approval.
Rate Limits and Quotas
TikTok's API rate limits depend on your app's approval tier and the specific endpoint:
- Content Posting: Most apps are limited to publishing a certain number of videos per day per user. TikTok does not publish exact numbers publicly — they are assigned during the review process based on your stated use case.
- Token endpoints: Standard OAuth rate limits apply. Do not call the token refresh endpoint in a tight loop.
- Upload endpoints: Large file uploads consume bandwidth quotas. TikTok may throttle uploads if you are sending many large videos in rapid succession.
The practical limits for most approved apps:
- A handful of video publishes per user per day is typical for newly approved apps
- Higher limits are available but require justification during review
- Exceeding limits returns a
429 Too Many Requestsresponse with aretry-afterheader
With PostEverywhere's API, rate limits are managed at the platform level. The API queues requests and distributes them within safe limits so you do not need to build backoff logic yourself. See the API docs for specifics on request quotas per plan.
Common Pitfalls
After working with TikTok's API and hearing from developers building integrations, these are the issues that come up most:
1. Forgetting Privacy Settings
Every publish request must include privacy_level. There is no default. If you omit it, the API returns an error. This is unlike most social APIs where content defaults to public.
2. Token Expiry Mid-Upload
TikTok access tokens expire after 24 hours. If you initialise an upload, wait, then try to publish chunks the next day, the token is dead. Build token refresh into your upload pipeline — not just your authentication flow.
3. Video Format Requirements
TikTok is strict about video specs:
- Format: MP4 or WebM
- Max file size: 4 GB
- Max duration: 10 minutes for most accounts (60 minutes for some)
- Min resolution: 720p recommended, 360p minimum
- Aspect ratio: 9:16 (vertical) performs best, but 16:9 and 1:1 are accepted
If your video does not meet these requirements, the upload succeeds but the publish fails — with an unhelpful error message.
4. No Edit After Publish
Once a video is published through the API, you cannot update the caption, change the cover image, or modify privacy settings. If something is wrong, your only option is to delete and re-upload. Build a preview/confirmation step into your workflow.
5. Chunk Upload Ordering
Chunks must be uploaded in order, and each chunk must complete before the next one starts. Parallel chunk uploads are not supported. If you are uploading a large video, this means the upload step is inherently sequential and can be slow on high-latency connections.
6. Branded Content Disclosure
If the video is a paid partnership or sponsored content, you must set the brand_content_toggle and brand_organic_toggle fields in your publish request. Failing to disclose branded content violates TikTok's policies and can get your app's API access revoked.
Skip the complexity. PostEverywhere's API handles TikTok's chunked uploads, privacy defaults, and token refresh behind a single endpoint. Start your 7-day free trial — no credit card required.
7. Webhook vs. Polling for Status
TikTok's API does not push publish status to you. After triggering a publish, you need to poll the status endpoint to know if the video went live, failed processing, or is still in review. Build polling with exponential backoff — checking every second will hit rate limits fast.
FAQs
Can I schedule TikTok posts through the API?
Not through TikTok's native Content Posting API. There is no scheduled_publish_time parameter — you can only publish immediately or save as a draft. To schedule, you need to build your own queue and trigger publishes at the right time, or use a third-party API like PostEverywhere that supports scheduling natively.
How long does TikTok API approval take?
Typically 1-2 weeks for the initial review. If your app gets rejected, each resubmission adds another 1-2 weeks. The fastest approvals (3-5 business days) go to apps with clear use cases, complete documentation, and a working demo.
Can I post photos or carousels to TikTok via API?
No. TikTok's Content Posting API only supports video uploads. If you need to post photo carousels (which TikTok supports in the app), there is currently no API endpoint for that. This is a known limitation that TikTok has not addressed publicly.
What happens if my TikTok access token expires?
The access token expires after 24 hours. Use the refresh token (valid for 365 days) to get a new access token. If the refresh token also expires, the user must re-authorize your app through the OAuth flow. Always implement proactive token refresh — do not wait for a 401 error.
Can I post to multiple TikTok accounts with one API app?
Yes, but each account must independently authorize your app through the OAuth consent screen. Each account gets its own access token and refresh token. There is no admin or agency-level token that covers multiple accounts.
Is the TikTok API free?
Yes, there is no cost for using TikTok's Content Posting API once your app is approved. The cost is developer time — building and maintaining the integration, handling token management, chunked uploads, and error recovery. If you value shipping speed, a unified API that abstracts the complexity can be worth the subscription cost.
What are the video size and duration limits?
Maximum file size is 4 GB. Maximum duration is 10 minutes for most accounts, though some creator accounts can upload up to 60 minutes. Minimum recommended resolution is 720p. Supported formats are MP4 and WebM.
How do I handle TikTok API errors?
TikTok returns standard HTTP status codes with JSON error bodies. Common errors include invalid_token (refresh your token), rate_limit_exceeded (back off and retry), and video_processing_failed (check your video format). Always log the full error response — TikTok's error messages are sometimes vague, and having the raw response helps when debugging.
Wrap Up
TikTok's Content Posting API works. It is also the most involved social media publishing API you will integrate with. The chunked upload flow, mandatory privacy settings, token management, and manual app review process add up to real engineering time — especially if TikTok is just one of several platforms you need to support.
If you are building a TikTok-only tool and you want full control, the native API is the right choice. Learn the quirks, build robust error handling, and budget time for the approval process.
If you are building something that posts to TikTok alongside Instagram, LinkedIn, YouTube, or other platforms — or you need scheduling, which TikTok's API simply does not offer — PostEverywhere's developer API handles the complexity so you can focus on your product.
Either way, you now have everything you need to get started. Pick the option that fits your use case and build something worth posting.

Founder & CEO of PostEverywhere. Writing about social media strategy, publishing workflows, and analytics that help brands grow faster.