TikTok's Content Posting API offers two ways to get a video onto TikTok:
- Direct Post publishes the video to the creator's profile, with the caption, visibility and interaction settings you send.
- Inbox upload sends the video to the creator's TikTok inbox as a draft. The creator then opens TikTok, finishes editing, and posts it themselves.
They sound similar, but they suit different workflows and come with different requirements. This post compares them and explains how Relaycast decides which one to use.
At a glance
| Direct Post | Inbox upload | |
|---|---|---|
| What happens | Published to the profile | Arrives in the creator's TikTok inbox as a draft |
| Who presses "Post" | Your app, via the API | The creator, in the TikTok app |
| Caption and settings | Sent with the request | Chosen by the creator in TikTok (for videos) |
| Visibility | Chosen per post from the creator's allowed options | Chosen by the creator in TikTok |
| TikTok permission | video.publish | video.upload |
| Result | A publish ID, and the post link once TikTok confirms it | A publish ID; there is no public link until the creator posts it |
| Best for | Scheduling, automation, cross-posting | Human review, editing in TikTok, adding TikTok-native sounds and effects |
Direct Post
Direct Post is what most people mean by "posting to TikTok with an API". You send the video and its settings, and it goes live.
With Relaycast, a TikTok target needs one option, privacyLevel, which has no default. TikTok's guidelines require the person posting to choose who can view the post, from the options TikTok offers for that particular account:
{
"content": "Three keyboard shortcuts that save me an hour a week #productivity",
"media": [{ "url": "https://cdn.example.com/shortcuts.mp4", "type": "video" }],
"targets": [
{
"accountId": "TIKTOK_ACCOUNT_ID",
"options": {
"privacyLevel": "PUBLIC_TO_EVERYONE",
"disableDuet": false,
"disableStitch": false,
"disableComment": false,
"coverTimestampMs": 1500
}
}
],
"publishNow": true
}The possible values are PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR and SELF_ONLY, but not every account can use every value. Relaycast fetches the creator's current options from TikTok right before posting and rejects the post with a clear message if the level you chose is not allowed. The dashboard Playground shows only the allowed options in its picker.
Direct Post also supports TikTok's disclosure settings: brandContent (a paid partnership, which cannot be combined with SELF_ONLY), brandOrganic (promoting your own brand) and isAigc (AI-generated content). Photo posts of up to 10 images are supported too, with photoTitle and autoAddMusic. TikTok fetches photos from their URLs, so the domain that hosts them has to be verified with TikTok.
TikTok reviews apps before allowing them to post publicly. Until an app has passed TikTok's audit, Direct Post is limited to private ("Only me") visibility. If you connect TikTok through your own developer app, plan for the review process before launch.
After the upload, TikTok processes the video on its side. Relaycast polls for the result and records the post link when TikTok confirms it. If processing takes longer than expected, the target is still marked as published with its publish ID rather than being retried, because a retry could publish the same video twice.
Choose Direct Post when you want posts to go out without someone opening TikTok: scheduled campaigns, automated publishing, or the same video going to TikTok, YouTube and Instagram at once.
Inbox upload
Inbox upload hands the video to the creator instead of publishing it. The draft shows up in their TikTok inbox, and they finish it in the app. For video uploads, the caption, visibility and other settings are all chosen there, so the options you send for Direct Post do not apply.
That makes it a good fit when:
- A human should review every post before it appears on the profile.
- Creators want TikTok's own tools: trending sounds, effects, text overlays and stickers are easier to add in the app than through an API.
- Your app does not have Direct Post access. Inbox upload needs a different, narrower permission, which can be simpler to get approved.
The trade-off is that the API result is not the final post. The target reports success with a publish ID once TikTok has received the draft, but there is no public URL, because the post does not exist publicly until the creator posts it.
Choose inbox upload when a person is going to touch every TikTok post anyway, or when your workflow is "prepare centrally, let the creator publish".
How Relaycast picks the mode
You do not choose the mode per request. It follows from the permissions the TikTok account granted when it was connected:
- If the account granted
video.publish, Relaycast uses Direct Post. - If it granted only
video.upload, Relaycast uses inbox upload.
You can see which one applies in the Playground: for an inbox account, the visibility picker shows a single choice explaining that the post will be sent to the TikTok inbox as a draft, and that visibility is chosen in TikTok. The privacyLevel option is still required in API requests for consistency, and SELF_ONLY is the value to send for inbox accounts.
That means the same request body can target a mix of Direct Post and inbox accounts, and each behaves according to how it was connected.
Which should you use?
Use Direct Post if TikTok is one channel among several and you want it to behave like the others: scheduled, automated, with a link in the result.
Use inbox upload if TikTok is a creator-led channel where the final edit happens in the app, or if Direct Post access is not available to you yet.
Many teams use both: Direct Post for brand accounts that run on a schedule, and inbox upload for creators who prefer to add the finishing touches themselves.
The TikTok platform guide lists every option, and the create post reference covers the request format.
Ready to build?
Get an access key and publish your first post in minutes.