How AI is applied across API Evangelist and APIs.io. Read my AI disclosure →
API Evangelist API Evangelist
Discovery
Learnings
Guidance
Toolbox
Alignment
API Evangelist LLC

Commune Webhooks API

The events Commune pushes to a consumer, rather than the resources aconsumer pulls. Commune publishes state changes on 23 topics, eachdelivered as one HTTPS POST to an endpoint the consumer registered.Every message shares one envelope, so a consumer can route on `type` anddedupe on `id` without knowing anything about the specific event, and thesame values arrive as `Commune-Event-Type` and `Commune-Event-Id` headersso both can be read before the body is parsed.Delivery is at least once and unordered. A non-2xx response or a timeoutis retried with backoff, so a consumer has to treat `id` as the dedupe keyand tolerate replays. `occurred_at` is the ordering field, not arrivaltime.Two envelope fields say where a change came from rather than whatchanged. `actor` names the credential when the change was made throughthis API's write operations, and `idempotency_key` carries the key thatwrite was made under. Both are `null` for a change made anywhere else,which is most of them.**If your consumer writes, read `idempotency_key` before you act.** Awrite through this API publishes an event, and that event is delivered toevery endpoint registered for the newsletter, including yours. A consumerthat reacts to events by writing therefore receives the echo of its ownwrite, cannot tell it from a change somebody else made, and writes again.You already hold what breaks the loop: you generated the key you sent onthe write, so keep it and skip any event whose `idempotency_key` is one ofyours. `actor` is not the field for this. It names Commune's own id foryour credential, and no operation here tells you what that id is.Registering an endpoint happens in the delivery portal, which`POST /newsletters/{newsletter}/portal-session` mints a link into. Theendpoints already registered are readable at`GET /newsletters/{newsletter}/destinations`.What happened to a particular message is readable.`GET /newsletters/{newsletter}/delivery-attempts` lists every handoverCommune made, filterable by the `event_id` a consumer reads off its own`Commune-Event-Id` header, so "did that event reach me" is answerable fromboth sides of the same identifier.

Commune Webhooks API is one of 18 APIs that Commune publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 6 JSON Schema definitions.

Tagged areas include Webhook. The published artifact set on APIs.io includes an OpenAPI specification, API documentation, and 6 JSON Schemas.

This API exposes 0 operations across 0 paths, and defines 46 schemas. It is described by OpenAPI 3.2.0, at version 2026-08-26.

Requests are made against a single base URL, https://api.usecommune.com.

0 operations 0 paths 46 schemas

Metadata

The identity and technical contract details declared by the specification.

Specification
OpenAPI 3.2.0
API Version
2026-08-26
Base URL
https://api.usecommune.com
Authentication
OAuth 2.0, HTTP Bearer
Contact

Authentication & Security 2

