Post webhooks
Events fired through the publishing lifecycle, per-platform results, and native (external) posts.
Events fired as posts move through the publishing pipeline, plus events for posts authored natively on the platform. Delivery, retries, idempotency, and signature verification work the same for every event and are covered in the webhooks overview.
Events
| Event | Description |
|---|---|
post.published | Fired when a post is successfully published. |
post.failed | Fired when a post fails to publish on all target platforms. |
post.partial | Fired when a post publishes on some platforms and fails on others. |
post.cancelled | Fired when a post publishing job is cancelled. |
post.scheduled | Fired when a post is scheduled for future publishing. |
post.recycled | Fired when a post is recycled for republishing. |
post.platform.published | Fired once per platform target inside a post as that platform finishes publishing, without waiting for the other platforms. |
post.platform.failed | Fired once per platform target inside a post when that platform fails permanently. |
post.tiktok.url_resolved | Fired when a published TikTok post's public URL becomes available. |
post.external.created | Fired when a post authored natively on the platform (outside Zernio) is detected for the first time. |
post.external.updated | Fired when a tracked native post's text or media changes on the platform. |
post.external.deleted | Fired when a tracked native post is detected as removed from the platform. |
post.published
Fired when a post is successfully published. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"post.scheduled" | "post.published" | "post.failed" | "post.partial" | "post.cancelled" | "post.recycled"date-timeResponse Body
post.failed
Fired when a post fails to publish on all target platforms. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"post.scheduled" | "post.published" | "post.failed" | "post.partial" | "post.cancelled" | "post.recycled"date-timeResponse Body
post.partial
Fired when a post publishes on some platforms and fails on others. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"post.scheduled" | "post.published" | "post.failed" | "post.partial" | "post.cancelled" | "post.recycled"date-timeResponse Body
post.cancelled
Fired when a post publishing job is cancelled. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"post.scheduled" | "post.published" | "post.failed" | "post.partial" | "post.cancelled" | "post.recycled"date-timeResponse Body
post.scheduled
Fired when a post is scheduled for future publishing. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"post.scheduled" | "post.published" | "post.failed" | "post.partial" | "post.cancelled" | "post.recycled"date-timeResponse Body
post.recycled
Fired when a post is recycled for republishing. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"post.scheduled" | "post.published" | "post.failed" | "post.partial" | "post.cancelled" | "post.recycled"date-timeResponse Body
post.platform.published
Fired once per platform target inside a post as that platform finishes publishing successfully, without waiting for other platforms on the same post. Use this for incremental UIs; use post.published for the post-level rollup, which fires separately after all platforms have terminated. The payload carries a platform block (platform post id and URL) and an account block identifying the connected social account, so cross-posts to multiple accounts on the same platform produce one event per account. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID.
"post.platform.published" | "post.platform.failed" | "post.tiktok.url_resolved"The specific platform that just transitioned to a terminal state.
The connected social account the platform-write went through.
date-timeResponse Body
post.platform.failed
Fired once per platform target inside a post when that platform fails permanently. Temporary, retryable failures do not fire this event, only permanent ones, so retry loops stay quiet. The envelope event (post.failed / post.partial) fires separately after all platforms have terminated. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID.
"post.platform.published" | "post.platform.failed" | "post.tiktok.url_resolved"The specific platform that just transitioned to a terminal state.
The connected social account the platform-write went through.
date-timeResponse Body
post.tiktok.url_resolved
Fired when a published TikTok post's public URL becomes available. TikTok exposes the numeric video id asynchronously (often minutes after the upload completes), so post.published can carry an empty publishedUrl for TikTok. This event delivers the resolved URL and platform post id, at most once per platform target. It never fires for drafts or private posts, which have no public URL. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID.
"post.platform.published" | "post.platform.failed" | "post.tiktok.url_resolved"The specific platform that just transitioned to a terminal state.
The connected social account the platform-write went through.
date-timeResponse Body
post.external.created
Fired when Zernio's background sync detects a post that was authored natively on the platform (outside Zernio), such as a Google Business Profile post created in the Google interface. This is poll-driven (roughly hourly), not real-time, because most platforms offer no push notification for merchant-authored posts. The payload's post.source is always "external", and post.id is the platform-native post ID. Subscribe with Create webhook settings or Update webhook settings.
On a freshly connected account, every existing native post is reported as post.external.created on the first sync (a one-time backfill). Treat created as an idempotent upsert keyed on post.id.
Stable webhook event ID
"post.external.created" | "post.external.updated" | "post.external.deleted"Native (external) post data shared by all post.external.* payloads.
date-timeResponse Body
post.external.updated
Fired when a tracked native post's text or media changes on the platform. Edits are detected by comparing the post's text and media structure and, where the platform exposes one, the platform's own edit timestamp. A media-URL-only refresh (some platforms rotate expiring CDN URLs) does not fire this event. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"post.external.created" | "post.external.updated" | "post.external.deleted"Native (external) post data shared by all post.external.* payloads.
date-timeResponse Body
post.external.deleted
Fired when a tracked native post is detected as removed from the platform. The payload's post.deletedAt carries the detection time. Coverage is bounded to the most recent posts the platform's listing returns, so deletions of very old posts may not be detected. Subscribe with Create webhook settings or Update webhook settings.
Stable webhook event ID
"post.external.created" | "post.external.updated" | "post.external.deleted"Native (external) post data shared by all post.external.* payloads.
date-time