Skip to content

Incident reference

The full request schemas live in the auto-generated API Reference. This page is the human-readable cheat sheet.

FieldTypeDescription
iduuidIncident ID.
titlestringShort, scannable label.
severityenumminor, major, or critical.
statusenumCustomer-facing progress. See status enum.
responder_statusenumInternal responder state. See responder status.
status_page_idsuuid[]Every status page the incident is published on.
status_page_iduuid | nullDeprecated: the page it was created on. Use status_page_ids.
public_titlestring | nullThe title status pages show. null shows title.
service_iduuid | nullOptional service tag.
monitorsobject[]The monitors this incident is about (below). Empty in list responses.
affected_http_job_idsuuid[]Deprecated: the http monitors in monitors.
participantsobject[]The people working the incident (below). Empty in list responses.
merged_into_iduuid | nullSet on an incident that was merged into another.
resolution_reasonstring | nullmerged for an incident that was merged into another, otherwise null.
merged_fromobject[]The incidents merged into this one: id, title, created_at and their own updates. Updates stay on the source incident. Empty in list responses.
acknowledged_atrfc3339 | nullWhen a responder acknowledged.
acknowledged_byuuid | nullWho acknowledged.
resolved_atrfc3339 | nullWhen the incident resolved.
unassigned_after_exhaustionbooltrue while nobody has acknowledged and the service’s escalation policy ran out, so nobody owns the incident. Always false in list responses.
auto_createdbooltrue when a monitor state change opened the incident; false for manual ones.
created_atrfc3339When the incident opened.
updatesobject[]Chronological incident updates (below).
FieldTypeDescription
iduuidUpdate ID.
statusenumThe public status when it was posted.
messagestringWritten update text.
visibilityenumpublic shows on status pages; internal shows only in the app.
author_user_iduuid | nullWho posted it. null for the system, API keys and updates from before October 2026.
created_atrfc3339When posted.
FieldTypeDescription
monitor_iduuidThe monitor.
monitor_typeenumhttp, cron, browser, tls, dns, dns_record, page_speed or alert_rule.
namestring | nullThe monitor’s name.
impactenum | nulldegraded, partial_outage or major_outage. null derives it from the incident’s severity.
sourceenumauto (joined because it failed) or manual (added by someone).
joined_atrfc3339When the monitor joined the incident.
recovered_atrfc3339 | nullWhen the monitor recovered.

See affected monitors and impact.

FieldTypeDescription
user_iduuidThe user. Participants must be users in your account.
roleenumlead, responder or comms. At most one lead.
added_byuuid | nullWho added them.
added_atrfc3339When they were added.
paged_atrfc3339 | nullWhen they were paged for this incident, or null.

See participants.

FieldTypeDescription
iduuidPostmortem ID.
incident_iduuidThe incident. An incident has at most one postmortem.
statusenumdraft, in_review or published. Publishing needs a resolved incident.
bodystringMarkdown, up to 100,000 characters. Drafted from the timeline when started without one.
owner_user_iduuid | nullThe user who drives it.
created_by_user_iduuid | nullWho started it.
created_at / updated_atrfc3339When it was started and last changed.
published_atrfc3339 | nullWhen it was last moved to published.
FieldTypeDescription
iduuidAction item ID.
incident_iduuidThe incident it follows up.
titlestringUp to 300 characters.
statusenumopen, done or wont_do.
owner_user_iduuid | nullThe user who owns it.
due_datedate | nullYYYY-MM-DD.
external_urlstring | nullAn http or https link to the tracking issue.
created_by_user_iduuid | nullWho added it.
created_at / updated_atrfc3339When it was added and last changed.
completed_atrfc3339 | nullWhen it left open; cleared when reopened.
overduebooltrue for an open item past its due date in the organization’s timezone.
reminded_atrfc3339 | nullWhen the owner was emailed that it is overdue.
incidentobjectOn the follow-up list only: the incident’s id, title, severity and responder_status.

See postmortems and follow-ups.

A public update shows on every status page the incident is published on and can move its status. An internal note stays in the app: it never reaches a status page or its subscribers, and it never changes status. Status pages show the public_title (or title when it is empty) and public updates only.

