Each event arrives in the standard envelope with type set to the name below and data holding the fields listed. Numbers are integers, times are ISO 8601 in UTC, and Markdown fields are the raw text as entered.
| Type | Fires when |
|---|---|
| incident.created | An incident is created and visible, or a draft is published. Also fired when a monitor rule opens an incident. |
| incident.updated | An update is posted to an open incident, including status changes that are not a resolution. |
| incident.resolved | An update with status resolved is posted, by a person or by a monitor rule on recovery. |
| maintenance.scheduled | A maintenance window is created. |
| maintenance.reminder | A reminder offset is reached before the window starts (24 h and 1 h by default). |
| maintenance.started | The window starts, either automatically at its scheduled time or when someone starts it early. |
| maintenance.completed | The window completes, or is cancelled. A cancellation carries canceled: true. |
| component.status_changed | A component's status changes: a manual override, an incident's component override, or a monitor rule. |
| monitor.down | A monitor reaches its failure threshold and is marked down. |
| monitor.up | A down monitor reaches its recovery threshold and is marked up again. |
| monitor.ssl_expiring | An SSL monitor crosses the 30, 14, 7 or 1 day mark before its certificate expires. Once per threshold; re-armed after renewal. |
| subscriber.created | Someone subscribes to a status page, or is imported. Destinations are never included. |
| page.published | A status page is published for the first time (publishing again is a no-op). |
incident.created
An incident is created and visible, or a draft is published. Also fired when a monitor rule opens an incident.
incident_idinteger- The incident. Fetch the full timeline with
GET /user/incidents/:id. titlestring- Incident title.
statusstringinvestigating,identified,monitoringorresolved.impactstringnone,minor,majororcritical.update_idinteger- The first update posted with the incident.
body_mdstring- Markdown body of that update.
{
"incident_id": 91,
"title": "Checkout errors",
"status": "investigating",
"impact": "major",
"update_id": 240,
"body_md": "We are seeing elevated error rates on checkout and are investigating."
}incident.updated
An update is posted to an open incident, including status changes that are not a resolution.
incident_idinteger- The incident.
statusstring- The status after this update.
update_idinteger- The update that triggered the event.
body_mdstring- Markdown body of the update.
{
"incident_id": 91,
"title": "Checkout errors",
"status": "identified",
"impact": "major",
"update_id": 241,
"body_md": "A stuck queue consumer is the cause. A fix is rolling out."
}incident.resolved
An update with status resolved is posted, by a person or by a monitor rule on recovery.
incident_idinteger- The incident.
update_idinteger- The resolving update.
body_mdstring- The resolution text.
{
"incident_id": 91,
"title": "Checkout errors",
"status": "resolved",
"impact": "major",
"update_id": 244,
"body_md": "Delivery is back to normal. The backlog has drained."
}maintenance.scheduled
A maintenance window is created.
maintenance_idinteger- The window. Fetch details with
GET /user/maintenances. titlestring- Window title.
statusstringscheduledat this point.scheduled_startstring- ISO 8601 start.
scheduled_endstring- ISO 8601 end.
body_mdstring- Markdown description, if any.
{
"maintenance_id": 17,
"title": "Database upgrade",
"status": "scheduled",
"scheduled_start": "2026-09-20T02:00:00.000Z",
"scheduled_end": "2026-09-20T03:00:00.000Z",
"body_md": "Expect read-only mode for up to 20 minutes."
}maintenance.reminder
A reminder offset is reached before the window starts (24 h and 1 h by default).
offset_minutesinteger- How many minutes before the start this reminder fired for.
{
"maintenance_id": 17,
"title": "Database upgrade",
"status": "scheduled",
"scheduled_start": "2026-09-20T02:00:00.000Z",
"scheduled_end": "2026-09-20T03:00:00.000Z",
"offset_minutes": 60
}maintenance.started
The window starts, either automatically at its scheduled time or when someone starts it early.
statusstringin_progress.
{
"maintenance_id": 17,
"title": "Database upgrade",
"status": "in_progress",
"scheduled_start": "2026-09-20T02:00:00.000Z",
"scheduled_end": "2026-09-20T03:00:00.000Z"
}maintenance.completed
The window completes, or is cancelled. A cancellation carries canceled: true.
statusstringcompleted, orcanceledwhen the window was called off.canceledboolean- Present and
trueonly for cancellations.
{
"maintenance_id": 17,
"title": "Database upgrade",
"status": "completed",
"scheduled_start": "2026-09-20T02:00:00.000Z",
"scheduled_end": "2026-09-20T03:00:00.000Z"
}component.status_changed
A component's status changes: a manual override, an incident's component override, or a monitor rule.
component_idinteger- The component.
namestring- Component name.
fromstring- Previous status.
tostring- New status:
operational,degraded_performance,partial_outage,major_outageorunder_maintenance. sourcestringmanual,monitororincident.
{
"component_id": 21,
"name": "REST API",
"from": "operational",
"to": "major_outage",
"source": "monitor"
}monitor.down
A monitor reaches its failure threshold and is marked down.
monitor_idinteger- The monitor.
namestring- Monitor name.
errorstring- The failing check's error, for example
HTTP 503,TCP connect timeoutorNXDOMAIN: shop.example.com does not exist.
{
"monitor_id": 8,
"name": "Checkout API",
"error": "HTTP 503"
}monitor.up
A down monitor reaches its recovery threshold and is marked up again.
monitor_idinteger- The monitor.
namestring- Monitor name.
errornull- Always
nullon recovery.
{
"monitor_id": 8,
"name": "Checkout API",
"error": null
}monitor.ssl_expiring
An SSL monitor crosses the 30, 14, 7 or 1 day mark before its certificate expires. Once per threshold; re-armed after renewal.
monitor_idinteger- The SSL monitor.
targetstring- The host that was checked.
days_leftinteger- Days until expiry at the time of the check.
valid_tostring- ISO 8601 expiry of the certificate.
threshold_daysinteger- Which reminder this is:
30,14,7or1.
{
"monitor_id": 2,
"name": "status.example.com certificate",
"target": "https://status.example.com",
"days_left": 13,
"valid_to": "2026-09-27T23:59:59.000Z",
"threshold_days": 14
}subscriber.created
Someone subscribes to a status page, or is imported. Destinations are never included.
subscriber_idinteger- The subscriber.
channelstringemail,sms,telegram,slack,discord,teamsorwebhook.
{
"subscriber_id": 1284,
"channel": "email"
}page.published
A status page is published for the first time (publishing again is a no-op).
page_idinteger- The page.
{
"page_id": 4
}