Skip to main content
This event fires every time a badge is assigned to a user, whether by purchase, manual admin assignment, or via API.
The internal event name (used when subscribing webhooks in the Console) is user_received_badge.

Subscribe to this event

Point a listener at your URL with EventName: "user_received_badge". Auth, secret and verification in Subscribing and verifying webhooks.

When it fires

  • Admin assigns a badge manually in the dashboard
  • External purchase via Hotmart/Kiwify webhook triggers a badge assignment
  • User completes a course and earns an automatic badge
  • You call the API yourself to assign one

When it does NOT fire

  • Assignment fails (e.g. badge doesn’t exist on the tenant)
  • User has been soft-deleted

Payload

The payload is serialized in PascalCase and delivered in the body of the POST with Content-Type: application/json:

Payload fields

Request headers

The full explanation of how to verify X-Cativa-Signature (with examples in Node, Python, Go and C#) lives in Subscribing and verifying webhooks.

Sample receiver (Express)

This example verifies the HMAC signature, drops requests outside the 5-minute anti-replay window, and only processes authenticated events:

Idempotency

Use the X-Cativa-Execution-Id header received with the request to detect duplicates (the same executionId is sent across all retries of a given event):

Retries

If your endpoint fails, Cativa retries on the curve 30s → 5min → 30min → 2h → 6h → 24h (6 retries, 7 deliveries total, ~33h of coverage). Status 400/401/403/404/410 are treated as permanent failures — no retry. Full table at Subscribing and verifying webhooks.

user_joined_group

Fired when the user joins a group (potentially via badge).

Subscribing to webhooks

How to register listeners, verify HMAC and handle retries.