Skip to main content

Webhooks & Events

Internally the platform speaks events on NATS JetStream with the canonical envelope (AGENTS.md ?6). For external partners, the same events are bridged to webhooks via the notification-service.

{
"eventId": "evt_01J?",
"eventType": "authoring.course_draft.published",
"eventVersion": 1,
"schemaUri": "schemas://authoring/course_draft/published/v1#sha256-?",
"tenantId": "ten_01J?",
"occurredAt": "2026-04-17T09:42:11.000Z",
"payload": { /* ? */ }
}

Webhooks are at-least-once. Consumers must implement the inbox pattern: dedupe by eventId and apply mutations in the same transaction as the inbox insert.