list_events
const url = 'https://example.com/api/v1/events';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/events \ --header 'Authorization: Bearer <token>'Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Time-range lower bound (inclusive, RFC 3339). Distinct from before (the paging cursor).
Time-range upper bound (inclusive, RFC 3339).
Event kinds to include, comma-separated (syslog,trap). A single value is the long-standing
spelling and still works; an empty value or an absent parameter means every kind.
Only rule-matched events (or only unmatched ones). Superseded by action, which says what
the rule did; kept because it is a narrower question some clients still ask.
Rule outcomes to include, comma-separated (fired,cleared); empty or absent means all.
Syslog severities (0–7) to include, comma-separated; empty or absent means all. An event with no syslog severity — a trap, a webhook — matches no severity filter.
Free-text matched against source (node name / IP) or message, case-insensitively. Whether
it also matches inside a word depends on the store this deployment searches: PostgreSQL
matches any substring, a log store matches whole words. With regex, it is instead a
regular expression matched against the message only, which reaches inside words on either.
Interpret q as a regular expression (message-only) rather than a plain term.
Message-only condition, matched with the same store-dependent word rules as q.
Interpret msg as a regular expression, which reaches inside words on either store.
Keep the events whose message does not match msg.
Condition on the event’s source: its IP, or the name of the node it is attributed to. There is no regex form — the node-name half is resolved against PostgreSQL and has no counterpart in a log store, so a pattern would mean two different things on the two backends.
Keep the events whose source does not match src.
Responses
Section titled “Responses”Matching events, newest first, from whichever store is the source of record
One received event, as served by GET /api/v1/events.
object
What the pipeline did with an event. When several rules match one event, the row records the strongest outcome.
What kind of passive event a poller (or core, for webhooks) received.
Well-known MIB name for trap_oid (e.g. linkDown), derived at read time; None
for syslog/webhook events or an OID outside the curated set.
Example
[ { "action": "none", "kind": "syslog" }]before is not RFC 3339, a range bound is malformed, the kind is unknown, or the regex does not compile
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" }}This deployment has no write side to resolve node names against
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" }}