Incidents
Read, create, and modify incidents from an integration.
Read routes require incidents:read. Write routes require incidents:write and an editor-owned token.
List incidents
GET /api/public/v2/incidents| Query | Type | Description |
|---|---|---|
project_id | Integer | Return incidents from one project. |
endpoint_id | Integer | Return incidents that affect one endpoint. |
status_id | Integer | Return incidents with one status. |
state | open or resolved | Filter by resolution state. |
severity | warning or critical | Filter by severity. |
type | String | Filter by the exact incident type. |
source | automatic or manual | Filter by source. |
from | RFC 3339 | Include incidents with a last error at or after this time. |
to | RFC 3339 | Include incidents with a last error before this time. |
limit | Integer | Return 1 through 100 items. |
cursor | String | Continue from a previous response. |
The request has no payload. The response contains incident summaries and pagination.
{
"data": [
{
"id": 73,
"team_id": 7,
"project_id": 12,
"endpoint_id": 41,
"endpoint_ids": [41, 42],
"title": "Payment provider errors",
"type": "provider",
"source": "manual",
"severity": "critical",
"auto_resolve": false,
"detection_reason": "Provider returned elevated errors",
"metadata": {
"provider": "ExamplePay"
},
"status_id": 3,
"status_name": "Investigating",
"error_count": 0,
"first_error_at": "2026-08-23T08:05:00Z",
"last_error_at": "2026-08-23T08:05:00Z",
"resolved_at": null,
"created_at": "2026-08-23T08:06:00Z",
"updated_at": "2026-08-23T08:06:00Z"
}
],
"pagination": {
"next_cursor": null,
"has_more": false
}
}Get incident details
GET /api/public/v2/incidents/:incidentIDThe request has no payload. The response contains the incident fields and these arrays:
commentscontains private team notes.checkpointscontains updates intended for status pages.checkscontains linked failing checks without response excerpts.merged_incidentsidentifies records merged into this incident.
List incident statuses
GET /api/public/v2/incident-statusesThe request has no payload.
{
"data": [
{
"id": 3,
"team_id": 7,
"name": "Investigating",
"is_default": true,
"created_at": "2026-08-01T00:00:00Z"
}
]
}Use a returned status ID or exact status name in incident requests.
Create an incident
POST /api/public/v2/incidents
Idempotency-Key: incident-examplepay-20260823
Content-Type: application/jsonProvide project_id or at least one endpoint_id. All selected endpoints must belong to the selected project.
{
"project_id": 12,
"endpoint_ids": [41, 42],
"title": "Payment provider errors",
"type": "provider",
"severity": "critical",
"detection_reason": "Provider returned elevated errors",
"metadata": {
"provider": "ExamplePay"
},
"status": "Investigating",
"auto_resolve": false,
"first_error_at": "2026-08-23T08:05:00Z",
"last_error_at": "2026-08-23T08:05:00Z"
}| Field | Required | Notes |
|---|---|---|
project_id | Conditional | Required when endpoint_ids is empty. |
endpoint_ids | Conditional | Maximum 500 unique positive IDs. |
title | Yes | Between 1 and 200 characters. |
type | No | Maximum 80 characters. The default is manual. |
severity | No | warning or critical. The default is warning. |
detection_reason | No | Maximum 10,000 characters. |
metadata | No | JSON object. Encoded size must not exceed 64 KiB. |
status_id | No | ID from the incident status route. |
status | No | Exact status name. Do not combine it with status_id. |
auto_resolve | No | The default is false. |
first_error_at | No | RFC 3339 timestamp. The default is the current time. |
last_error_at | No | RFC 3339 timestamp. It cannot precede first_error_at. |
The response status is 201. The response contains the complete incident detail in data.
Update incident details
PATCH /api/public/v2/incidents/:incidentID
Content-Type: application/jsonProvide at least one field.
{
"title": "Payment provider outage",
"severity": "critical",
"endpoint_ids": [41, 42, 43],
"metadata": {
"provider": "ExamplePay",
"ticket": "PAY-1842"
}
}You can update:
project_idendpoint_idstitletypeseveritydetection_reasonmetadatafirst_error_atlast_error_at
The response contains the complete updated incident detail in data.
Update incident status
PATCH /api/public/v2/incidents/:incidentID/status
Content-Type: application/jsonProvide at least one field:
{
"status": "Monitoring",
"resolved": false,
"auto_resolve": false
}Use either status_id or status. resolved: true records the resolution time. resolved: false reopens the incident.
The response contains the complete updated incident detail in data.
Merge incidents
POST /api/public/v2/incidents/:incidentID/merge
Idempotency-Key: merge-incident-73-20260823
Content-Type: application/jsonThe incident in the URL is the target record.
{
"source_incident_ids": [74, 75]
}The source incidents must belong to the same team. A source incident cannot also be the target.
Stazus moves affected endpoints, linked checks, comments, checkpoints, and activity to the target. The response contains the complete target incident detail.
Add a comment
POST /api/public/v2/incidents/:incidentID/comments
Idempotency-Key: comment-incident-73-provider-confirmed
Content-Type: application/json{
"body": "Provider support confirmed the fault."
}The body must contain 1 through 10,000 characters. The response status is 201.
Comments are private team notes. Do not use them for public status updates.
Pin or unpin a comment
PATCH /api/public/v2/incidents/:incidentID/comments/:commentID
Content-Type: application/json{
"pinned": true
}The response contains the updated comment in data.
Delete a comment
DELETE /api/public/v2/incidents/:incidentID/comments/:commentIDThe request has no payload. A successful response has status 204 and no body.
Add a checkpoint
POST /api/public/v2/incidents/:incidentID/checkpoints
Idempotency-Key: checkpoint-incident-73-provider-fix
Content-Type: application/json{
"title": "Provider fix in progress",
"body": "The provider identified the fault and started recovery work."
}title must contain 1 through 200 characters. body can contain up to 10,000 characters.
The response status is 201. The response contains the checkpoint in data.
Update a checkpoint
PATCH /api/public/v2/incidents/:incidentID/checkpoints/:checkpointID
Content-Type: application/jsonProvide at least one field:
{
"status_label": "Monitoring",
"title": "Recovery observed",
"body": "Error rates returned to their normal range."
}The response contains the updated checkpoint in data.
Last updated on