Webhooks

training.module.completed

A user completed one assigned module within a training campaign. The envelope time is the module completion time.

Subscription filters

  • campaign — filter to specific campaign ids
postWebhooktraining.module.completed

Payload

datacontenttypestring

media type of data

idstring

unique id for event

sourcestring

the event source; always /adaptive

specversionstring

CloudEvents spec version

subjectstring

reserved for the event's primary entity id; currently never set, so always omitted

timestring date-time

when the event occurred

type'training.module.completed'

the event type

Example payload

{
  "data": {
    "payload": {
      "campaign": {
        "id": "6c1d9a4e-2f7b-4d3a-9e8c-5b0a7f2d1c43",
        "name": "Q3 Security Essentials"
      },
      "completed_at": "2026-06-09T18:00:00Z",
      "module": {
        "id": "4a7e1d2c-8b5f-4c9a-a6d3-2e0f7b1c5d84",
        "name": "Recognizing Phishing Emails"
      },
      "user": {
        "email": "jordan.lee@example.com",
        "id": "8d2c1f6a-9b3e-4c7a-bf21-2a5e9c1d4b88"
      }
    }
  },
  "datacontenttype": "application/json",
  "id": "9b2f6c1e-8d3a-4f0b-a1c2-5e7d9f3b6a48",
  "source": "/adaptive",
  "specversion": "1.0",
  "time": "2026-06-09T18:00:00Z",
  "type": "training.module.completed"
}

Response

Return any 2xx status to acknowledge the delivery. Timeouts, 408, 429, and 5xx responses other than 501 are retried; any other status is a permanent failure.

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.