How to Schedule TikTok Posts via API
TikTok's Content Posting API has no native scheduling. Here's how to schedule TikTok posts with Postproxy — exact-time and queue-based, with the real request shapes.
Why TikTok scheduling is harder than it looks
TikTok’s Content Posting API has two flows: direct post publish, and an inbox/draft upload that lands inside the TikTok app for the user to publish manually. Neither takes a future timestamp.
Compare with Meta’s Instagram Graph API (no scheduled_publish_time for Reels either) or YouTube (only supports private uploads with a future publishAt). TikTok is the strictest: there is no server-side scheduling at all. If you want a post live at 9:00 AM Tuesday, something on your side has to be awake at 9:00 AM Tuesday and call the publish endpoint.
That something — a worker, a delayed task queue, retry logic, timezone handling, OAuth token refresh — is the whole problem.
Schedule a TikTok post for an exact time
curl -X POST "https://api.postproxy.dev/api/posts" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "post": { "body": "New product drop. Link in bio.", "scheduled_at": "2026-05-12T09:00:00Z" }, "profiles": ["tiktok"], "media": ["https://yourcdn.com/launch-9x16.mp4"], "platforms": { "tiktok": { "privacy_status": "PUBLIC_TO_EVERYONE" } } }'privacy_status is required by TikTok on every post. Allowed values: PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY.
The post enters a scheduled state. At 09:00 UTC on May 12 Postproxy uploads the video to TikTok and publishes. Until then you can PATCH /api/posts/:id to change the caption (post.body), the time, or the media.
TikTok media specs
These are validated upfront so you find out about a wrong file before TikTok rejects it 30 seconds in.
- Video: MP4, MOV, AV, or WebM, max 4GB, 3 seconds to 10 minutes
- Minimum dimensions: 720×1280 (TikTok rejects below this)
- Aspect ratio: 9:16 strongly preferred (TikTok will letterbox 16:9)
- Codec: H.264 video, AAC audio
- Caption (
post.body): max 2,200 characters
For multi-image posts (carousels), TikTok also supports format: "image" with up to 35 images:
curl -X POST "https://api.postproxy.dev/api/posts" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "post": { "body": "Behind the scenes — swipe →" }, "profiles": ["tiktok"], "media": [ "https://yourcdn.com/bts-1.jpg", "https://yourcdn.com/bts-2.jpg", "https://yourcdn.com/bts-3.jpg" ], "platforms": { "tiktok": { "format": "image", "privacy_status": "PUBLIC_TO_EVERYONE", "photo_cover_index": 0 } } }'Queue-based scheduling
When you want a steady cadence rather than exact timestamps, queues are simpler. First create a queue (a profile group is required):
curl -X POST "https://api.postproxy.dev/api/post_queues" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "profile_group_id": "pg123", "post_queue": { "name": "TikTok evergreen", "timezone": "America/Los_Angeles", "jitter": 10, "queue_timeslots_attributes": [ { "day": 1, "time": "09:00" }, { "day": 3, "time": "13:00" }, { "day": 5, "time": "18:00" } ] } }'day is 0 (Sunday) to 6 (Saturday). jitter shifts each post by ±10 minutes so the cadence doesn’t look mechanical.
Then add a post — pass queue_id, no scheduled_at:
curl -X POST "https://api.postproxy.dev/api/posts" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "post": { "body": "How we shoot this stuff." }, "profiles": ["tiktok"], "media": ["https://yourcdn.com/bts.mp4"], "queue_id": "q1abc", "queue_priority": "medium", "platforms": { "tiktok": { "privacy_status": "PUBLIC_TO_EVERYONE" } } }'The response includes the assigned scheduled_at. Higher-priority posts (queue_priority: "high") re-shuffle to earlier slots when added.
Status
curl -X GET "https://api.postproxy.dev/api/posts/p_xyz" \ -H "Authorization: Bearer YOUR_API_KEY"Post-level statuses: processing, processed, scheduled, media_processing_failed. Per-platform statuses: processing, published, failed. Once published, the platform record carries a permalink to the live TikTok URL.
Going further
For deeper TikTok-specific topics — sandbox vs. production access, audited app review, the inbox-vs-direct-post tradeoff — see our TikTok API integration guide and the post on scaling TikTok posting.