Incidents API

Incidents track service disruptions and outages detected by your monitors. They can be created automatically when monitors go down or manually for planned announcements.

All incident endpoints require authentication. Include the Authorization: Bearer {token} header with all requests.

Incident Status Flow

INVESTIGATING → IDENTIFIED → MONITORING → RESOLVED
StatusDescription
INVESTIGATINGInitial state, team is investigating the issue
IDENTIFIEDRoot cause has been identified
MONITORINGFix deployed, monitoring for stability
RESOLVEDIncident is resolved

Severity Levels

SeverityDescription
CRITICALComplete service outage
HIGHMajor functionality impacted
MEDIUMPartial degradation
LOWMinor issue, minimal impact

List Incidents

GET/api/incidents

Retrieve all incidents for monitors owned by the authenticated user

Headers:

HeaderValue
AuthorizationBearer {access_token}

Query Parameters:

ParameterTypeRequiredDescription
severitystringNoFilter by severity: CRITICAL, HIGH, MEDIUM, LOW

Success Response (200 OK):

{
  "incidents": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "monitor_id": "monitor-uuid",
      "monitor_name": "Production API",
      "title": "API Degraded Performance",
      "status": "INVESTIGATING",
      "severity": "HIGH",
      "acknowledged": false,
      "started_at": "2024-01-15T10:30:00Z",
      "resolved_at": null,
      "escalation_policy_id": "policy-uuid",
      "created_at": "2024-01-15T10:30:00Z"
    },
    {
      "id": "660e8400-e29b-41d4-a716-446655440001",
      "monitor_id": "monitor-uuid-2",
      "monitor_name": "Database Server",
      "title": "Database Connection Issues",
      "status": "RESOLVED",
      "severity": "CRITICAL",
      "acknowledged": true,
      "started_at": "2024-01-14T08:00:00Z",
      "resolved_at": "2024-01-14T09:30:00Z",
      "escalation_policy_id": null,
      "created_at": "2024-01-14T08:00:00Z"
    }
  ]
}

Get Incident

GET/api/incidents/:id

Retrieve a single incident with detailed information

Path Parameters:

ParameterTypeDescription
idUUIDIncident ID

Headers:

HeaderValue
AuthorizationBearer {access_token}

Success Response (200 OK):

{
  "incident": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "monitor_id": "monitor-uuid",
    "monitor_name": "Production API",
    "title": "API Degraded Performance",
    "status": "INVESTIGATING",
    "severity": "HIGH",
    "acknowledged": true,
    "started_at": "2024-01-15T10:30:00Z",
    "resolved_at": null,
    "escalation_policy_id": "policy-uuid",
    "created_at": "2024-01-15T10:30:00Z",
    "acknowledgement": {
      "id": "ack-uuid",
      "incident_id": "550e8400-e29b-41d4-a716-446655440000",
      "user_id": "user-uuid",
      "user_name": "John Doe",
      "user_email": "john@example.com",
      "method": "web",
      "acknowledged_at": "2024-01-15T10:35:00Z"
    },
    "escalation_steps": [
      {
        "step_order": 1,
        "delay_minutes": 0
      },
      {
        "step_order": 2,
        "delay_minutes": 15
      },
      {
        "step_order": 3,
        "delay_minutes": 30
      }
    ]
  }
}

The acknowledgement field is only present if the incident has been acknowledged. The escalation_steps field is only present if the incident has an associated escalation policy.


Create Incident

POST/api/incidents

Manually create a new incident

Headers:

HeaderValue
AuthorizationBearer {access_token}
Content-Typeapplication/json

Request Body:

FieldTypeRequiredDefaultValidation
monitorIdUUIDYes-Must be a monitor owned by user
titlestringYes-1-200 characters
messagestringNo-Additional context
severitystringNoMEDIUMCRITICAL, HIGH, MEDIUM, LOW

Request Example:

{
  "monitorId": "550e8400-e29b-41d4-a716-446655440000",
  "title": "Scheduled Database Maintenance",
  "message": "Performing database upgrade, expect brief interruptions",
  "severity": "LOW"
}

Success Response (201 Created):

{
  "incident": {
    "id": "770e8400-e29b-41d4-a716-446655440002",
    "monitor_id": "550e8400-e29b-41d4-a716-446655440000",
    "title": "Scheduled Database Maintenance",
    "status": "INVESTIGATING",
    "severity": "LOW",
    "acknowledged": false,
    "started_at": "2024-01-15T12:00:00Z",
    "resolved_at": null,
    "created_at": "2024-01-15T12:00:00Z"
  }
}

