list_alert_history
const url = 'https://example.com/api/v1/alerts/history';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/v1/alerts/history \ --header 'Authorization: Bearer <token>'Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Responses
Section titled “Responses”A page of history rows, newest first; empty when this deployment keeps no history
An alert-history row plus its current inbound ack state (keyed by the dedup identity, so all transitions of one incident share it).
object
Metric the check measured (e.g. icmp_rtt_ms, or the liveness sentinel). None for
rows recorded before this was captured (legacy) so the WebUI can show “—”.
The node this transition was about; null when the subject is not a node — read
subject_kind first. It is non-null exactly when subject_kind is node.
Observed sample value that committed the transition (threshold checks only).
Insertion time as an RFC 3339 timestamp. This is the keyset cursor: the WebUI passes
the last row’s recorded_at as before to fetch the next (older) page (matches the audit
log’s paging). Distinct from at_unix_ms (the event time), which can collide across rows.
How serious an alert is. Variants are declared low → high so the derived
Ord ranks Critical above Warning above Info.
The current state of a monitored node or check.
What the transition was about.
The subject’s name, for a subject identified by name rather than by id (a poller pool).
The bound crossed for the committed severity (threshold checks only).
The acknowledgement view attached to an alert / history row in API responses. Carries who acked it, when, from which external tool, and an optional note. Never carries a secret.
object
When the external tool recorded the ack (Unix ms, UTC).
External actor reference (id / handle) — not a secret.
Optional free-text note from the external tool.
Originating tool: pagerduty | jsm | manual | …
Example
[ { "direction": "above", "severity": "info", "state": "ok", "subject_kind": "node" }]before is not an RFC 3339 timestamp
The ADR-019 envelope every failure renders as. pub(crate) and schema-bearing so the OpenAPI
document can name one error shape for every endpoint (ADR-035) instead of leaving 4xx/5xx bodies
undescribed — a client that has to guess the failure shape ends up parsing the success shape and
reading undefined.
object
object
Stable machine-readable code. Clients branch on this, never on the message.
Operator-facing sentence. Safe to display; never carries an internal error’s own text.
Examplegenerated
{ "error": { "code": "example", "message": "example" }}No valid bearer token
The ADR-019 envelope every failure renders as. pub(crate) and schema-bearing so the OpenAPI
document can name one error shape for every endpoint (ADR-035) instead of leaving 4xx/5xx bodies
undescribed — a client that has to guess the failure shape ends up parsing the success shape and
reading undefined.
object
object
Stable machine-readable code. Clients branch on this, never on the message.
Operator-facing sentence. Safe to display; never carries an internal error’s own text.
Examplegenerated
{ "error": { "code": "example", "message": "example" }}Role lacks the read permission
The ADR-019 envelope every failure renders as. pub(crate) and schema-bearing so the OpenAPI
document can name one error shape for every endpoint (ADR-035) instead of leaving 4xx/5xx bodies
undescribed — a client that has to guess the failure shape ends up parsing the success shape and
reading undefined.
object
object
Stable machine-readable code. Clients branch on this, never on the message.
Operator-facing sentence. Safe to display; never carries an internal error’s own text.
Examplegenerated
{ "error": { "code": "example", "message": "example" }}