Webhooks
training.completed
A user finished a training campaign: every assigned module completed and every assigned policy accepted. Fires once per user per campaign; the envelope time is the completion time.
Subscription filters
- campaign — filter to specific campaign ids
postWebhooktraining.completed
Payload
Example payload
{
"data": {
"payload": {
"campaign": {
"id": "6c1d9a4e-2f7b-4d3a-9e8c-5b0a7f2d1c43",
"name": "Q3 Security Essentials"
},
"completed_at": "2026-06-09T18:00:00Z",
"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.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.