Create Manual Incident
Creates a manual incident on a customer's status pages or on chosen status pages and components.
POST /api/incidents
Creates a manual incident: an announcement on status pages, written by you rather than detected by a monitor. With customerId it appears on every status page of that customer, as before. Since 27 October 2026 customerId is optional: with statusPageIds the incident appears on those pages, page-wide or on the components in componentIds, also on a page without a customer or without a single monitor. Subscribers of every page the incident appears on are notified.
Authentication
Requires role admin or editor (or an organization API token). Without customerId the incident belongs to the organization, like a status page without a customer: a customer-scoped login or token gets 403 forbidden. Every page in statusPageIds must belong to your organization (otherwise 404 statusPageNotFound) and be within your customer scope.
- Header:
Authorization: Bearer <token>
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
customerId | integer | No* | Customer whose status pages show the incident. *Either customerId or statusPageIds is required. |
websiteId | integer | No | A website of customerId the incident is about. Needs customerId. |
title | string | Yes | Headline, 1 to 200 characters. |
severity | string | Yes | minor, major, critical or maintenance. |
summary | string | No | Up to 5,000 characters. |
startedAt | string | No | ISO 8601 time, default now. |
updateStatus | string | No | First timeline update together with updateBody: investigating, identified, monitoring or resolved (opens the incident resolved). |
updateBody | string | No | Text of the first update, up to 5,000 characters. |
statusPageIds | array | No* | Status pages (id or publicId), at most 10. A page without one of componentIds gets the incident page-wide. With customerId, only pages without a customer or of that customer. |
componentIds | array | No | Affected components (id or publicId), at most 100; each must belong to one of statusPageIds. While the incident is open, these manual components take its impact. |
impact | string | No | degraded, partial_outage, major_outage or maintenance. Default from severity: minor = degraded, major = partial_outage, critical = major_outage, maintenance = maintenance. |
Example (cURL)
curl -X POST "$BASE_URL/api/incidents" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Card payments failing",
"severity": "major",
"statusPageIds": ["2b9c7d1e-5f3a-4c8b-9e0d-1a2b3c4d5e6f"],
"componentIds": [8],
"updateStatus": "investigating",
"updateBody": "We are looking into failed card payments."
}'Response
201 Created
{
"incident": {
"id": 5121,
"publicId": "8d1f0c2e-6a2b-4f1e-9b7c-2e5a1d3c4b5a"
}
}Common Errors
400 Bad Request(incidentTargetRequired) when neithercustomerIdnorstatusPageIdsis given400 Bad Request(statusPageIdsRequired) whencomponentIdsis given withoutstatusPageIds400 Bad Request(statusPageComponentNotOnPage) when a component belongs to a page that is not instatusPageIds400 Bad Request(statusPageCustomerMismatch) when a page belongs to another customer thancustomerId400 Bad Request(invalidWebsite) when the website does not belong tocustomerId, orwebsiteIdis given withoutcustomerId400 Bad Request(invalidRequestBody) when a field is missing or has the wrong type or value401 Unauthorizedwhen not authenticated403 Forbidden(forbidden) when your role cannot write status pages, or a customer-scoped caller creates an incident without a customer or on a page outside its scope403 Forbidden(statusPagesModuleDisabled) whenstatusPageIdsis non-empty and the status pages module is not activated for your organization; incidents without status pages are not affected404 Not Found(statusPageNotFound,statusPageComponentNotFound,customerNotFound) when a page, component or customer does not exist in your organization