Built on the TikTok Content Posting API

TikTok API: Post Videos Programmatically

The TikTok Content Posting API is TikTok's official endpoint for publishing video and photo content directly to authenticated creators' accounts, through two OAuth scopes: video.publish (Direct Post) and video.upload (upload to inbox).

This guide shows how to publish with it: the OAuth scopes, the init → transfer → status flow, and the real video specs. Plus a one-call REST alternative that handles the boilerplate for you.

Written by Luss, founder of Multi Upload Tool. Updated June 25, 2026.

4GB
max video size
10 min
max duration via API
6 / min
publish init rate limit
MP4·MOV·WebM
accepted formats

which tiktok api?

Which TikTok API do you need?

"TikTok API" is really five different products. To publish videos you want the Content Posting API, the one this page covers. Here is how they differ.

TikTok APIWhat it's forWho uses it
Content Posting APIthis pagePublish videos and photos to an authenticated creator's account (Direct Post, or upload to their inbox).Apps that post content on a creator's behalf.
API for Business (Marketing API)Create and manage ads, audiences and business-account analytics.Advertisers and ad-tech building TikTok ad campaigns.
Display APIRead-only: fetch a user's public profile and videos to show them elsewhere.Apps that embed or display TikTok content.
Research APIQuery public TikTok data (videos, comments, users) for analysis.Approved academic researchers (US / EU).
TikTok Shop APIManage products, orders and fulfilment for TikTok Shop.E-commerce sellers and Shop partners.

Is the TikTok API free?

Yes. TikTok's Content Posting API is free to use under TikTok for Developers, with no per-call or licensing fee. You pay only for your own hosting, transcoding and engineering. The unofficial third-party "TikTok API" resellers in search results are a separate, paid product.

Official vs unofficial

The "TikTok API" wrappers on GitHub or sold by resellers are unofficial. They reverse-engineer private endpoints and can break or breach TikTok's terms. This page uses the official, supported Content Posting API from TikTok for Developers.

How to get TikTok API access

  1. 1Register an app in the TikTok for Developers portal.
  2. 2Request the scopes you need: video.publish and/or video.upload.
  3. 3Pass TikTok's app audit to post publicly instead of SELF_ONLY.

Working in Python? Follow our guide to post to TikTok with Python. Not a developer? Use the no-code TikTok scheduler instead.

the official path

Post a video with the Content Posting API

TikTok's Content Posting API is a two-step flow. You initialize a post at /v2/post/publish/video/init/, TikTok transfers the file (it pulls from your URL, or you push chunks to an upload URL), then you poll status until it is live. Direct Post needs the video.publish scope.

Python: Direct Post (PULL_FROM_URL)
tiktok_direct_post.py
python
import requests

# OAuth 2.0 access token for the creator (scope: video.publish)
ACCESS_TOKEN = "act.example..."

# Step 1: initialize a Direct Post.
# PULL_FROM_URL: TikTok fetches the file from a domain you verified in the dev portal.
init = requests.post(
    "https://open.tiktokapis.com/v2/post/publish/video/init/",
    headers={
        "Authorization": f"Bearer {ACCESS_TOKEN}",
        "Content-Type": "application/json; charset=UTF-8",
    },
    json={
        "post_info": {
            "title": "Posted with the Content Posting API #fyp",
            # Unaudited apps are forced to SELF_ONLY. Use PUBLIC_TO_EVERYONE
            # once your client passes TikTok's audit.
            "privacy_level": "SELF_ONLY",
            "disable_comment": False,
            "disable_duet": False,
            "disable_stitch": False,
        },
        "source_info": {
            "source": "PULL_FROM_URL",
            "video_url": "https://your-verified-domain.com/clip.mp4",
        },
    },
)
publish_id = init.json()["data"]["publish_id"]

# Step 2: poll until the post is published or fails.
status = requests.post(
    "https://open.tiktokapis.com/v2/post/publish/status/fetch/",
    headers={
        "Authorization": f"Bearer {ACCESS_TOKEN}",
        "Content-Type": "application/json; charset=UTF-8",
    },
    json={"publish_id": publish_id},
)
print(status.json())  # {"data": {"status": "PUBLISH_COMPLETE", ...}}
curl: FILE_UPLOAD init
init_file_upload.sh
bash
# FILE_UPLOAD: send the bytes yourself instead of a URL.
# The response returns an upload_url to PUT chunks to.
curl -X POST 'https://open.tiktokapis.com/v2/post/publish/video/init/' \
  -H 'Authorization: Bearer {access_token}' \
  -H 'Content-Type: application/json; charset=UTF-8' \
  -d '{
    "post_info": { "title": "demo", "privacy_level": "SELF_ONLY" },
    "source_info": {
      "source": "FILE_UPLOAD",
      "video_size": 4612443,
      "chunk_size": 4612443,
      "total_chunk_count": 1
    }
  }'