Account members with incident write access can edit or delete an internal note from its timeline entry, including after resolution. Public updates stay in the timeline; post a correction instead. Notes on merged source incidents are read-only.

PUT /incident/{incident_id}/update/{update_id} accepts only { "message": "Updated note" } and returns the note. It preserves the original author and posting time. Empty messages return 400. DELETE at the same path returns 204 with no body. Either route returns 404 for a missing, foreign or public update, 403 without incident write access, and 409 for a merged incident. These actions do not change incident status or notify subscribers. The timeline event records who edited or deleted the note.

Resolving a published incident always posts a public resolved update. The text is the one you give, else the service’s public template, else “This incident has been resolved.”

ValueMeaning
investigatingCause not yet known.
identifiedCause known, fix in progress.
monitoringFix rolled out, watching.
resolvedDone. The only non-active status.
ValueMeaning
triggeredNo one has claimed the incident. Escalation keeps paging.
acknowledgedA responder owns it. Escalation stops.
resolvedResponder work is done.

Create (POST /incident or POST /status_page/{id}/incident)

Section titled “Create (POST /incident or POST /status_page/{id}/incident)”
FieldTypeRequiredDescription
titlestringyesIncident title.
severityenumwithout service_idminor / major / critical. Defaults to the service’s default severity.
messagestringyesText of the first incident update.
status_page_iduuidnoPublish to a status page at creation.
monitorsobject[]noAffected monitors: { "monitor_id", "monitor_type", "impact" }, with impact optional.
affected_http_job_idsuuid[]noDeprecated: affected HTTP monitors. Use monitors. Sending both is fine, and duplicates are accepted.
service_iduuidnoService tag.

Every field is optional. Send only what changes:

FieldTypeDescription
titlestringNew title.
severityenumNew severity. Raising it from minor to major or critical pages the current escalation level again, and an acknowledged incident goes back to triggered.
service_iduuid | nullMove the incident to this service (404 if it is not in your account). null detaches it. Leaving it out keeps the current service. Moving an open incident cancels the old service’s escalation and starts the new service’s policy at level one, only while the incident is triggered.
statusenumDeprecated: post an update, or resolve. resolved resolves the incident with a public update; another value sets the status.
resolved_atrfc3339Deprecated and ignored: resolving records the time.
public_titlestring | nullThe title status pages show, up to 512 characters (400 if longer). null or blank clears it.

Post an update (POST /incident/{incident_id}/update)

Section titled “Post an update (POST /incident/{incident_id}/update)”
FieldTypeDescription
messagestringUpdate text.
visibilityenumpublic (default) or internal.
statusenumOptional, public updates only. The new status; leaving it out keeps the current one. resolved resolves the incident, and a status earlier than the current one returns 409 unless force is true. On an internal note it is ignored, and resolved returns 400.
forceboolAllow a public update to move the status backward.
notify_subscribersboolEmail the subscribers of every status page the incident is on about a public update. Default false here, and true on POST /status_page/{status_page_id}/incident/{incident_id}/update, which emails only that page.

Acknowledge (POST /incident/{incident_id}/acknowledge)

Section titled “Acknowledge (POST /incident/{incident_id}/acknowledge)”
FieldTypeDescription
acknowledged_byuuidRequired with an API key or API client: a user in your account. A signed-in user always acknowledges as themselves.

Resolve (POST /incident/{incident_id}/resolve)

Section titled “Resolve (POST /incident/{incident_id}/resolve)”

Every field is optional:

FieldTypeDescription
messagestringText of the public resolved update.
post_public_updateboolPost that update even when the incident is on no status page. A published incident always gets one.
notify_subscribersboolEmail the subscribers of every page the incident is on. Default true.

Merge (POST /incident/{incident_id}/merge)

Section titled “Merge (POST /incident/{incident_id}/merge)”

{incident_id} is the target. See merge incidents.

FieldTypeRequiredDescription
source_idsuuid[]yesThe incidents to merge into the target, 1 to 20.

Returns the target incident. 400 for an empty list or more than 20 ids, and 404 when the target or any source is not in your account. A merge is all or nothing: a 409 changes nothing, and its data.incident_id names the incident it refused.

