Skip to main content
An incident tracks one outage or alert from the moment it opens until it is resolved. Use this API to respond to incidents from a script or agent, and to say which team owns each service. Incident routing is project-scoped: the organization owns members, each project represents a service boundary, and service ownership maps operational services to owner teams inside that project. Incident IDs returned by this API are project-scoped display IDs such as inc_1, inc_2, and inc_3. Use those values in {incident_id} paths. Existing UUID incident links remain accepted for compatibility. Every incident response includes source, which says exactly where the incident came from. source.kind is the same value as sourceType (monitor, heartbeat, integration, finding, or manual):
When a monitor incident opens within 60 minutes of a completed deployment, incident responses include suspectDeployment with the deployment id, service, version, deployedAt, and gapSeconds. The field is null when no recent deployment is available.

Incident operations

Open and change an incident

Opening, changing, and deleting an incident requires incidents:write. To open an incident, send a title and one of the project’s severity keys (see Severity levels). The response is the incident, with status code 201:
To change an incident, send one or more of severity, status, and assignedTo (a user ID, or null to remove the assignee). The status can move to any of investigating, identified, monitoring, and resolved: forward, back, resolve, or reopen. Each status change adds a timeline event that notification routes receive. A reopened incident needs a new acknowledgement.
An unknown severity, status, or user returns 422. A scheduled maintenance record returns 409: change it with the maintenance window operations.

Severity levels

Each project has its own severity levels. Level 1 is the most severe. The keys stay the same (sev-1, sev-2, …); the labels follow the naming style: SEV-1 (sev) or P1 (p). Reads require incidents:read, and changes require incidents:write. Removing the last level returns 422. In the CLI, use squasher incidents severity list|add|naming-style|remove.

Maintenance windows

A maintenance window tells customers about planned work. A window linked to a status page shows on that page until it ends. Maintenance windows need Team or above; on other plans, a change returns 403. The body has title, message (the notice on the status page), startsAt and endsAt (ISO 8601), status (scheduled, active, or completed), and statusPageId (a status page in the project, or null to show the window on no page). When you create a window, omitted times are now and the status is scheduled. Reads require status_pages:read, and changes require status_pages:write.

Response comments and mentions

The Response tab keeps comments internal to the incident’s project; they are not public status-page updates. Write Markdown, including links and lists. Select a teammate from the mention picker rather than relying on typed display text: a selected mention is stored as @[Display Name](mention:USER_ID), with that user’s stable ID in mentionedUserIds. The displayed name is only a label; IDs identify recipients. Mention links are rendered as text, not as navigable mention: URLs. In the dashboard, the response thread shows each comment with its author and rendered Markdown. On desktop, press Cmd+Enter or Ctrl+Enter to post. Hover over a comment timestamp, focus it and press Enter or Space, or tap it on a touch device to see UTC ISO, local time, epoch seconds, and epoch milliseconds. Each format has its own copy button. For API clients, create a comment with incidents:write and a user-authenticated actor (for example, OAuth):
body must be non-empty after trimming and contain at most 4,000 characters. mentionedUserIds is optional and accepts at most 32 distinct user IDs. Every selected recipient must belong to the incident’s organization; IDs outside it are rejected, and a label in body alone does not identify or notify a recipient. The author must belong to that organization. Reads require incidents:read within the project. Only the author can delete their comment. Comments are returned as { "data": [...] } by the list endpoint; a successful create returns the canonical comment with id, incidentId, body, createdAt, updatedAt, mentionedUserIds, and author (id, nullable name, nullable email, nullable image). API-key reads return null for member email addresses. The dashboard displays your new comment immediately while the request completes, then reconciles it with the saved response (or removes it on failure). Other responders viewing the Response tab see new comments through a comments-only refresh about every two seconds and on window focus; this is near-live refresh, not a live connection. A comment-loading error does not block the rest of the incident detail. Valid mentions create an in-app inbox item for each mentioned teammate other than the author. Account email is sent to mentioned teammates when an email address is available; an explicitly configured notification route can also post to its Slack channel. This is not a Slack direct message, and the comment is never published to a status page. See Notifications for comment_mentioned routing.

Service ownership operations

State changes, deletions, and ownership writes are confirmation-required. Link replacement is a full replacement; pass every link set that should remain. Use owner teams for human routing and services for the technical component or app that triggered the incident.

CLI and MCP

Use squasher incidents ... for terminal workflows. In MCP Code Mode, call search("incidents") and inspect the operation schema before executing. The incident, severity level, and maintenance window operations are all in Code Mode. Hosted MCP may require approval for ack, resolve, delete, and write operations.

Agent handoff

Related: Status monitoring, Alerts.

Set a public post-incident review link

PATCH /v1/projects/{project_id}/incidents/{incident_id}/postmortem sets the public review link for a resolved, published incident. It requires status_pages:write.
Pass null to remove the link, including after the linked status page is deleted. The response is { "postmortemUrl": "..." } or { "postmortemUrl": null }. The URL must use HTTP or HTTPS, have no embedded credentials, and contain at most 2,048 characters. An unpublished or unresolved incident returns 409. An incident outside the project returns 404.
The TypeScript client provides client.incidents.updatePostmortem(incidentId, urlOrNull), client.incidents.create, update, and delete, client.incidentSeverity, and client.maintenanceWindows. MCP exposes incidents.updatePostmortem through Code Mode.