# Chunk rules: 5MB-64MB per chunk (final up to 128MB), <=1000 chunks.
# A file under 5MB must be sent as one chunk.

Source: TikTok for Developers, Direct Post reference · Media transfer guide.

scopes & approval

What you need before you can post publicly

The API is free, but TikTok gates it. You register a developer app, request the right scopes, and pass an app audit. Until that audit clears, every post your app makes is forced to private. These are the real constraints. Plan for them.

!

Unaudited apps: posts are forced to SELF_ONLY (private)

Pass TikTok's app audit to unlock PUBLIC_TO_EVERYONE and the other privacy levels.

!

Two scopes for two flows

video.publish for Direct Post; video.upload to drop the file into the creator's inbox.

!

PULL_FROM_URL needs a verified domain

Add and verify your Domain / URL Prefix property in the developer portal first.

!

OAuth tokens expire and must be refreshed

Store the refresh token and renew before the access token lapses, per creator.

!

6 requests / minute per access token on init

Queue and back off on 429s when you publish across many creators.

video.publish: Direct Post

Publishes straight to the connected creator's profile. The init endpoint is /v2/post/publish/video/init/.

video.upload: Upload to inbox

Sends the file to the creator's TikTok inbox via /v2/post/publish/inbox/video/init/ so they finish posting in-app.

Audit gate

Unaudited clients can only post SELF_ONLY content. Public privacy unlocks after TikTok approves your app.

Official API, not automation

Direct calls to TikTok's open API: no screen scraping, no headless browser, no ToS grey area.

the shortcut

Or skip the app audit, OAuth and chunking

Don't want to run the developer app, verify a domain, manage refresh tokens and chunked uploads yourself? Connect a TikTok account once in our dashboard, then post with a single multipart request. Same TikTok fields (privacy_level, disable_duet, disable_stitch), minus the plumbing.

  • OAuth, token refresh and domain verification handled for you
  • Upload any format, transcoded to TikTok's spec server-side
  • Schedule posts, or fan one video out to several platforms
  • Authenticate with a single x-api-key header

Prefer an SDK? Install the official pip install multi-upload-tool (Python) or npm install multi-upload-tool (Node), or read the full API & SDK reference.

post_to_tiktok.sh
bash
# Our API wraps the flow above: OAuth, domain verification and chunked
# uploads are handled for you. Authenticate with an x-api-key header.
curl -X POST 'https://api.multi-upload-tool.com/api/bulk' \
  -H 'x-api-key: YOUR_API_KEY' \
  -F 'accounts=12' \
  -F 'video=@clip.mp4' \
  -F 'title=My TikTok video #fyp' \
  -F 'privacy_level=PUBLIC_TO_EVERYONE' \
  -F 'disable_duet=false' \
  -F 'disable_stitch=false' \
  -F 'schedule_date=2026-07-01T18:00:00Z'

# Pass several account IDs (accounts=12,34,56) to post the same
# video to TikTok, Instagram and YouTube in one request.

post_info & source_info

TikTok posting fields

The fields TikTok's Content Posting API accepts on a video post. Our API takes the same names.

fieldtypedescription
title
stringCaption shown on the post. Supports hashtags, mentions and emoji.
privacy_level
enumPUBLIC_TO_EVERYONE · MUTUAL_FOLLOW_FRIENDS · FOLLOWER_OF_CREATOR · SELF_ONLY
disable_comment
booleanTurn off comments for this post.
disable_duet
booleanDisable Duet for this video.
disable_stitch
booleanDisable Stitch for this video.
video_cover_timestamp_ms
int32Frame (in ms) used as the video cover.
brand_content_toggle
booleanDisclose a paid partnership / branded content.
brand_organic_toggle
booleanDisclose the creator's own brand / promotion.
is_aigc
booleanLabel the video as AI-generated content (AIGC).
source
enumPULL_FROM_URL (TikTok fetches from your verified URL) · FILE_UPLOAD (you PUT chunks).

Official init endpoint: https://open.tiktokapis.com/v2/post/publish/video/init/ · Auth: Authorization: Bearer {token}

who uses it

Who posts to TikTok via API?

SaaS tools adding TikTok publishing

Offer your users TikTok posting without each of them touching the developer portal. You handle one app audit; they connect via OAuth.

Agencies managing client accounts

