# Webhooks The events Commune pushes to a consumer, rather than the resources a consumer pulls. Commune publishes state changes on 21 topics, each delivered as one HTTPS POST to an endpoint the consumer registered. Every message shares one envelope, so a consumer can route on `type` and dedupe on `id` without knowing anything about the specific event, and the same values arrive as `Commune-Event-Type` and `Commune-Event-Id` headers so both can be read before the body is parsed. Delivery is at least once and unordered. A non-2xx response or a timeout is retried with backoff, so a consumer has to treat `id` as the dedupe key and tolerate replays. `occurred_at` is the ordering field, not arrival time. Two envelope fields, `actor` and `idempotency_key`, are declared and are always `null` today. They are part of the contract from the start so that populating them later is an additive change rather than a new envelope version. See "Reserved nulls" on the envelope schema. Registration and the signature algorithm itself are not expressible as a Path Item and are documented in prose instead. ## Operations - [Article published](https://api-reference.usecommune.dev/operation/operation-onarticlepublished.md) - [Article scheduled](https://api-reference.usecommune.dev/operation/operation-onarticlescheduled.md) - [Billing subscription state changed](https://api-reference.usecommune.dev/operation/operation-onbillingsubscriptionupdated.md) - [Delivery bounced](https://api-reference.usecommune.dev/operation/operation-ondeliverybounced.md) - [Delivery link clicked](https://api-reference.usecommune.dev/operation/operation-ondeliveryclicked.md) - [Delivery marked as spam](https://api-reference.usecommune.dev/operation/operation-ondeliverycomplained.md) - [Delivery accepted by the recipient server](https://api-reference.usecommune.dev/operation/operation-ondeliverydelivered.md) - [Delivery opened](https://api-reference.usecommune.dev/operation/operation-ondeliveryopened.md) - [Custom website domain verified](https://api-reference.usecommune.dev/operation/operation-ondomainverified.md) - [Highlight created](https://api-reference.usecommune.dev/operation/operation-onhighlightcreated.md) - [Import finished](https://api-reference.usecommune.dev/operation/operation-onimportcompleted.md) - [Message created](https://api-reference.usecommune.dev/operation/operation-onmessagecreated.md) - [Send completed](https://api-reference.usecommune.dev/operation/operation-onsendcompleted.md) - [Send failed](https://api-reference.usecommune.dev/operation/operation-onsendfailed.md) - [Sender verified](https://api-reference.usecommune.dev/operation/operation-onsenderverified.md) - [Subscriber created](https://api-reference.usecommune.dev/operation/operation-onsubscribercreated.md) - [Subscriber insight status changed](https://api-reference.usecommune.dev/operation/operation-onsubscriberstatuschanged.md) - [Subscriber tag added or removed](https://api-reference.usecommune.dev/operation/operation-onsubscribertagged.md) - [Subscriber unsubscribed](https://api-reference.usecommune.dev/operation/operation-onsubscriberunsubscribed.md) - [Thread created](https://api-reference.usecommune.dev/operation/operation-onthreadcreated.md) - [Thread published to the feed](https://api-reference.usecommune.dev/operation/operation-onthreadpublished.md) [Powered by Bump.sh](https://bump.sh)