Developers

Cademí 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 3Version 2Version 1
StatusCurrentOlder formatDeprecated
EventsThe 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)
IDsPublic, such as usr_42NumericNumeric
Personal dataYour choice: IDs only, masked, or full (payload_detail)Always sentAlways sent
Events per webhookSeveral, with filters by resourceOneOne

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. See PII payloads. Each event page lists the full body and every field.

Receiving events

  1. Answer quickly with a 2xx status, and process the event afterwards. A slow answer counts as a failure and the delivery is retried.
  2. Discard repeated deliveries: a retry carries the same event ID.
  3. Verify the Cademi-Signature header before trusting the body. See Signatures.

See Deliveries and retries for timeouts, retries, and the delivery history.

Report a problem

  • A webhook that is not delivered, arrives with an unexpected body, or fails verification: open a webhook problem report. Include the webhook ID, the delivery or event ID, the event type, the account environment (production or sandbox), and the status your endpoint answered.
  • Questions about receiving webhooks: Discussions.
  • Security vulnerabilities, including the signature of webhooks: report them privately at github.com/minhacademi/developers/security, never in an issue.
  • Questions about your account, plan, or data: contact Cademí support.

Issues and discussions are public. Never paste a signing secret, an API key, a token, or data about your users.

On this page