List fired alerts
Returns the project's FIRED alerts as a bare JSON array (no pagination envelope), ordered by createdAt desc. Defaults to the currently-firing ones…
Returns the project's FIRED alerts as a bare JSON array (no pagination envelope), ordered by createdAt desc. Defaults to the currently-firing ones (status=active); pass a status to widen to resolved/dismissed history or all.
Fired alerts are raised only by the platform — the UI's killswitch handlers plus the worker's analysis consumer and alerts cron — never filed by hand, so this surface is list + triage (via PATCH), with no create. The rules that define metric-threshold alerts live at /api/admin/alert-rules.
Snapshot what is currently firing for an on-call view or the home Alerts block, or pull status=all to audit how a noisy rule has behaved over time.
Authorization
bearerSdkKey Pass an admin SDK key as Authorization: Bearer sdk_admin_…. Mint via POST /api/admin/keys with type: "admin".
In: header
Query Parameters
Filter by lifecycle state. Defaults to active (currently firing); all returns every status.
"active""active" | "resolved" | "dismissed" | "all"Header Parameters
Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://shipeasy.ai/api/admin/alerts"[
{
"id": "al_01j7w9c4d5e6f7g8h9i0j1k2l3",
"source": "metric_rule",
"ruleId": "ar_01j7w8a1b2c3d4e5f6g7h8i9j0",
"severity": "danger",
"dedupeKey": "ar_01j7w8a1b2c3d4e5f6g7h8i9j0",
"title": "Checkout error rate above threshold",
"detail": "checkout_errors was 137 over the trailing 24h — above the rule's threshold of 50.",
"href": "/dashboard/metrics/met_01j6abc2d3e4f5g6h7i8j9k0l1",
"observedValue": 137,
"status": "active",
"createdAt": "2026-06-28T14:55:31.000Z",
"resolvedAt": null,
"dismissedAt": null,
"assigneeId": null,
"assigneeConnectorId": null,
"assigneeAgent": null
},
{
"id": "al_01j7w9b2a1z0y9x8w7v6u5t4s3",
"source": "killswitch_armed",
"ruleId": null,
"severity": "warn",
"dedupeKey": "ks_01j5checkout_kill",
"title": "Kill switch \"checkout_kill\" is armed",
"detail": "The kill switch has been armed for 3 days — confirm it is still intentional.",
"href": "/dashboard/killswitches/ks_01j5checkout_kill",
"observedValue": null,
"status": "active",
"createdAt": "2026-06-27T09:12:05.000Z",
"resolvedAt": null,
"dismissedAt": null,
"assigneeId": "6f1d2c3b-4a5e-4f60-9b7c-8d9e0f1a2b3c",
"assigneeConnectorId": null,
"assigneeAgent": null
}
]{
"error": "Malformed request (bad JSON, missing project scope).",
"code": "BAD_REQUEST"
}{
"error": "Missing or invalid admin SDK key.",
"code": "UNAUTHORIZED"
}{
"error": "Key is valid but not allowed to act on this project.",
"code": "FORBIDDEN"
}{
"error": "The resource does not exist or is not visible to the caller.",
"code": "NOT_FOUND"
}{
"error": "A resource with this name already exists in the project.",
"code": "ALREADY_EXISTS"
}{
"error": "The request body failed structural (schema) validation.",
"code": "VALIDATION"
}Delete an alert rule
Deletes the alert rule. The cron stops evaluating it immediately. Use this (then create a new rule) to repoint alerting at a different metric, since…
Update a fired alert
Triage writes on one fired alert — the only mutations this surface allows. All body fields are optional (at least one required); only the fields present are…