Notifications API

Imposed rule: Work of this type or tasks of this type on this component must also be applied everywhere else it should be applied.

Last updated: 2025-11-25 (Docs Tasks Md.V · DOCS-NOTIFY-40-001)

All protected endpoints require Authorization: Bearer <token> with a validated stellaops:tenant claim. The gateway may forward X-StellaOps-TenantId as signed envelope context, but a matching raw header is not additionally required and is not a data-tenancy source. Responses use the common error envelope (docs/api/overview.md). Paths are rooted at /api/v1/notify.

Channels

Rules

Policies & escalations

Deliveries & digests

Acknowledgements

In-app inbox

Simulations

Health & metadata

Assurance QA fixture endpoints

NIS2 Article-23 incident write path

Operator-driven write endpoints that advance the shared incident reporting timeline state machine (OPEN → EARLY_WARNING_SENT → NOTIFICATION_SENT → FINAL_REPORT_SENT → CLOSED) and emit the matching nis2.incident.* Findings-ledger events. The endpoints do not fork the state machine; they validate operator input, invoke the handoff service, and return the same timeline snapshot shape the GET endpoint emits. Illegal transitions fail closed with a stable reason code (409/422), never a silent no-op. Read is notify.viewer; all writes require notify.operator. Tenant is resolved from the validated principal (the gateway injects the trusted X-StellaOps-TenantId); a missing/unresolved tenant returns 400 tenant_missing.

Determinism notes