---
title: "Post platform failed event"
method: POST
path: "post.platform.failed"
tags: ["Webhook Events"]
---

# Post platform failed event

`POST post.platform.failed` (webhook)

Fired once per platform target inside a post as 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.

## Payload

- WebhookPayloadPostPlatform — Webhook payload for the per-platform terminal events `post.platform.published` and `post.platform.failed`, for `post.platform.deleted` (same shape, fired when Zernio's background sync detects that a platform target published through Zernio was later deleted on the platform; poll-driven ~hourly, not real-time), and for `post.tiktok.url_resolved` (same shape, fired when a published TikTok post's public URL is backfilled). Terminal events fire once per platform target inside a post as that platform reaches a terminal state (published or permanent failure). The `post` envelope mirrors the shape of `WebhookPayloadPost` so consumers can reuse rendering logic; the `platform` block identifies which specific platform transitioned; the `account` block identifies the connected social account behind that platform-write.
  - `id` string, required — Stable webhook event ID.
  - `event` 'post.platform.published' | 'post.platform.failed' | 'post.platform.deleted' | 'post.tiktok.url_resolved', required
  - `post` object, required
    - `id` string, required
    - `content` string, required
    - `status` string, required — Post-level status AT FIRE TIME. May still be `publishing` if other platforms haven't terminated; check this field rather than assuming.
    - `scheduledFor` string, date-time, required
    - `publishedAt` string, date-time
    - `platforms` object[], required
      - `platform` string, required
      - `status` string, required
      - `accountId` string — SocialAccount id this platform target published through. On post.platform.* events see also the top-level `account` block.
      - `platformPostId` string
      - `publishedUrl` string
      - `error` string
    - `metadata` object — The free-form `metadata` object supplied when the post was created, echoed back so you can map events onto your own records. Omitted when the post was created without it.
  - `platform` object, required — The specific platform that just transitioned to a terminal state.
    - `name` string, required — Platform name (e.g. `twitter`, `tiktok`, `instagram`).
    - `status` 'published' | 'failed' | 'deleted', required — Terminal status this event fires on. Matches the event suffix.
    - `platformPostId` string — Platform-native post id. Present on `published` and `deleted`, absent on `failed`.
    - `publishedUrl` string — Public URL to the platform-side post. Present on `published` (when the platform exposes one and it is not a draft) and on `deleted` (when one was recorded at publish time).
    - `error` string — Error message from the platform. Present on `failed` only.
    - `deletedAt` string, date-time — When the platform-side deletion was detected by Zernio sync (ISO 8601). Present only on `post.platform.deleted`.
  - `account` object, required — The connected social account the platform-write went through.
    - `accountId` string, required
    - `platform` string, required
    - `username` string, required
    - `displayName` string
  - `timestamp` string, date-time, required — UTC time at which Zernio generated this event (set once when the event payload is built, before delivery is queued). Retries and redeliveries keep the original value, so it reflects the event, not the delivery attempt.

## Acknowledgement `200`

Webhook received successfully

---

[API](https://skmtc.net/zernio/apis/zernio-api.md) · [All operations](https://skmtc.net/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zernio/zernio-api/revisions/e0cd92070858/schema)