Connect many creator accounts and publish on their behalf. Mind the per-token rate limit and queue your jobs.

E-commerce & CMS automations

Trigger a TikTok post when a product drops or a CMS entry publishes. Pull the video straight from your verified asset URL.

Content repurposing pipelines

Clip long-form video and push the vertical cut to TikTok automatically: one pipeline, continuous output.

Prefer no code at all? Use the TikTok scheduler dashboard instead: same publishing, point and click.

FAQ

TikTok API: common questions

Does TikTok have an official API for posting videos?

Yes. TikTok's Content Posting API lets approved apps publish video (and photo) content for authenticated creators. There are two flows: Direct Post (OAuth scope video.publish) publishes straight to the creator's profile, and Upload (scope video.upload) sends the file to the creator's TikTok inbox so they finish posting in the app. Both start at the init endpoint https://open.tiktokapis.com/v2/post/publish/video/init/.

Is the TikTok Content Posting API free?

TikTok does not charge a fee for the Content Posting API itself. It is part of the free TikTok for Developers program. You still pay for your own hosting, video transcoding and engineering time, and you must pass TikTok's app review before you can post publicly. (The unofficial third-party 'TikTok API' resellers that show up in search are a separate, paid thing.)

Which TikTok API do I need?

It depends on the job. Use the Content Posting API to publish videos or photos to a creator's account; the API for Business (Marketing API) to run ads and pull business analytics; the Display API to read and show a user's public TikTok content; the Research API to query public data for academic study; and the TikTok Shop API to manage products and orders. To post content, you want the Content Posting API.

How much does the TikTok API cost?

TikTok's developer APIs, including the Content Posting API, are free to use under TikTok for Developers. There is no per-call or licensing fee. You pay only for your own hosting, video transcoding and engineering. The unofficial third-party 'TikTok API' resellers (TikAPI and similar) that appear in search are a separate, paid product and are not affiliated with TikTok.

How do I get a TikTok API key and access?

Register an app in the TikTok for Developers portal, then request the scopes you need: video.publish and/or video.upload for posting. TikTok issues a client key and client secret, which you exchange for per-creator OAuth 2.0 access tokens. To post publicly instead of SELF_ONLY, submit your app for TikTok's audit and wait for approval.

Is there an official TikTok API, or only unofficial wrappers?

There is an official one. TikTok provides supported APIs through TikTok for Developers, including the Content Posting API used here. The 'TikTok API' libraries you find on GitHub or buy from third-party resellers are unofficial. They reverse-engineer private endpoints, can break without notice, and may violate TikTok's terms. For publishing, use the official Content Posting API.

What OAuth scopes do I need to post to TikTok?

video.publish for Direct Post (publish straight to the profile) and video.upload for the Upload-to-inbox flow. You request and get these scopes approved in the TikTok for Developers portal, then ask for them in the OAuth 2.0 authorization request when a creator connects their account.

Why are my API posts stuck as private / SELF_ONLY?

Until your client passes TikTok's app audit, the Content Posting API restricts all content to private (SELF_ONLY) viewing. That is expected for unaudited apps. Once your audit is approved you can use PUBLIC_TO_EVERYONE, FOLLOWER_OF_CREATOR and the other privacy levels.

Do I send the video as a URL or upload the file?

Two source modes. PULL_FROM_URL: TikTok downloads the video from a URL on a domain you have verified in the developer portal. No bytes leave your server. FILE_UPLOAD: you PUT the file to the upload_url returned by init, in chunks of 5MB-64MB (the final chunk can be up to 128MB), with at most 1,000 chunks; a file under 5MB must be sent as a single chunk.

What video formats and limits does the TikTok API accept?

The Content Posting API accepts video/mp4, video/quicktime (MOV) and video/webm, up to 4GB and up to 10 minutes long (the exact maximum duration depends on the creator's account). Vertical 9:16 is recommended for the For You feed.

Can I post to TikTok with Python?

Yes. Authenticate the creator with OAuth 2.0 (scope video.publish), then POST your post_info and source_info to /v2/post/publish/video/init/ with the requests library. See the working example above. Watch the rate limit: each user access token is capped at 6 requests per minute on the publish init endpoint.

What is the TikTok Content Posting API rate limit?

TikTok limits each user access token to 6 requests per minute on the publish init endpoint. If you publish at volume across many creators, queue your requests and back off on 429 responses. Our API does this for you.

Start posting to TikTok via API

Free Starter plan, no credit card. Connect a TikTok account and publish your first video in minutes. We handle the OAuth, audit-aware privacy and chunked uploads.

See also: Python TikTok tutorial · Full Social Media API