List alarms in the project.
curl --request GET \ --url 'https://stratum.example.com/v1/projects/example/observability/alarms?origin=platform.builtin' \ --header 'Authorization: Bearer <token>'Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Query Parameters
Section titled “Query Parameters”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.
Responses
Section titled “Responses”Alarms.
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
Set on a platform-owned row; absent on a tenant’s own.
object
The owner: the Auto Scaling group id, or for platform the component (front-door, pack:platform-health, default-network, operator-recipe).
Raw PromQL expression. Mutually exclusive with the metric tuple + 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.
object
Notification-channel IDs to fire when this alarm transitions to ALARM. Every listed channel is notified; the order of the list does not matter.
. When false, vmalert keeps evaluating + the
history table records transitions, but outbound
notifications are suppressed. Distinct from enabled
which stops evaluation entirely.
. Set by the disable-actions endpoint’s until
parameter. The silencer worker auto-flips actionsEnabled
back to true at this time.
. CloudWatch TreatMissingData policy.
object
. 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.
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.
Example
{ "items": [ { "ownedBy": { "kind": "auto-scaling-group" }, "statistic": "Sum", "comparisonOperator": "GreaterThanThreshold", "actionsEnabled": true, "treatMissingData": "missing", "state": "insufficient_data", "origin": "platform.builtin" } ]}