TikTok's Content Posting API is the official endpoint that lets a registered developer app publish content to a creator's TikTok account on their behalf. It supports two content types: video uploads and photo (carousel) posts. You authenticate each creator with TikTok OAuth, request the video.publish (and related) scopes, then push media either by direct file upload or by giving TikTok a publicly reachable media URL to pull.
There are two posting modes. Direct Post publishes straight to the feed. Upload (draft) drops the content into the creator's TikTok app inbox so they tap "Post" to confirm. Which one you can use depends on whether your app has passed TikTok's audit.
This is the part that trips up most builders. TikTok gates the direct-post capability behind an app audit. Before your developer app is audited, the Content Posting API will only let you create unaudited / draft posts that the user must manually confirm inside the TikTok app — you cannot silently publish. To unlock true direct posting (the experience people expect from "post to TikTok via API"), TikTok reviews your app's use case, your content-disclosure UX, and your compliance with their content sharing guidelines.
The audit takes time, requires a working demo, and is a recurring source of rejection for solo developers and small teams. PostWire goes through the TikTok audit and OAuth flow for you, so your code never touches the approval process — you just call one endpoint.
To be straight with you: TikTok is not live on PostWire yet. As of June 2026, TikTok is in platform review together with Instagram, YouTube, X, and LinkedIn. The four networks you can post to right now are Bluesky, Telegram, Mastodon, and Discord.
The upside: the TikTok REST endpoint and MCP tool are already specified with the same shape as the live networks. When TikTok clears review, switching a post from Bluesky to TikTok is a one-word change in the platforms array — no new SDK, no new audit on your side.
| Approach to "post to TikTok via API" | You do the audit? | OAuth + token refresh | Other networks |
|---|---|---|---|
| Build directly on TikTok Content Posting API | Yes — you own it | You build & maintain | One integration each, separately |
| PostWire | No — PostWire handles it | Managed for you | 9 networks, one API + MCP |
Once TikTok leaves platform review, posting is a single call. You connect a TikTok account once in the PostWire dashboard (PostWire runs the OAuth and stores the audited token), then publish a video by URL with a caption. Here is the REST shape:
curl -X POST https://postwire.io/api/v1/posts \
-H "Authorization: Bearer $POSTWIRE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"brand": "my-brand",
"platforms": ["tiktok"],
"caption": "Behind the scenes of build day 12 #buildinpublic",
"media": [
{ "type": "video", "url": "https://cdn.example.com/clip.mp4" }
]
}'
The response returns a per-platform post id you can poll for status. Adding more networks is just more strings in platforms, e.g. ["tiktok","bluesky","mastodon"] — same payload, one request.
PostWire ships a first-class MCP server (not docs-only). Point your agent at it and the publish_post tool appears natively. Add PostWire to an MCP client like this:
{
"mcpServers": {
"postwire": {
"command": "npx",
"args": ["-y", "@postwire/mcp"],
"env": { "POSTWIRE_API_KEY": "pw_live_xxx" }
}
}
}
Then the agent simply calls the tool — no HTTP plumbing, no OAuth code:
// MCP tool call the agent emits
{
"name": "publish_post",
"arguments": {
"brand": "my-brand",
"platforms": ["tiktok"],
"caption": "Day 12. We shipped the API. #buildinpublic",
"media": [{ "type": "video", "url": "https://cdn.example.com/clip.mp4" }]
}
}
PostWire resolves the audited TikTok token, performs the Content Posting upload, and returns the post id back to the agent. The same tool posts to all 9 networks.
PostWire prices by brand (connected account set), not per network or per post tier you have to babysit. TikTok posting is included on every paid plan once it ships.
| Plan | Price | Brands |
|---|---|---|
| Free | $0 | 1 brand · 30 posts |
| Starter | $9 | Single-creator |
| Pro | $29 | Growing |
| Agency | $99 | 50 brands |
| Scale | $299 | High volume |
For comparison, running 50 brands on Ayrshare costs roughly $779 — and Ayrshare's MCP is documentation-only, so an agent can't actually post through it. See PostWire vs Ayrshare.
Connect TikTok in the dashboard →