---
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

## 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/versions/51932b099b2f/schema)
