Skip to content

List alarms in the project.

GET
/v1/projects/{projectId}/observability/alarms
Code sample: Shell / cURL
curl --request GET \
--url 'https://stratum.example.com/v1/projects/example/observability/alarms?origin=platform.builtin' \
--header 'Authorization: Bearer <token>'
projectId
required
string
/^p-[a-z0-9-]+$/
origin
string
Allowed values: platform.builtin customer

Filter by alarm provenance. Omit for no filter. Lets the UI render the platform-owned vs customer-owned split without scanning every row client-side.

Alarms.

Media typeapplication/json
object
items
required
Array<object>

An alarm is either expression-based (raw PromQL pasted by the operator — expression set) or metric-based (CloudWatch shape — metricNamespace+metricName+statistic+comparisonOperator+ threshold set). The two forms are mutually exclusive at the DB level. Both forms require periodSeconds+evaluationPeriods+ datapointsToAlarm for the vmalert hold duration.

object
ownedBy

Set on a platform-owned row; absent on a tenant’s own.

object
kind
required
string
Allowed values: auto-scaling-group platform
id
required

The owner: the Auto Scaling group id, or for platform the component (front-door, pack:platform-health, default-network, operator-recipe).

string
id
required
string
/^al-[a-z0-9]{1,32}$/
projectId
required
string
name
required
string
displayName
required
string
description
string
expression

Raw PromQL expression. Mutually exclusive with the metric tuple + compositeExpression.

string
compositeExpression

. Boolean composition of child alarm states via the small grammar ALARM(name) AND ALARM(other) (also OK, INSUFFICIENT_DATA, NOT, parens). Mutually exclusive with expression + metric tuple. Children must live in the same project.

string
metricNamespace
string
metricName
string
metricDimensions
object
key
additional properties
string
statistic
string
Allowed values: Sum Average Maximum Minimum SampleCount
periodSeconds
required
integer
>= 10
evaluationPeriods
required
integer
>= 1
datapointsToAlarm
required
integer
>= 1
comparisonOperator
string
Allowed values: GreaterThanThreshold LessThanThreshold GreaterThanOrEqualToThreshold LessThanOrEqualToThreshold
threshold
number format: double
alarmActions

Notification-channel IDs to fire when this alarm transitions to ALARM. Every listed channel is notified; the order of the list does not matter.

Array<string>
enabled
required
boolean
actionsEnabled

. When false, vmalert keeps evaluating + the history table records transitions, but outbound notifications are suppressed. Distinct from enabled which stops evaluation entirely.

boolean
default: true
actionsEnabledUntil

. Set by the disable-actions endpoint’s until parameter. The silencer worker auto-flips actionsEnabled back to true at this time.

string format: date-time
nullable
treatMissingData

. CloudWatch TreatMissingData policy.

string
default: missing
Allowed values: missing not_breaching breaching ignore
state
required
string
Allowed values: insufficient_data pending ok alarm deleted
stateReason
string
stateUpdatedAt
string format: date-time
nullable
tags
object
key
additional properties
string
origin

. Provenance marker. platform.builtin is stamped by the Platform Health pack reconciler (once it owns alarms); every customer-created alarm is customer. Mirrors Dashboard.origin so the UI can render the substrate/customer split with the same model.

string
Allowed values: platform.builtin customer
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
deletedAt
string format: date-time
nullable
createdBy
required
string
nextPageToken
string
isTruncated

True when the server had more rows than it returned. The response is a valid prefix of the result, not the whole of it.

Without this flag a client at the server’s row ceiling receives a full page and no nextPageToken, which means “this is the complete set” — so data it never saw would be indistinguishable from data that does not exist.

It does not imply a cursor exists. These queries do not all sort on a total order, so a resumable token cannot be minted for them yet. The remedy is to narrow the request (a filter, or a tighter scope), not to page.

boolean

Example

{
"items": [
{
"ownedBy": {
"kind": "auto-scaling-group"
},
"statistic": "Sum",
"comparisonOperator": "GreaterThanThreshold",
"actionsEnabled": true,
"treatMissingData": "missing",
"state": "insufficient_data",
"origin": "platform.builtin"
}
]
}