Shipeasy
APIOperations

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…

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 changed.

  • status — flip between active / resolved / dismissed. resolved and dismissed stamp resolvedAt / dismissedAt; active re-opens and clears both. A resolved alert re-fires (as the same row, re-activated) if its condition is raised again.
  • assigneeId — the PERSON owner (a users.id), or null to unassign.
  • agent — the AGENT owner: a connected trigger connector's id, or the built-in "jarvis" (Enterprise plan only403 otherwise), or null to clear. Person and agent halves are independent.

Returns the updated row; 404 if the alert does not exist in the project.

Use cases
  • Wave off a known condition{ "status": "dismissed" } on an alert that needs no action.
  • Hand it to someone{ "assigneeId": "…" } from the ops cockpit's Owner column.
PATCH
/api/admin/alerts/{id}

Authorization

bearerSdkKey
AuthorizationBearer <token>

Pass an admin SDK key as Authorization: Bearer sdk_admin_…. Mint via POST /api/admin/keys with type: "admin".

In: header

Path Parameters

id*string

Stable opaque alert id (al_…).

Length1 <= length <= 128

Header Parameters

X-Project-Id?string

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).

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://shipeasy.ai/api/admin/alerts/string" \  -H "Content-Type: application/json" \  -d '{    "status": "resolved"  }'
{
  "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": "resolved",
  "createdAt": "2026-06-28T14:55:31.000Z",
  "resolvedAt": "2026-06-28T16:40:12.000Z",
  "dismissedAt": null,
  "assigneeId": null,
  "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"
}

Was this page helpful?
Updated August 8, 2026