TikTok API in 2026: Access, Keys, Limits and Posting
The TikTok API in 2026: which API you need, how to get a client key, whether it is free, token lifetimes, audit rules and the posting limits that matter.
The TikTok API is a family of APIs on TikTok for Developers: Login Kit for sign-in, Display API to read a user's own videos, Content Posting API to publish, and Research and Commercial Content APIs for approved researchers. You get a client key and secret by registering an app, adding products and scopes, and passing app review. There is no price list.
"The TikTok API" is really several APIs that share one developer portal, one OAuth system and one host, open.tiktokapis.com. Which one you need depends on the job: letting people log in, showing their videos on your site, posting on their behalf, or pulling public data for research. Each has its own scopes, its own review and its own limits, and most of the confusion in forum threads comes from mixing them up.
This guide covers the TikTok API as it stands in November 2026, from the developer side. It explains which API does what, whether it costs anything and how to get a client key. Then it covers how tokens work after TikTok's latest documentation change, and the limits that decide whether a posting integration survives contact with real users. TikTok is one of the networks in our guide to every social platform with a posting API, and the one where the gap between "the call works" and "the post is public" is widest.
PostGate handles OAuth, publishing and delivery evidence for every network through one API. Start free or read the docs.
What is the TikTok API, and which one do you need?
TikTok for Developers lists its products on the products page. For most developers the choice comes down to the rows below. Ads are a separate world: campaign management lives on the TikTok API for Business portal at business-api.tiktok.com, with its own accounts and credentials.
| API | What it does | Who can use it |
|---|---|---|
| Login Kit | OAuth sign-in with a TikTok account. Every user-facing API below starts here. | Any registered app; user.info.basic is added by default. |
| Display API | Read the authorizing user's profile and their own videos (/v2/user/info/, /v2/video/list/, /v2/video/query/). | Any approved app, only for users who authorize it. |
| Content Posting API | Publish videos and photo posts directly, or send them to the creator's inbox as drafts. | Approved apps. Public posting needs an extra audit. |
| Share Kit | Hand content from a mobile app to the TikTok app, where the user finishes the post. | iOS and Android apps. |
| Research API | Query public videos, comments and accounts with SQL-like filters. | Independent and academic researchers working on a non-profit basis, after an application. |
| Commercial Content API | Query ads and advertiser data shown on TikTok. | Approved research projects. |
| Data Portability API | Request exports of a user's own TikTok data on their behalf. | Only for TikTok users in the EEA and the UK. |
Two consequences follow from that table. First, there is no general-purpose API for reading other people's TikTok videos in a commercial product: the Display API only returns data for users who logged in to your app, and the Research API is for vetted, non-commercial research. Second, if you want to post, you need Login Kit plus the Content Posting API, and the hard part is the audit, not the endpoint.
Is the TikTok API free?
TikTok for Developers does not publish a price list for Login Kit, the Display API or the Content Posting API, and nothing in its app registration guide involves billing. What you spend is time. Every app goes through review before its integrations go live, posting apps go through a second audit before their posts can be public, and the Research and Commercial Content APIs only open after an application is approved.
That is a different model from X, which bills API usage, or LinkedIn, which puts Company Page posting behind a partner program (see LinkedIn API pricing and access tiers). The practical cost of the TikTok API is the review queue and the caps that apply while you wait, which the rest of this guide spells out.
How do you get a TikTok API key?
TikTok does not issue a single "API key". Each app gets a client key and a client secret, shown in the Credentials section of the app page. Per TikTok's app registration guide, the path from zero to a live app looks like this:
- Create a developer account, and ideally an organization so teammates share access to the app.
- Connect an app and fill in the basics: icon (1024 x 1024 px), name, category, description and the platforms it runs on (Web, Desktop, iOS, Android).
- Add products, such as Login Kit and Content Posting API, and set a redirect URI for Login Kit.
- Add the scopes you need.
user.info.basiccomes with Login Kit; posting needsvideo.publish(Direct Post) orvideo.upload(drafts). - Verify URL ownership for your Terms of Service, Privacy Policy and website URLs, and for any domain TikTok will pull media from.
- Submit for review with an explanation of how each product and scope is used and at least one demo video of the full flow (up to five videos, 50 MB each).
You don't have to wait for review to start building. The sandbox lets you create up to five test configurations and add up to ten TikTok accounts you own as target users. Sandbox mode does not cover public posting through the Content Posting API, so plan to test with private posts until the app is live and audited.
Treat the client secret like a password. TikTok's content sharing guidelines say it must never be shared with third parties or embedded in open-source projects, and every token call should run on your server, not in a browser or mobile client.
How does TikTok API authentication work?
User-facing APIs use OAuth 2.0 through Login Kit. You send the user to TikTok's authorization page with your client key, the scopes and a redirect URI. TikTok sends a code back to that URI, and your server exchanges it for tokens:
# 1. Send the user to TikTok's consent page (Login Kit for Web)
https://www.tiktok.com/v2/auth/authorize/
?client_key=$CLIENT_KEY
&response_type=code
&scope=user.info.basic,video.publish
&redirect_uri=https://yourapp.com/callback
&state=$RANDOM_STATE
# 2. Your callback receives ?code=... and your server exchanges it
curl -X POST https://open.tiktokapis.com/v2/oauth/token/ \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_key=$CLIENT_KEY" \
-d "client_secret=$CLIENT_SECRET" \
-d "code=$CODE" \
-d "grant_type=authorization_code" \
-d "redirect_uri=https://yourapp.com/callback"
# -> access_token (expires_in), refresh_token (refresh_expires_in), open_id, scopeThe token lifetimes are where older tutorials go wrong. TikTok's token management page, last updated on November 2, 2026, lists an access token lifetime of 2 hours and a refresh token lifetime of 180 days. Earlier versions of the same page said 24 hours and 365 days, which is what most tutorials still repeat, so code with those numbers hardcoded will try to use expired tokens. Refreshing returns a new refresh token every time, and if you keep using the old one, later refreshes fail and the user has to authorize your app again. So store access_token, refresh_token, open_id, scope and both expiry times per user, schedule refreshes from expires_in instead of hardcoding a number, and write the rotated refresh token back in the same transaction.
Mobile and desktop apps add a PKCE code_verifier to the exchange. The Research and Commercial Content APIs work differently: they use a client access token tied to your approved project, with no user in the loop.
How do you post to TikTok with the API?
The Content Posting API has two modes. Direct Post (video.publish) publishes straight to the creator's profile. Upload (video.upload) sends the video or photos to the creator's TikTok inbox, and they finish editing and posting in the app. A Direct Post takes three calls, per the Direct Post quick start:
# 1. Ask TikTok what this creator is allowed to post
curl -X POST https://open.tiktokapis.com/v2/post/publish/creator_info/query/ \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json; charset=UTF-8"
# -> privacy_level_options, comment/duet/stitch flags, max_video_post_duration_sec
# 2. Start a Direct Post, letting TikTok pull the file from your verified domain
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": "Launch day #buildinpublic",
"privacy_level": "PUBLIC_TO_EVERYONE",
"disable_comment": false,
"disable_duet": false,
"disable_stitch": false
},
"source_info": {
"source": "PULL_FROM_URL",
"video_url": "https://media.yourapp.com/videos/launch.mp4"
}
}'
# -> { "data": { "publish_id": "v_pub_url~v2..." } }
# 3. Poll until TikTok finishes processing
curl -X POST https://open.tiktokapis.com/v2/post/publish/status/fetch/ \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json; charset=UTF-8" \
-d '{"publish_id": "v_pub_url~v2..."}'The creator info call is not optional ceremony. Its response tells you which privacy levels this creator can pick, whether comments, Duets or Stitches are disabled in their settings, and the maximum video length, and TikTok expects your interface to reflect all of it.
For the media itself you choose a source. PULL_FROM_URL lets TikTok download the file, but only from a domain or URL prefix you verified in the app settings, and the URL has to stay reachable for up to an hour. FILE_UPLOAD returns an upload_url that you send the bytes to with PUT. The media transfer guide sets the chunk rules: each chunk between 5 MB and 64 MB, the last one up to 128 MB, at most 1,000 chunks, uploaded in order, and files under 5 MB sent whole. TikTok's own guidelines tell you to use PULL_FROM_URL whenever the file already sits on your servers.
Photo posts use a different endpoint, /v2/post/publish/content/init/, with media_type: PHOTO and a list of image URLs. Either way, the init call returns a publish_id and processing happens asynchronously, so a 200 on init only means TikTok accepted the job. Poll /v2/post/publish/status/fetch/ or subscribe to webhooks before you tell anyone the post is live.
What are the TikTok API limits?
TikTok's limits come in two kinds: request rate limits per endpoint, and posting caps per app and per creator. The posting caps are the ones that break products.
| Limit | Value | What you see when you hit it |
|---|---|---|
| Display API endpoints | 600 requests per minute each, sliding window | HTTP 429, rate_limit_exceeded |
| Post init (Direct Post and Upload) | 6 requests per minute per user access token | HTTP 429, rate_limit_exceeded |
| Unaudited app, users | Up to 5 users posting in a 24-hour window, all with private accounts | reached_active_user_cap, unaudited_client_can_only_post_to_private_accounts |
| Unaudited app, visibility | Posts are forced to SELF_ONLY | The post publishes, but only the creator can see it |
| Audited app, creators | A 24-hour active creator cap based on the usage you estimated in the audit form | reached_active_user_cap |
| Per creator, Direct Post | Typically around 15 posts per day, shared across every app using Direct Post | HTTP 403, spam_risk_too_many_posts |
| Per creator, Upload to inbox | At most 5 pending shares within 24 hours | HTTP 403, spam_risk_too_many_pending_share |
Sources: TikTok's rate limits page, the content sharing guidelines and the Direct Post and Upload API references. The per-creator ceiling is shared with every other tool the creator uses, so a creator who already posted through two schedulers today may hit it on your first request. Our social media API rate limits reference puts these numbers next to the other networks. If you are deciding whether to apply for the audit now or later, TikTok audited vs. unaudited clients walks through what changes and what stays the same.
What does TikTok require from a posting app before it passes audit?
Most audit rejections come from the interface, not the API calls. The content sharing guidelines describe the screen your users must see before a Direct Post. Use this as a checklist before you submit:
- Show the creator's nickname so they know which account receives the post.
- Let the user pick the privacy level from a dropdown built from
privacy_level_options, with no default value. - Show Allow Comment, Duet and Stitch toggles, all off by default, and grey out any the creator disabled in TikTok. Photo posts only get Allow Comment.
- Add a commercial content disclosure toggle, off by default, with "Your brand" and "Branded content" options and the labels TikTok specifies. Branded content cannot be private.
- Show the consent line before the publish button: "By posting, you agree to TikTok's Music Usage Confirmation", plus the Branded Content Policy when that option is checked.
- Show a preview, let the user edit any preset caption or hashtags, and never add your watermark or logo.
- Only send media to TikTok after the user confirms, and tell them it can take a few minutes to appear on their profile.
The guidelines also rule out some products entirely. An app that copies arbitrary content from other platforms to TikTok is not acceptable, and neither is an internal tool that uploads to your own company accounts. TikTok wants apps that help real creators post original content, for a wide audience.
Should you build on the TikTok API directly?
If TikTok is the core of your product and you have time for review, building directly makes sense: the API is well documented and free to call. The cost shows up elsewhere. You maintain two-hour access tokens with rotating refresh tokens for every creator, a chunked upload path, a polling or webhook loop for publish status, the compliance interface above, and an app that sits in private-only mode until the audit passes.
If TikTok is one destination among several, that is the work PostGate's TikTok integration takes on. Creators connect through a hosted OAuth page using PostGate's already-audited TikTok app. You send one request to publish a video or a 1 to 35 image photo post, in Direct Post or inbox mode, and read the delivery status per destination. The creator info and disclosure fields are still required, because TikTok requires them, and the per-creator daily ceiling still applies.
Frequently asked questions
Is the TikTok API free?
TikTok for Developers publishes no price list for Login Kit, the Display API or the Content Posting API, and its app registration guide has no billing step. The cost is review time: apps are reviewed before going live, and posting apps need an audit before posts can be public.
How do I get a TikTok API key?
Register an app on TikTok for Developers. The app page shows a client key and client secret in its Credentials section. Add products and scopes, verify your URLs, and submit the app for review with a demo video. You can test in a sandbox with up to ten of your own accounts meanwhile.
Can you post to TikTok with the API?
Yes, through the Content Posting API. Direct Post publishes to the profile with the video.publish scope, and Upload sends the content to the creator inbox as a draft with video.upload. Until your app passes audit, direct posts are private (SELF_ONLY) and only 5 users can post per 24 hours.
How long does a TikTok access token last?
TikTok's token management page, updated November 2, 2026, lists 2 hours for the access token and 180 days for the refresh token. Each refresh returns a new refresh token that replaces the old one; reusing a replaced refresh token makes later refreshes fail and forces the user to authorize again.
Can I use the TikTok API to get data from any account?
Not in a commercial app. The Display API only returns the profile and videos of users who authorized your app. Public data on any account is available through the Research API, which is limited to approved independent and academic researchers working on a non-profit basis.
