Platforms / TikTok

In reviewPlatform integration

Ship Your Integration
In Minutes, Not Weeks.

TikTok's Content Posting API + creator OAuth flow, gated by TikTok's two-track app review (Upload + Direct Post). letmepost has the publisher shipped — push_by_file inbox upload with chunked status polling. Hosted users wait on review; self-hosters with their own TikTok developer app can publish today.

In review · Content Posting API · read the docs →

POST /v1/posts
{
  "targets": [{ "platform": "tiktok", "accountId": "acc_tt_xyz" }],
  "text": "Posted via letmepost.",
  "media": [{ "type": "video", "mediaId": "med_video_xyz" }],
  "options": { "tiktok": { "privacyLevel": "PUBLIC_TO_EVERYONE" } }
}

Why letmepost vs Content Posting API direct?

TikTok Direct

  • You complete TikTok app review (4–10 weeks per scope)
  • You implement push_by_file with chunked status polling
  • You manage the SELF_ONLY → PUBLIC_TO_EVERYONE upgrade path
  • You handle two-audit gating (Upload vs Direct Post)
  • You write OAuth 2.0 PKCE + refresh-token lifecycle
  • You parse TikTok's status-poll responses + timeouts

letmepost API

  • Our reviewed TikTok app covers hosted users (when review clears)
  • push_by_file abstracted; one POST + a mediaId
  • Privacy level surfaced per-call; SELF_ONLY in sandbox, public after audit
  • Inbox upload works today; Direct Post flips when its audit clears
  • OAuth 2.0 PKCE + refresh handled — no token rot
  • Upload + finalize timing surfaced via post.published webhook

⚠ TikTok's review gates production

TikTok runs two separate audits — Upload (push_by_file → inbox, SELF_ONLY) and Direct Post (video.publish → public). letmepost has the publisher built for both. Hosted users wait on review; self-host users with their own TikTok app can publish today.

Playground

Connect, configure, post.

ConnectConfigureExecute

TikTok OAuth 2.0 PKCE + account pick. Audit-gated for hosted users; self-host today with your own TikTok developer app.

CONNECT TIKTOK →
Approval-gated.APP REVIEW · IN FLIGHT

Content types

Every TikTok surface, one shape.

Caption· 150 chars
Video· MP4/MOV ≤ 287MB
Privacy levels· 4 modes
Scheduled

How it works

Three steps, under two minutes.

Get your API key

Sign up at dashboard.letmepost.dev.

Connect a TikTok account

OAuth 2.0 PKCE. Pick the account. Required scopes (user.info.basic, video.upload, video.publish) resolved at connect time.

Upload a video

One POST /v1/posts with the video mediaId. We handle push_by_file + chunked status polling, fire post.published when TikTok finalizes.

Features

What we built so you don't.

Audit-aware

Hosted users wait on our TikTok review; self-host users plug their own TikTok developer app and use it today. Same publisher code, your audit record.

push_by_file abstracted

Init the upload, chunk the bytes, poll status (5s → 30s → 120s backoff up to 30min). We handle the whole flow as one SDK call.

SELF_ONLY → public path

In sandbox, posts land with privacyLevel: "SELF_ONLY"; once the Direct Post audit clears, the same call publishes PUBLIC_TO_EVERYONE. No code change.

MP4 / MOV, ≤ 287MB

Standard TikTok push_by_file limits. Preflight rejects oversize or unsupported codecs before the upload starts.

Code example

upload a video · typescript

publish-tiktok.ts
import { Letmepost } from '@letmepost/sdk';
const lmp = new Letmepost({ apiKey: process.env.LMP_API_KEY });

const result = await lmp.posts.create({
  targets: [{ platform: 'tiktok', accountId: 'acc_tt_xyz' }],
  text: 'A demo of letmepost. Posted via the API.',
  media: [{ type: 'video', mediaId: 'med_video_xyz' }],
  options: {
    tiktok: {
      privacyLevel: 'SELF_ONLY', // PUBLIC_TO_EVERYONE once Direct Post audit clears
    },
  },
});

Common questions

about tiktok uploads

When does TikTok go live?

Hosted users wait on TikTok app review (4–10 weeks per scope). Self-host with your own TikTok developer app today — same publisher code, your audit record.

What audits does TikTok require?

Two separate audits. Upload (push_by_file → inbox, SELF_ONLY only) is the first; Direct Post (video.publish → public) is the second. letmepost has the publisher shipped for both.

How big can videos be?

≤ 287MB and ≤ 10 minutes per push_by_file upload. MP4 or MOV. Larger files go through TikTok's pull_by_url path (planned).

What privacy levels are supported?

PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY. Sandbox forces SELF_ONLY until Direct Post audit clears.

Sandbox vs production behavior?

In sandbox: posts land in the user's TikTok inbox with privacy=SELF_ONLY; the user confirms publish in the TikTok app. In production (Direct Post audited): the same call publishes directly to the user's feed.

One API · 8 platforms

TikTok is just one of them.

Learn more

Good to know

Notes from the integration.

Review

Two-track app review — Upload (push_by_file → inbox) + Direct Post (video.publish → public). 4–10 weeks per scope.

Limits

150-char caption. Video ≤ 287MB or 10 min via push_by_file. MP4 or MOV.

Privacy

PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY. Sandbox forces SELF_ONLY until Direct Post clears.

Self-host

BYO TikTok developer app and use it today. Same publisher code, your audit record.

Webhook timing

post.published fires when TikTok finalizes processing. Status-poll backoff is 5s → 30s → 120s up to a 30-min deadline.

READY FOR TIKTOK?

Self-host today with your own TikTok developer app. Hosted users queue up; live when TikTok app review clears. Same publisher either way.