When an incident is created, status page subscribers are automatically notified.

Error Responses:

StatusErrorDescription
400Validation errorsInvalid request body
404Monitor not foundMonitor doesn't exist or not owned by user

Update Incident

PUT/api/incidents/:id

Update an incident's status, severity, or title

Path Parameters:

ParameterTypeDescription
idUUIDIncident ID

Headers:

HeaderValue
AuthorizationBearer {access_token}
Content-Typeapplication/json

Request Body:

FieldTypeRequiredValidation
statusstringNoINVESTIGATING, IDENTIFIED, MONITORING, RESOLVED
severitystringNoCRITICAL, HIGH, MEDIUM, LOW
titlestringNo1-200 characters

At least one field must be provided for an update.

Request Example - Update Status:

{
  "status": "IDENTIFIED"
}

Request Example - Resolve Incident:

{
  "status": "RESOLVED"
}

Success Response (200 OK):

{
  "incident": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "monitor_id": "monitor-uuid",
    "title": "API Degraded Performance",
    "status": "IDENTIFIED",
    "severity": "HIGH",
    "acknowledged": true,
    "started_at": "2024-01-15T10:30:00Z",
    "resolved_at": null,
    "created_at": "2024-01-15T10:30:00Z"
  }
}

When status is changed to RESOLVED, the resolved_at timestamp is automatically set. Subscribers are notified of all status changes.


Acknowledge Incident

POST/api/incidents/:id/acknowledge

Acknowledge an incident to stop escalation

Acknowledging an incident indicates that someone is actively working on it. This stops any further escalation notifications.

Path Parameters:

ParameterTypeDescription
idUUIDIncident ID

Headers:

HeaderValue
AuthorizationBearer {access_token}
Content-Typeapplication/json

Request Body (Optional):

FieldTypeRequiredDefaultDescription
methodstringNowebHow the incident was acknowledged

Acknowledgment Methods:

  • web - Acknowledged via web dashboard
  • api - Acknowledged via API call
  • slack - Acknowledged via Slack integration
  • email - Acknowledged via email link
  • sms - Acknowledged via SMS reply

Request Example:

{
  "method": "api"
}

Success Response (200 OK):

{
  "incident": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "monitor_id": "monitor-uuid",
    "title": "API Degraded Performance",
    "status": "INVESTIGATING",
    "severity": "HIGH",
    "acknowledged": true,
    "started_at": "2024-01-15T10:30:00Z",
    "resolved_at": null,
    "created_at": "2024-01-15T10:30:00Z"
  }
}

Error Responses:

StatusErrorDescription
400Incident already acknowledgedIncident was previously acknowledged
404Incident not foundIncident doesn't exist or not owned by user

Resolve Incident

DELETE/api/incidents/:id

Quickly resolve an incident

This is a convenience endpoint that sets the incident status to RESOLVED and sets resolved_at to the current timestamp.

Path Parameters:

ParameterTypeDescription
idUUIDIncident ID

Headers:

HeaderValue
AuthorizationBearer {access_token}

Success Response (200 OK):

{
  "message": "Incident resolved"
}

Use PUT /api/incidents/:id with {"status": "RESOLVED"} if you want the full incident object returned.


Incident Lifecycle

Automatic Incidents

When a monitor detects a failure that exceeds the failure_threshold, an incident is automatically created:

  1. Incident Created - Status: INVESTIGATING, subscribers notified
  2. Escalation Started - If escalation policy is configured, notifications begin
  3. Acknowledged - Team member acknowledges, escalation stops
  4. Status Updates - Team updates status as investigation progresses
  5. Resolved - Monitor recovers or team marks resolved, resolved_at set

Manual Incidents

For planned maintenance or manual announcements:

  1. Create Incident - Use POST /api/incidents with appropriate severity
  2. Update Status - Progress through IDENTIFIEDMONITORING as needed
  3. Resolve - Use PUT /api/incidents/:id with {"status": "RESOLVED"}

Subscriber Notifications

Incidents automatically trigger notifications to status page subscribers:

EventNotification Sent
Incident created"New incident" notification
Status changed"Incident update" notification
Incident resolved"Incident resolved" notification

Error Responses

StatusErrorDescription
400Validation errorsInvalid request body
400No updates providedPUT request with no fields to update
400Incident already acknowledgedTrying to acknowledge twice
404Incident not foundIncident doesn't exist or not authorized
404Monitor not foundMonitor ID invalid when creating incident
500Failed to fetch/create/update incidentServer error