This event fires every time a post is successfully published, whether on the community feed or inside a specific group. Use it to index content in external systems, feed search engines, or trigger additional moderation.Documentation Index
Fetch the complete documentation index at: https://docs.cativa.digital/llms.txt
Use this file to discover all available pages before exploring further.
The internal event name (used when subscribing webhooks in the Console) is
post_created.When it fires
- User publishes a post on the community’s main feed
- User publishes a post inside a group
- You create a post via API
When it does NOT fire
- Edit of an existing post
- Comment on a post (that’s a separate event)
- Reaction (like) on a post
- Post rejected by automated moderation before being published
- User not found while enriching the payload (delivery is skipped)
- Creation fails (validation, locked group, banned user, etc.)
Payload
The payload is serialized in PascalCase and delivered in the body of thePOST with Content-Type: application/json:
Payload fields
| Field | Type | Description |
|---|---|---|
CustomerId | GUID | ID of the tenant that emitted the event. Use it to route when your endpoint receives webhooks from multiple tenants. |
PostId | GUID | ID of the newly created post. |
GroupId | GUID | null | ID of the group where the post was published. When null, the post was published on the community’s main feed (outside of any group). |
User.Id | GUID | ID of the post author. |
User.Email | string | Author email. |
User.FirstName | string | First name. |
User.LastName | string | Last name. |
User.DisplayName | string | Display name. |
User.Username | string | Username. |
User.PhoneNumber | string | Phone, when provided. |
User.CreatedAt | ISO 8601 | When the author was created in the tenant. |
User.BadgeId | GUID | null | Author’s primary badge at the time of the post. |
User.Badges | GUID[] | Full list of badges held by the author at the time of the post. |
Content | string | null | Post text. May be null for posts that contain only media (image or video). |
ImageUrl | string | null | URL of the first image attached to the post (original resolution). null when the post has no images. Posts with video or other media types do not populate this field. |
CreatedAt | ISO 8601 | Moment when the post was created. |
Request headers
| Header | Description |
|---|---|
X-Cativa-Signature | HMAC-SHA256 signature of the delivery, in the format t=<unixTs>,v1=<hex>. Verify it before processing the event. |
X-Cativa-Execution-Id | Unique ID of this event. Stable across retries — use it as your idempotency key. |
X-Cativa-Automation-Id | ID of the listener configured in the Console (same value across all deliveries from the same subscription). |
X-Cativa-Signature, handle retries and ensure idempotency (with examples in Node, Python, Go and C#) lives in Subscribing and verifying webhooks.
Use cases
- Index in external search — push
PostId+Contentinto an index (Algolia, Elasticsearch, Meilisearch) for cross-group search inside your own app. - Notify a moderation channel — forward posts in sensitive groups to an internal channel (Slack, Discord) where the moderation team reviews them in parallel.
- Sync to newsletter / social media — take
Content+ImageUrland automatically republish on LinkedIn, Twitter, or in a newsletter, attributing authorship viaUser.DisplayName.
Related events
user_joined_group
Fired when a user joins a group — useful complement to understand the context of who is posting.
user_received_badge
Fired when the user earns a badge — useful to correlate engagement (post) with permission.
Subscribing to webhooks
How to register listeners, verify HMAC and handle retries.
Webhooks (overview)
Why webhooks, delivery guarantees and payload format.
