Developer webhooks

Use developer webhooks when your own backend needs push delivery for async post results or account lifecycle events. Create each subscription with a name, a destination URL, and an event set. This is the machine-facing surface for product integrations, not the dashboard notifications channel.
How it fits into async publishing

POST/v1/posts accepts the request, creates result rows, and queues background delivery jobs. Final outcome is then available by polling GET/v1/posts/:post_id or by subscribing to these webhooks.

Live events
EventWhen it fires
post.publishedAll platform results finished successfully.
post.partialAt least one platform succeeded and at least one failed.
post.failedEvery platform result ended in failure.
account.connectedA user connected a new account through Connect or the dashboard.
account.disconnectedA connected account was disconnected or permanently expired.
Payload example
post.published
post.partial
post.failed
Signature verification

Every request includes X-UniPost-Signature with the format sha256=<hex>. Verify it before processing the payload.

Retry behavior
UniPost currently retries failed webhook deliveries up to 3 attempts total. In the current backend, retries are scheduled at approximately 1 minute, 5 minutes, and 30 minutes, and the outbound HTTP timeout is 5 seconds.
How to read webhook results: the data object is the same aggregate post shape your client would receive from GET/v1/posts/:post_id. Use the top-level status for the summary, then inspect results[] for destination-by-destination detail.