MethodPathBodyReturns
GET/incident/{incident_id}/participantsnoneThe participant list.
POST/incident/{incident_id}/participantsExactly one of user_id, schedule_id or escalation_policy_id, plus optional role (default responder) and page (default true).The full participant list.
PUT/incident/{incident_id}/participants/{user_id}{ "role": "lead" | "responder" | "comms" }The full list. Making someone lead demotes the previous lead to responder.
DELETE/incident/{incident_id}/participants/{user_id}none204.

A schedule adds whoever is on call now. A policy adds the users and on-call people at its first level. With page true, each added user is paged through their own notification rules. Paging an incident without a service returns 400, and paging a resolved one returns 409 (resolved); send "page": false there. A lead must be sent as user_id. The first user to acknowledge becomes lead when there is none.

MethodPathBodyReturns
POST/incident/{incident_id}/monitors{ "monitor_id", "monitor_type", "impact" }, with impact optional.The full monitor list. Adding one that is already linked changes nothing and returns 200.
PUT/incident/{incident_id}/monitors/{monitor_type}/{monitor_id}{ "impact": null | "degraded" | "partial_outage" | "major_outage" }The full list.
DELETE/incident/{incident_id}/monitors/{monitor_type}/{monitor_id}none204.
MethodPathBodyReturns
GET/incident/{incident_id}/postmortemnoneThe postmortem, or 404 when there is none.
POST/incident/{incident_id}/postmortemOptional body and owner_user_id. Without body it is drafted from the timeline.201 and the new draft.
PUT/incident/{incident_id}/postmortemAny of body, status, owner_user_id (null clears it).The postmortem.
DELETE/incident/{incident_id}/postmortemnone204. The action items stay.
MethodPathBodyReturns
GET/incident/{incident_id}/action_itemsnoneThe incident’s action items, oldest first.
POST/incident/{incident_id}/action_itemstitle, plus optional owner_user_id, due_date and external_url.201 and the item.
PUT/incident/{incident_id}/action_items/{action_item_id}Any of title, status, owner_user_id, due_date, external_url; null clears the last three.The item.
DELETE/incident/{incident_id}/action_items/{action_item_id}none204.
GET/incident/action_itemsQuery: status (open default, done, wont_do, all), owner_user_id, overdue (true for only open items past their due date), limit (default 50, at most 100), offset.Every incident’s items in data, soonest due first, plus total.

A new due date or owner re-arms the one overdue email. See the reminder.

Publish (POST /incident/{incident_id}/publish)

Section titled “Publish (POST /incident/{incident_id}/publish)”
FieldTypeDescription
status_page_iduuidThe status page to publish this incident to. A page that is not in your account returns 404.
titlestringOptional. Sets public_title. Otherwise the page keeps the current public title, then uses the service template’s title. An incident a monitor opened shows “Service disruption” rather than its monitor’s name.
messagestringOptional. A public update to post with it. When the incident has no public update yet, one is always posted: this text, else the service template’s message, else “We are investigating this issue.”
notify_subscribersboolEmail the page’s subscribers that the incident opened. Default true. Never sent for a resolved incident, and at most once per page.

Publishing to a page the incident is already on changes nothing unless you send a title or message.

Unpublish (DELETE /incident/{incident_id}/publish/{status_page_id})

Section titled “Unpublish (DELETE /incident/{incident_id}/publish/{status_page_id})”

Takes the incident off that page. The incident and its updates are kept, and nobody is emailed. Returns the incident, or 404 when it is not on that page.

GET /incident/metrics returns counts and acknowledgment/resolution durations for incidents created in a time window. It requires read:incidents. The MCP tool is incident_metrics.

QueryMeaning
fromInclusive creation time, RFC 3339. Defaults to 30 days before to.
toExclusive creation time, RFC 3339. Defaults to now. The maximum window is 366 days.
service_idOnly incidents currently associated with this account-owned service. A missing or foreign service returns 404.
severityCurrent severity: minor, major or critical.

The response contains total_incidents, open_incidents, resolved_incidents and acknowledged_incidents, plus mtta and mttr. Each duration summary has samples, mean_seconds, p50_seconds and p90_seconds. Percentiles use continuous interpolation. With no samples the durations are null, not zero.

