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 withEventName: "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 thePOST 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 theX-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 curve30s → 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.
Related events
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.
