Webhooks
Cademí sends an HTTPS POST to your endpoint when something happens in your account: a student is created, completes a lesson, passes an exam, receives a certificate. Your endpoint answers with a 2xx status, and Cademí retries the delivery when it does not.
Payload versions
Every webhook has a payload version, which decides the body your endpoint receives. Deliveries, retries, and signatures are the same for every version.
| Version 3 | Version 2 | Version 1 | |
|---|---|---|---|
| Status | Current | Older format | Deprecated |
| Events | The API event catalog, such as lesson_progress.completed (Webhooks v3 reference) | Dashboard events, such as course.concluded (Webhooks v2 reference) | The version 2 events, with names in Portuguese (Webhooks v1 reference) |
| IDs | Public, such as usr_42 | Numeric | Numeric |
| Personal data | Your choice: IDs only, masked, or full (payload_detail) | Always sent | Always sent |
| Events per webhook | Several, with filters by resource | One | One |
Where to create a webhook
- In the dashboard, at Settings > Integrations > Webhooks, in any version. See Set up in the dashboard.
- Through the API, with
POST /webhooks, always version 3. See API webhooks.
The body
In version 3, every event carries its id, type, version, occurred_at, and the event data, with records identified by public ID:
{
"id": "evt_01J8Z3TESTE",
"type": "lesson_progress.completed",
"version": 1,
"occurred_at": "2026-09-29T12:00:00Z",
"data": {
"lesson_id": "les_42",
"product_id": "prd_42",
"user_id": "usr_42"
},
"delivery_id": "whd_01J8Z3TESTE",
"attempt": 1
}With payload_detail set to masked or full, the body also carries expanded, with the student, product, and lesson ready to use. Each event page lists the full body and every field.
Receiving events
- Answer quickly with a
2xxstatus, and process the event afterwards. A slow answer counts as a failure and the delivery is retried. - Discard repeated deliveries: a retry carries the same event ID.
- Verify the
Cademi-Signatureheader before trusting the body. See Signatures.
See Deliveries and retries for timeouts, retries, and the delivery history.