Skip to main content
This guide drives the full incident lifecycle over the REST API: open an incident, transition it through its statuses, resolve it with a note, and acknowledge or hand off a page. The flow shown here uses the simple PATCH /status endpoint with an optional staff-only resolutionNote.
Prefer to work in the dashboard? See Create an Incident and Acknowledge and hand off for the UI walkthroughs.
If you also want each transition to publish a customer-visible message on your public status page, use POST /v1/incidents/{id}/updates with visibility: 'public' instead — one call posts the message and advances the status. See Incident Updates for the data model.

Prerequisites

  • A scaling.cloud API key. You can find or create one in Settings → API Access in the dashboard. See Authentication for key format and security practices.
  • curl or any HTTP client.
1

Create an incident

Send a POST request to /api/incidents with a title, severity, and optional description.
At least one of leadId or leadScheduleId is required so the paging path always has a target — a request without either is rejected with 400.
A successful response returns the new incident object with 201 Created:
Every incident starts in investigating status. The severity levels available are:
To page the on-call responder automatically, pass "leadScheduleId": "{scheduleId}". scaling.cloud will assign the current on-call responder as the incident lead and attach the matching escalation policy (if one is configured for the schedule). See the Escalation policies API guide for setting up schedules and policies.
2

Transition the incident status

Move the incident forward by sending a PATCH request to /api/incidents/{id}/status. Status transitions are one-way and must follow the sequence: investigatingidentifiedmonitoringresolved.Here, you transition from investigating to identified once you’ve found the root cause:
The response reflects the updated incident:
Continue transitioning through monitoring the same way as conditions stabilize.
3

Continue through the lifecycle

Once a fix is deployed, transition to monitoring to indicate you are watching for confirmation that the fix holds.
When the incident is fully mitigated and confirmed stable, transition to resolved. Include a resolutionNote to document what happened and how it was fixed:
The response confirms the resolved state:
You must progress through each status in order: investigatingidentifiedmonitoringresolved. You cannot skip steps or go backwards. Resolution notes can be included on any transition and are up to 2,000 characters.resolved is terminal. Once an incident is resolved, no further status changes or updates can be posted on it (you may still redact earlier updates). If you need a post-incident write-up to appear on the status page, publish it as a public update before transitioning to resolved.
4

Retrieve the full incident history

Fetch the incident by ID to see the complete status history, including who made each change, when, and any resolution notes attached:

Acknowledge and hand off a page

When an incident pages a responder, two endpoints cover the everyday actions: acknowledging the page to stop escalation, and handing it off to someone else. For the concepts, see Acknowledgment and handoff; for the dashboard and Slack flows, see the UI guide. Acknowledge stops further escalation and records that you are on the page. It does not change the incident’s status.
Returns the updated incident with the new escalation state. Calling acknowledge on an already-acknowledged or resolved incident is a no-op. Hand off transfers the lead role to another responder and restarts the escalation timer on the current layer.
The targetUserId must be a member of the same organization. Handing off to a non-member returns 400 invalid_target_user.
A handoff restarts the escalation timer for the new lead. If they don’t acknowledge within the layer’s ackTimeoutMinutes, escalation resumes from where it left off.
Both actions are appended to the incident’s paging audit trail (incident_acknowledged, incident_handed_off), which is returned alongside the incident record from GET /v1/incidents/{id}.