POST per event to each matching subscription. Events are signed with the Standard Webhooks scheme, retried for about 24 hours, and delivered at least once.
Events
Drafts do not emit events.
post never contains the post content:
error.code is one of quota_exceeded, integration_disconnected, content_rejected, media_invalid, rate_limited, provider_error, or unknown. unknown is never retryable: the provider may have accepted the post, and retrying could publish it twice.
Subscriptions
Create subscriptions in Settings → Webhooks or with the API (webhooks:write scope). The secret is returned only once:
events to receive every type, and omit integrationIds to cover every account. Endpoints must be public HTTPS URLs.
Verifying signatures
Each request carries three headers:
Verify with the raw body, reject timestamps more than five minutes old, and de-duplicate by
webhook-id. With the Node SDK (works in Node 18+, Cloudflare Workers, and Deno):
Delivery and retries
- A
2xxresponse within 10 seconds counts as delivered. Redirects are not followed. - Other responses and timeouts are retried after 30 s, 2 min, 10 min, 30 min, 1 h, 3 h, 6 h, and 12 h. After the eighth failed attempt the delivery is marked failed.
- After 50 failed deliveries in a row, or 72 hours without a success while deliveries fail, the subscription is paused and workspace admins are notified. Re-enable it in Settings once the endpoint is fixed.
- Pause or resume a subscription with
PUT /webhooks/{id}/enabledor in Settings. While a subscription is paused, its events are held. Re-enabling it delivers what was held during the last 7 days, in order; older held events expire. - Events about the same post (or the same account) are delivered in order: a later event waits until the earlier one is delivered or has failed every retry. Events about different posts may arrive in any order.
- Recent deliveries are listed in Settings and at
GET /webhooks/{id}/deliveries. UseGET /posts/lookupto reconcile anything you missed.