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.