Uptimeify Docs
Incident management

Resolve Incident

Resolves an Incident Management incident from any non-closed status. This is the only endpoint that can move an incident to resolved.

POST /api/im/incidents/:id/resolve

Resolves an incident from any non-closed status (triggered, acknowledged, investigating, identified, monitoring). This is the only endpoint that can move an incident to resolved; Change status deliberately rejects resolved as a target.

Resolving stops escalation, sends the resolve notices to the people who were paged, updates status pages driven by a status page rule and notifies outbound integrations. For a test incident (isTest: true) the notices, status page update and outbound notification are skipped.

Authentication

Any IM-eligible role (admin, editor, responder) or an organization-wide API token, see Authentication. Incident Management must be enabled for the organization.

Restricted to the incident's team: you must be a member of the incident's team (teamId) or an organization admin. An organization-wide API token passes as an organization admin. Acknowledging is not restricted this way.

Request Body

FieldTypeRequiredDefaultDescription
notestringNonullOptional free-text resolution note, up to 10,000 characters.

Example (cURL)

curl -X POST "$BASE_URL/api/im/incidents/42/resolve" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "note": "Restarted the connection pool, monitoring for recurrence." }'

Response

200 OK: the updated incident row (same shape as the items of List Incidents, without the enrichment fields).

{
  "id": 42,
  "organizationId": 1,
  "teamId": 3,
  "title": "Database connection pool exhausted",
  "customerId": null,
  "primarySourceId": 7,
  "severity": "sev1",
  "severityManual": false,
  "status": "resolved",
  "mergedIntoId": null,
  "escalationPolicyId": null,
  "currentTier": null,
  "escalationEpoch": 2,
  "escalationCycle": 0,
  "acknowledgedBy": "MFcTjWmYq2LpzR8vK1sXo",
  "acknowledgedAt": "2026-07-17T09:20:00.000Z",
  "snoozedUntil": null,
  "autoResolve": true,
  "resolvedBy": null,
  "resolveNote": "Restarted the connection pool, monitoring for recurrence.",
  "statuspageUpdate": null,
  "createdBy": null,
  "sourceKind": "alert",
  "isTest": false,
  "triggeredAt": "2026-07-17T09:12:00.000Z",
  "resolvedAt": "2026-07-17T09:45:00.000Z"
}

Common errors

  • 401 Unauthorized when not authenticated
  • 403 Forbidden (customerScopedTokenForbidden) when using a customer-scoped token
  • 403 Forbidden (imAccessDenied) when the session user has no IM-eligible role
  • 403 Forbidden (imNotEnabled) when Incident Management is not enabled for the organization
  • 403 Forbidden (imTeamMembershipRequired) when you are neither a member of the incident's team nor an organization admin
  • 400 Bad Request (invalidRequestBody) when :id is not a positive integer, or note is not a string or exceeds 10,000 characters
  • 404 Not Found (imIncidentNotFound) when the incident does not exist, or belongs to another organization
  • 422 Unprocessable Entity (imIncidentAlreadyClosed) when the incident is already resolved or merged
  • 409 Conflict (imIncidentStatusConflict) when the incident was closed concurrently between the read and the write

On this page