TikTok post status: PUBLISH_COMPLETE vs a public post ID

TikTok's Get Post Status returns five statuses. PUBLISH_COMPLETE is not proof the video is public; the post ID appears only after moderation approves it.

5 min readSume
All posts

TikTok's Get Post Status call reports one of five states: PROCESSING_UPLOAD, PROCESSING_DOWNLOAD, SEND_TO_USER_INBOX, PUBLISH_COMPLETE or FAILED. PUBLISH_COMPLETE means the content was posted, but the publicaly_available_post_id (spelled that way in TikTok's docs) is returned only after the post is public and has passed TikTok's moderation, so do not treat a complete status as a live public URL.

What does each status mean?

The table lists each value as described on TikTok's Get Post Status page. The status check allows 30 requests per minute per access token, which is higher than the 6 per minute that applies to starting a post.

Get Post Status values, TikTok page read 2026-10-02
StatusMeaningApplies to
PROCESSING_UPLOADUpload in progressFILE_UPLOAD only
PROCESSING_DOWNLOADTikTok is downloading from your URLPULL_FROM_URL only
SEND_TO_USER_INBOXA notification was sent to the creator to finish the draftInbox flow
PUBLISH_COMPLETEContent was postedBoth flows
FAILEDProcessing hit an errorBoth flows

Why can a clip fail after you thought it was fine?

The same page groups failure reasons: file format, duration, frame rate and picture size; download failures from a URL, which time out after one hour; account issues such as spam detection, too many posts within 24 hours, or a banned account; and policy hits on risky description text. Most of the technical ones you can check before you post.

If the clip came from Sume, run the cheap checks first. Video inspect probes a hosted clip without cost for the probe, and Video trim can cut it to a duration and conform its frame rate.

How do you wait for the public ID?

Poll status at a calm pace, or use TikTok's webhooks, which per the same page cover failed publishes, completed posts, inbox delivery, public availability and removal from public view. Store the publish ID you got at init and only write the public ID into your database when publicaly_available_post_id appears.

The loop below shows the decision, not a live call, because the exact status URL is not in the pages read for this post.

def ready_to_link(status: dict) -> bool:
    if status.get("status") != "PUBLISH_COMPLETE":
        return False
    ids = status.get("publicaly_available_post_id") or []
    return len(ids) > 0

print(ready_to_link({"status": "PUBLISH_COMPLETE"}))
print(ready_to_link({"status": "PUBLISH_COMPLETE", "publicaly_available_post_id": ["123"]}))

What does Sume do and not do?

Sume makes and prepares the media. It does not post to TikTok and does not see these statuses. Keep Sume's receipt and TikTok's status as two separate records in your system, joined by the file URL.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume