- Purpose
- Give consumers a concrete payload shape to build against.
- Prerequisites
- A subscription
- Architecture
- Envelope: id, type, created_at, data. The envelope is stable; data varies by type.
Configuration
| Events | candidate.created, assessment.assigned, assessment.started, assessment.completed, result.available, certificate.available |
Implementation steps
- 01Subscribe to the minimum set you act on
- 02Treat unknown event types as no-ops
Examples
result.available
json
{
"id": "evt_01H8ZQD5",
"type": "result.available",
"created_at": "2026-08-24T10:43:02Z",
"data": { "attempt_id": "att_01H8ZQ8B4D", "external_id": "WC-8291", "score": 86, "outcome": "passed" }
}Testing procedure
- Deliver each event twice and assert idempotent handling
Troubleshooting
Unrecognised field
Payloads are additive; parse permissively.