TikTok Direct Post init: 6 requests a minute per token, queue clips
TikTok limits each user access_token to 6 init requests per minute on Direct Post. Queue finished Sume clips and release them at that pace.

TikTok's Direct Post reference limits each user access_token to 6 requests per minute on the initialize endpoint, POST /v2/post/publish/video/init/. If a batch of Sume clips finishes at once, put them in a queue and release one init call about every 10 seconds per token.
TikTok also documents a 429 when you exceed the API rate limit, and a spam_risk_too_many_posts error when the daily post cap from the API is reached.
What limits did TikTok document?
From the Direct Post reference page.
| Item | What the page says |
|---|---|
| Init endpoint | POST /v2/post/publish/video/init/ |
| Rate limit | 6 requests per minute for each user access_token |
| Exceeded | A 429 error |
| Daily cap | spam_risk_too_many_posts when the daily post cap from the API is reached |
| Tracking id | publish_id in the init response, used to check status |
How do I pace init calls?
A token bucket per account keeps you under the limit even when a webhook burst arrives. The sample waits for a slot before each call.
import time
class PerMinute:
def __init__(self, limit: int = 6):
self.limit, self.stamps = limit, []
def wait(self) -> None:
now = time.monotonic()
self.stamps = [t for t in self.stamps if now - t < 60]
if len(self.stamps) >= self.limit:
time.sleep(60 - (now - self.stamps[0]))
self.stamps.append(time.monotonic())
if __name__ == "__main__":
bucket = PerMinute(limit=2)
for clip in ["a", "b"]:
bucket.wait()
print("init", clip)How does this fit with Sume's webhooks?
Sume sends terminal job events only, up to 10 attempts, so acknowledge fast and enqueue the TikTok work. Dedupe on job_id, the key Sume tells receivers to use (Webhooks).
Sources
Related posts
More in Developers
- TikTok publish_id status: poll it after the Sume job webhook fires
The TikTok Direct Post page I read returns a publish_id to check status and mentions no webhook. Let Sume's webhook trigger the post, then poll TikTok.
- TikTok upload_url is valid for one hour: finish the Sume job first
TikTok says the Direct Post upload_url is valid for one hour after issuance. Wait for the Sume job to complete before you initialize so the upload fits.
- Time a 360p Omni draft vs 720p: separate queue wait from run time
Google says the 360p draft is up to 60% faster. Measure it on Sume with a Python script that splits pending time from in_progress time.
- Timeline refuses a 180-second Short: clips end more than 0.5 s early
Timeline 1.0 allows video coverage to stop at most 0.5 seconds before the end of the audio spine. Check slot ends in Python before you plan a 180-second Short.
Written by Sume