List monitors

⚠️ Alpha — under active development; may change without notice.

This applies to the {monitors, meta} response documented on this
page, which is feature-flagged. The default response is stable and is
not affected.

This operation has two response shapes, chosen per request by the
Observe-Api-Version header.

Default — stable. Omit the header and the response is a plain JSON
array of monitors. This is the long-standing behaviour that existing
callers receive, and it does not change. It is summarised here rather
than fully specified: the parameters and the response schema documented
on this page describe the alpha shape.

Alpha — requires a feature flag. Send
Observe-Api-Version: 2026-08-04 (or later) to get the paginated
{monitors, meta} envelope specified below, with CEL filter,
limit/offset paging, orderBy and expand. This shape must be
enabled for your account by a feature flag; until it is, sending the
header returns 403. An earlier or unparseable date selects the default
shape instead.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Query Params
string

CEL expression that returned monitors must match. Must evaluate to
bool, and must be URL-encoded.

Only the fields below are filterable. An expression that fails to
compile, or that references anything outside this table, is rejected
with 400; the field set is fixed, so retrying with a different
spelling will not succeed. createdBy.name is a common example of a
reference that is rejected — only .id is exposed on a user.

FieldCEL typeNotes
idintCompare unquoted, even though id serializes as a string in JSON. The default ordering.
labelstringSupports matches() for an RE2 regex.
descriptionstringSupports matches(). Compare against "" for "no description" — the response renders it as null, but the filter sees the empty string.
disabledboolTurned off by a user, or by a limit.
ruleKindstringA MonitorRuleKind value, e.g. "Threshold".
aiTriagingModestringA MonitorAiTriagingMode value. "Triage" is the enabled state the list's AI auto-investigate column shows.
createdAttimestampUse timestamp("2026-01-01T00:00:00Z") to compare.
updatedAttimestamp
createdBy.idintId of the creating user.
updatedBy.idintId of the last user to update it.
managedBy.idintId of the managing app. Null when no app manages it.
managedboolWhether an app manages this monitor. managed == false selects the user-managed monitors, which managedBy.id == null cannot express.
scheduledboolWhether it runs on its own schedule.
disabledCausestringA MonitorDisabledCause value, e.g. "AlertRateLimit". Null while enabled.
governorStatestringA MonitorGovernorState value: "Normal", "GracePeriod" or "CostDisabled". Null when no spend limit is configured.
rollupStatusstringA MonitorRollupStatus value: the outcome of the monitor's own last run. Not every documented value is reachable — see the note below.
healthstringA MonitorHealth value: one rollup of run outcome, disabled cause, spend-limit state and cluster failover state. This is the value the list's Health column shows. Not every documented value is reachable — see the note below.
alertStatestringA MonitorAlertState value: "Triggering", "Previous" or "Never".
muteStatestringA MonitorMuteState value.
muteCountintNumber of mute rules covering the monitor; 0 when unmuted.
mutedUntiltimestampNull when not muted, or muted indefinitely.
lastAlarmTimetimestampNull if it has never alerted.
lastErrorTimetimestampNull if it has never logged a fatal error.
lastWarnTimetimestampNull if it has never warned.

Comparisons combine with && and ||. A nullable field is compared
with == null / != null; write the field on the left, since
null == lastAlarmTime is not recognised as a null check.

When filter is used together with the deprecated nameExact or
nameSubstring parameters, every condition must match.

boolean

When true, populates label on the createdBy and updatedBy references.

int64
1 to 1000
Defaults to 200

Maximum number of results to return. Defaults to 200, max 1000.

int64
≥ 0
Defaults to 0

Number of results to skip for pagination. Defaults to 0.

string

Comma-separated fields to order by, each optionally prefixed with -
for descending. Defaults to id.

Orderable fields: id, label, description, ruleKind,
disabled, createdAt, updatedAt, createdBy, updatedBy,
managedBy, scheduled, muteState, rollupStatus, health,
alertState, aiTriagingMode,
lastAlarmTime, lastErrorTime. Anything else is
rejected with 400 — this list is narrower than the filterable
fields, so check it rather than assuming a filterable field can also
be sorted on.

health and alertState sort by severity, not alphabetically.
id is appended as a final tiebreak so paging is deterministic.

string
deprecated

Deprecated since API version 2026-08-04: use filter with label == "..." instead. Retained for backward compatibility; limits results to an exact match on the monitor label. When combined with filter, both conditions must match.

string
deprecated

Deprecated since API version 2026-08-04: use filter with label.matches("...") instead. Retained for backward compatibility; limits results to a case-insensitive substring match on the monitor label. When combined with filter, both conditions must match.

Headers
string
^\d{4}-\d{2}-\d{2}$

Selects the response shape by release date (YYYY-MM-DD). A date on or after 2026-08-04 returns the {monitors, meta} envelope documented below, and requires that shape to be enabled for your account (otherwise 403). Omitting the header returns the legacy bare-array response, as does an earlier or unparseable date. The no-header default never changes.

Responses

Language
Credentials
Bearer
Authorization: Bearer <customerid> <apitoken>
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json