Commune Webhooks API declares 2 security schemes for authenticating requests. It supports OAuth 2.0 (oauth2) using the authorizationCode flow, exposing 13 scopes. It accepts HTTP bearer tokens (Commune API key) (apiKey). By default, every request must be authenticated.

  • oauth2 — An OAuth access token, sent as Authorization: Bearer . The walkthrough of the whole flow is at [usecommune.dev/use-cases/build-an-integration](https://usecommu…
  • apiKey — A Commune API key, sent as Authorization: Bearer . A key is granted one or more newsletters and carries six permission families on each, every one of them none…

Schemas 46

The contract defines 46 schemas that model the data the API accepts and returns. The most detailed are ThreadPublishedData (10 properties), MessageCreatedData (9 properties), SubscriberStatusChangedData (9 properties), EventEnvelope (8 properties). Each schema is shown below with its type and property counts.

BillingSubscriptionUpdatedEvent
The newsletter's own Commune subscription changed state.
SubscriberTaggedEvent
A subscriber tag was applied or taken off.
ThreadCreatedData
object
8 properties 4 required
MessageCreatedData
object
9 properties 5 required
ArticleScheduledData
object
3 properties 3 required
SubscriberCreatedData
object
7 properties 5 required
ArticlePublishedEvent
An article became publicly readable.
SubscriberUnsubscribedData
object
5 properties 4 required
ArticleScheduledEvent
An article written in Commune was queued for a future send.
ThreadCreatedEvent
A new top-level thread was started in a newsletter's space.
SendFailedEvent
A send run broke and the article was parked in failed.
BillingSubscriptionUpdatedData
object
8 properties 3 required
InsightStatus
string
Where a reader sits in the newsletter's engagement ladder, from dormant at the bottom to superfan at the top. Assigned by rank inside the newsletter rather tha…
SenderVerifiedEvent
A sending identity passed verification and can now send.
ThreadPublishedEvent
A thread's visibility became public and it hit the global feed.
SendCompletedData
object
7 properties 7 required
DeliveryBouncedEvent
The message could not be delivered.
ArticleLikedEvent
A reader liked an article, or took the like back.
ImportCompletedData
object
Body of import.completed. Which kind of run finished, where its rows came from, and how much it moved.
5 properties 4 required
ThreadPublishedData
object
Body of thread.published. Which thread reached the feed, how it got there, and enough to render a feed row without a second call.
10 properties 5 required
SubscriberTaggedData
object
Body of subscriber.tagged. Which subscriber, which tag, and which way the membership moved.
5 properties 4 required
ArticleReadEvent
A reader stayed with an article long enough to have read it.
SenderVerifiedData
object
8 properties 5 required
DeliveryDeliveredEvent
The provider confirmed the message reached the recipient server.
SubscriberStatusChangedEvent
A reader crossed a boundary in the newsletter's engagement ladder.
SendFailedData
object
3 properties 2 required
ArticleReadData
object
Body of article.read. Which article, who read it, and when they crossed from unread to read. There is no count here and no way to build one: the topic reports…
5 properties 4 required
Actor
objectnull
Who caused the change, and null when nobody outside Commune did. Populated on a change made through this API's write operations, and null on every other change…
3 properties 2 required
DomainVerifiedEvent
A creator's custom website domain went live.
ArticlePublishedData
object
7 properties 4 required
MessageCreatedEvent
A reply was posted inside a thread.
HighlightCreatedData
object
Body of highlight.created. The passage, where it sits in the article, and an opaque owner token. No userid: Commune does not attribute a highlight to a named r…
8 properties 8 required
SubscriberUnsubscribedEvent
A subscriber stopped being mailable.
SubscriberCreatedEvent
Someone became a subscriber, or an unsubscribed one came back.
DeliveryEventData
object
Shared body of the five delivery. topics. One delivery to one recipient, identified by both Commune's ids and the provider's message id, so a consumer can reco…
7 properties 6 required
HighlightCreatedEvent
A reader marked a passage of an article.
DeliveryOpenedEvent
The recipient opened the message.
DeliveryComplainedEvent
The recipient reported the message as spam.
DeliveryClickedEvent
The recipient clicked a tracked link.
UserRef
objectnull
A pointer to a Commune account, enough to attribute and render something without a second call. Null when there is no account to point at, either because there…
4 properties 1 required
ImportCompletedEvent
An article, subscriber or migration run finished.
ArticleLikedData
object
Body of article.liked. Which article, who, which way the like moved, and the tally afterwards.
7 properties 6 required
SendCompletedEvent
A send run finished handing every recipient to the provider.
SubscriberStatusChangedData
object
Body of subscriber.statuschanged. Identifiers plus what describes the crossing, and not the insight itself: read GET /newsletters/{newsletter}/insights for the…
9 properties 8 required
DomainVerifiedData
object
4 properties 3 required
EventEnvelope
object
The shape every message on every topic shares. The concrete event schemas below narrow type and fill in data; nothing else varies. Two fields describe where a…
8 properties 8 required

Specification

The full machine-readable OpenAPI contract behind this narrative.

Source

usecommune-webhooks-api-openapi.yml Raw ↑

Other APIs Commune publishes across the network.

Commune Articles API
Commune Engagement API
Commune Event delivery API
Commune Highlights API
Commune Messages API
Commune Metrics API
Commune Newsletters API
Commune Platform API
Commune Search API
Commune Senders API
Commune Sends API
Commune Subscriber tags API
Where this information came from

This is an independent, third-party profile of Commune Webhooks API, published by API Evangelist. We do not operate, host, resell, or support these APIs, and we are not affiliated with or endorsed by the company unless stated above. Everything here is built from publicly available information — the company's own site, developer portal, documentation, public repositories, and the specifications it publishes for public use. Nothing is obtained by breaching a system, defeating an access control, or using credentials.

The Kin Score and Agent Readiness rating are independently calculated assessments of a company's public API artifacts, scored against a published rubric. They are not certifications, endorsements, security assessments, or audits.

Corrections, re-scores, and removal are free — no partnership or purchase required, and you do not need to justify the request. A removed company is recorded as unrated, never scored zero for having asked. Acknowledgement within one business day; removal within two.

info@apievangelist.com · Read the full data-sourcing policy →
On a security or compliance team? Put security in the subject line and you will get a person, not a form — we will tell you exactly which public URLs this profile was built from.