viewer, editor, or admin.
GET /api/v1/system-health
Returns the alert feed for the current tenant, newest first, with the requesting user’s read state resolved per alert.Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
cursor | string | — | Pagination cursor (an alert id; returns rows older than it). |
limit | integer | 50 | Page size. Max 200. |
unreadOnly | boolean | false | When true, only alerts the requesting user has not read. |
since | string (ISO-8601) | — | Only alerts created after this timestamp. |
severity | string (CSV) | — | Comma-separated severity filter (see values below). |
source | string (CSV) | — | Comma-separated source filter (see values below). |
info, success, warning, error, critical.
Sources: flow, decisioning, approvals, license, system, data, model, sentinel.
(The source column accepts arbitrary strings; these are the canonical values emitted across the codebase.)
Response 200
sources and severities value lists so a client can build filter
controls without hard-coding them.
A user sees alerts addressed directly to them (
userId matches) plus fan-out alerts
(userId: null). API-key callers with no resolved user id see only fan-out alerts, and their
read is always false (they have no per-user read state).PATCH /api/v1/system-health/:id/read
Mark a single alert as read for the requesting user.POST /api/v1/system-health/read-all
Mark every alert visible to the requesting user as read.DELETE /api/v1/system-health/:id
Dismiss (delete) an alert for the tenant.Read state is per-user, stored in
SystemHealthAlertRead. Marking read does not delete or
modify the alert — it only clears the unread indicator for that user. All three endpoints
accept role viewer, editor, or admin.