# TikTok scheduling API > Markdown version of https://postlake.dev/social-media-scheduling-api/tiktok . The canonical page for humans. > PostLake is the social media API for AI agents: https://postlake.dev/llms.txt Scheduling on TikTok through the same call you use for every other network, with TikTok's real rules enforced before anything is sent. Scheduling to TikTok Send the post with a scheduledAt and it is queued. Credits are spent when it publishes, not when you schedule it, so a queue you never fire costs nothing. curl -X POST https://api.postlake.dev/v1/posts \ -H "Authorization: Bearer $POSTLAKE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "text": "Ready when you are", "accounts": ["acc_…"], "scheduledAt": "2026-09-01T07:00:00", "timezone": "Europe/London" }' That fires at 7am London, through the clock change, because the zone travels with the post instead of being flattened into UTC by whoever wrote the integration. Sending a local time with a trailing Z is the single most common scheduling bug there is: the post goes out an hour off for half the year. TikTok's real limits These come from the same registry the publish path validates against, so nothing here can promise something the API would refuse. Caption limit2200 characters on a video post and 4000 on a photo postMediaat least one image or video is required, up to 35 images, 1 video, video up to 10 minutesDaily limit25 posts a dayPublishingAsynchronous. TikTok accepts the post and confirms later, so PostLake polls until it is genuinely live rather than reporting success on the handoff.Editing a queued postYes, until it firesCancellingYes, until it firesTitleUp to 90 characters on image posts Images must be between 540x960 and 1080x1920. TikTok accepts an oversized image at upload and rejects it minutes later, so PostLake checks it when you schedule. TikTok-specific settings you can send with a scheduled post: mode, privacyLevel, title, allowComment, allowDuet, allowStitch, coverTimestampMs, photoCoverIndex, autoAddMusic, brandContent, brandOrganic, isAigc. It is checked when you schedule, not at 7am A queued post that turns out to be invalid is the worst failure a scheduler has, because nobody is watching when it happens. So the same checks that run on a live publish run when you queue it: media rules, caption length, the network's own option values, and whether the connection is still alive. A post TikTok would refuse comes back as an error now, with the field at fault and the fix, rather than as silence tomorrow morning. If it does fail at fire time, for something only TikTok could know, the failure reaches you by webhook and in the daily summary, and nothing is charged for it. Common questions ### Can I schedule TikTok posts through an API? Yes. Send a scheduledAt with the post and PostLake queues it, then publishes it at that moment. You can edit or cancel it at any point before it fires, and you are only charged when it actually publishes. ### How do I schedule in my own timezone? Pass timezone as an IANA name alongside a naive scheduledAt, for example Europe/London with 2026-09-01T07:00:00. The stored fire time is UTC, but the zone is kept so the post survives a clock change and lists show the local time you meant. ### How many times a day can I post to TikTok? TikTok allows around 25 posts a day. PostLake tells you the limit through GET /v1/platforms rather than making you find out by being refused. ### Can an AI agent schedule the post instead? Yes. Over the hosted MCP server it is the create_post tool with the same scheduledAt. The agent authorises with OAuth, so no API key is pasted into a chat, and you can cap what it may do: which brands, which networks, and how much in a day. ## Related - [Post to TikTok via API](https://postlake.dev/post-to/tiktok.md) - [Analytics on TikTok](https://postlake.dev/social-media-analytics-api/tiktok.md)