MTTA runs from creation to the first acknowledgment event. MTTR runs from creation to the latest resolution event for incidents currently resolved. Earlier incidents without those events use their stored acknowledgment and resolution times. Unresolved incidents contribute no MTTR sample. Negative durations are excluded. Merged source incidents contribute to neither counts nor durations.

The time window selects creation times; lifecycle state and duration values are current when queried. A resolution after to can therefore contribute, and later service or severity edits can change filtered results. acknowledged_incidents counts incidents with an acknowledgment time, including resolved incidents and incidents triggered again after reopening.

Full incident detail and lifecycle responses can also include first_paged_at, the first responder page accepted by its provider, and mitigated_at, the first public status transition to monitoring. These fields are omitted when no matching event exists and on list responses. Resolution alone does not set a mitigation time.

Standalone incidents:

MethodPathPurpose
POST/incidentCreate.
GET/incidentList, with limit / offset pagination.
GET/incident/metricsCreation-cohort counts and MTTA/MTTR summaries.
GET/incident/action_itemsThe follow-up list: every incident’s action items.
GET / PUT / DELETE/incident/{incident_id}Detail / update / delete.
POST/incident/{incident_id}/acknowledgeAcknowledge (stops escalation).
POST/incident/{incident_id}/resolveResolve.
POST/incident/{incident_id}/updatePost an incident update.
POST/incident/{incident_id}/reopenReopen a resolved incident.
POST/incident/{incident_id}/mergeMerge other incidents into this one.
GET / POST/incident/{incident_id}/participantsList / add participants.
PUT / DELETE/incident/{incident_id}/participants/{user_id}Change a participant’s role / remove them.
POST/incident/{incident_id}/monitorsAdd an affected monitor.
PUT / DELETE/incident/{incident_id}/monitors/{monitor_type}/{monitor_id}Set a monitor’s impact / remove it.
GET / POST / PUT / DELETE/incident/{incident_id}/postmortemRead / start / edit / delete the postmortem.
GET / POST/incident/{incident_id}/action_itemsList / add action items.
PUT / DELETE/incident/{incident_id}/action_items/{action_item_id}Edit or close / delete an action item.
POST/incident/{incident_id}/publishPublish to a status page.
DELETE/incident/{incident_id}/publish/{status_page_id}Unpublish from a status page.
GET / POST/incident/action/{token}Acknowledge or resolve from an email or SMS. GET shows a confirmation page and changes nothing; POST (its button) acts. Token-authenticated, no session needed. Each link is made for one paged user, works once, expires after 24 hours, and stops working when the incident changes state.

Status-page-scoped incidents (same shapes, scoped to one page):

MethodPathPurpose
POST / GET/status_page/{status_page_id}/incidentCreate / list.
GET / PUT / DELETE/status_page/{status_page_id}/incident/{incident_id}Detail / update / delete.
POST/status_page/{status_page_id}/incident/{incident_id}/updatePost an update. A public one emails that page’s subscribers unless notify_subscribers is false.

A 409 from these routes carries a code in data.conflict:

Routedata.conflictMeaning
POST /incident/{id}/mergesame_incidentA source is the target.
POST /incident/{id}/mergesource_mergedA source was already merged into another incident.
POST /incident/{id}/mergesource_resolvedA source is already resolved.
POST /incident/{id}/mergetarget_resolvedThe target is resolved.
POST /incident/{id}/mergetarget_mergedThe target was merged into another incident.
POST /incident/{id}/participantsmergedThe incident was merged into another.
POST /incident/{id}/participantsresolvedpage is true on a resolved incident.
POST /incident/{id}/participantsnobody_on_callThe schedule or policy resolved to no one.
POST /incident/{id}/monitorsmergedThe incident was merged into another.
POST /incident/{id}/postmortemexistsThe incident already has a postmortem; data.postmortem holds it.
POST /incident/{id}/postmortemmergedThe incident was merged into another.
PUT /incident/{id}/postmortemincident_openPublishing before the incident is resolved.
POST /incident/{id}/action_itemsmergedThe incident was merged into another.
PUT /incident/{id}open_auto_incident_existsYou moved an auto-created incident onto a service that already has an open auto-created incident.
POST /incident/{id}/reopenopen_auto_incident_existsAnother open auto-created incident already covers that service.
POST /incident/{id}/reopenmergedA merged incident cannot reopen.