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. Acknowledge / Update Incident Status deliberately rejects resolved as a target.

Authentication

Same as List Incidents: any IM-eligible role (admin, editor, responder), or an organization-wide API token. Incident Management must be enabled for the organization.

Resolving is additionally restricted to the incident's team: a session user must be a member of the team the incident belongs to (teamId), an organization admin, or a global admin. Organization-wide API tokens act as an organization admin and may resolve any incident of the organization. An IM user who is not on the incident's team receives 403 (imTeamMembershipRequired). 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 List Incidents' items).

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

Resolving also cancels any pending escalation jobs for the incident's current escalation cycle.

Common errors

  • 401 Unauthorized when not authenticated
  • 403 Forbidden (imAccessDenied) when using a customer-scoped token, or a session without an IM-eligible role
  • 403 Forbidden (imNotEnabled) when Incident Management is not enabled for the organization
  • 403 Forbidden (imTeamMembershipRequired) when the session user is 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, safe to retry

On this page