Skip to main content

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.

This event fires every time a user becomes a member of a group, regardless of the path: they joined themselves, an admin added them, they got access because they earned a badge, or they came in through a bulk import.
The internal event name (used when subscribing webhooks in the Console) is user_joined_group.

When it fires

  • User joins a public group through the community UI
  • User accepts an invite to a private group
  • Admin adds the user to the group manually
  • Badge automation grants access to the group (group restricted to a specific badge)
  • Bulk operation includes the user in the group
  • You add the user to the group via API

When it does NOT fire

  • User leaves the group (this is a separate event, not yet exposed via webhook)
  • A pending join request to a private group that’s awaiting admin approval (it only fires after the admin approves)
  • Re-join — if the user is already a member, nothing happens
  • User not found while enriching the payload (delivery is skipped)
  • Operation fails validation (group doesn’t exist, user is banned, etc.)

Payload

The payload is serialized in PascalCase and delivered in the body of the POST with Content-Type: application/json:
{
  "CustomerId": "01HQ0ABCDEF1234567890XYZ",
  "GroupId": "01HQ2GROUP1234567890XYZAB",
  "GroupName": "Premium Mentorship",
  "User": {
    "Id": "01HQ7Z3X4Y5Z6A7B8C9D0E1F2G",
    "Email": "mary@example.com",
    "FirstName": "Mary",
    "LastName": "Smith",
    "DisplayName": "Mary Smith",
    "Username": "mary.smith",
    "PhoneNumber": "+15551234567",
    "CreatedAt": "2026-04-12T14:32:01Z",
    "BadgeId": "01HQ4ABCDEF1234567890XYZ",
    "Badges": [
      "01HQ4ABCDEF1234567890XYZ"
    ]
  },
  "JoinedAt": "2026-05-08T14:32:01Z"
}

Payload fields

FieldTypeDescription
CustomerIdGUIDID of the tenant that emitted the event. Use it to route when your endpoint receives webhooks from multiple tenants.
GroupIdGUIDID of the group the user joined.
GroupNamestringName of the group at the moment of the event (snapshot — does not change if the name is edited later).
User.IdGUIDID of the user who joined the group.
User.EmailstringUser email.
User.FirstNamestringFirst name.
User.LastNamestringLast name.
User.DisplayNamestringDisplay name.
User.UsernamestringUsername.
User.PhoneNumberstringPhone, when provided.
User.CreatedAtISO 8601When the user was created in the tenant.
User.BadgeIdGUID | nullUser’s primary badge.
User.BadgesGUID[]Full list of badges the user holds at the time of the event.
JoinedAtISO 8601When the join happened.
The payload does not explicitly indicate the channel through which the user joined (manual, badge, invite, bulk). If you need to tell them apart, use listener conditions in the Console — for instance, register one listener per GroupId, or filter on User.Badges to detect joins driven by badge automations.

Request headers

HeaderDescription
X-Cativa-SignatureHMAC-SHA256 signature of the delivery, in the format t=<unixTs>,v1=<hex>. Verify it before processing the event.
X-Cativa-Execution-IdUnique ID of this event. Stable across retries — use it as your idempotency key.
X-Cativa-Automation-IdID of the listener configured in the Console (same value across all deliveries from the same subscription).
The full explanation of how to verify X-Cativa-Signature, handle retries and ensure idempotency (with examples in Node, Python, Go and C#) lives in Subscribing and verifying webhooks.

Use cases

  • Sync with Discord/Slack — when someone joins the “Premium Mentorship” group, automatically add them to the matching channel in your external workspace.
  • Send a contextual email — fire a welcome message specific to that group, with onboarding material, links and next steps.
  • Update segmentation — record the join in your CRM/marketing automation so later campaigns recognize the user as a member of the group.

user_received_badge

Fired when the user earns a badge — often the trigger that leads to a group join.

user_created

Fired when the user is created in the tenant for the first time.

Subscribing to webhooks

How to register listeners, verify HMAC and handle retries.

Webhooks (overview)

Why webhooks, delivery guarantees and payload format.