Backfill Incident
Records a past, already resolved incident with its real times on status pages, without notifying anyone.
POST /api/incidents/backfill
Records an incident that is already over, like "Backfill incident" on Atlassian Statuspage: an outage you handled without the status page, or before it existed. You give the real start and end and, optionally, timeline updates with their own times. The incident is created resolved and appears on the named status pages:
- in the incident history of every layout, with its updates,
- in the uptime bars of the affected manual components (layout
statusboard), when its impact ispartial_outageormajor_outage(degradedandmaintenancedo not count as downtime). Monitor components keep the bars measured by their monitor.
It is recorded silently: no email, webhook, Slack or Teams notification, and no entry in the RSS/Atom feed, regardless of the pages' subscription settings. Later changes follow the normal endpoints (for example Post Incident Update with its own notifySubscribers).
This is what "Backfill incident" in the status pages module and the MCP tool backfill_incident do. Not idempotent: a repeated call records a second incident.
Authentication
Requires role admin or editor (or an organization API token). Every page in statusPageIds must belong to your organization (otherwise 404 statusPageNotFound) and be within your customer scope; without customerId the incident belongs to the organization, so a customer-scoped login or token gets 403 forbidden. Needs the status pages module (403 statusPagesModuleDisabled).
- Header:
Authorization: Bearer <token>
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
title | string | yes | Headline, 1 to 200 characters. |
severity | string | yes | minor, major, critical or maintenance. |
startedAt | string | yes | ISO 8601 start, in the past. |
resolvedAt | string | yes | ISO 8601 end, in the past and after startedAt. |
statusPageIds | array | yes | Status pages (id or publicId), 1 to 10. A page without one of componentIds gets the incident page-wide. |
componentIds | array | no | Affected components (id or publicId), at most 100; each must belong to one of statusPageIds. |
impact | string | no | degraded, partial_outage, major_outage or maintenance. Default from severity as in Create Manual Incident. |
componentImpacts | array | no | Impact of single components, [{ "componentId": 8, "impact": "major_outage" }]; each must also be in componentIds. |
customerId | integer | no | Customer the incident belongs to. With it, only pages without a customer or of that customer. |
summary | string | no | Up to 5,000 characters. |
updates | array | no | Up to 50 timeline updates { "status", "body", "createdAt" }: status is investigating, identified, monitoring or resolved, body 1 to 5,000 characters, createdAt an ISO 8601 time between startedAt and resolvedAt. |
Time rules: startedAt must be before resolvedAt and every update time between them (400 invalidDateRange); no time may be in the future (400 backfillInFuture); startedAt may be at most 90 days before the oldest of the named pages was created, the span the uptime bars cover (400 backfillTooOld). Unknown fields are rejected with 400 invalidRequestBody.
Example (cURL)
curl -X POST "$BASE_URL/api/incidents/backfill" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Payments failed",
"severity": "major",
"startedAt": "2026-10-20T08:10:00Z",
"resolvedAt": "2026-10-20T09:25:00Z",
"statusPageIds": [12],
"componentIds": [44],
"impact": "major_outage",
"updates": [
{ "status": "investigating", "body": "Card payments fail.", "createdAt": "2026-10-20T08:15:00Z" },
{ "status": "resolved", "body": "The provider fixed the outage.", "createdAt": "2026-10-20T09:25:00Z" }
]
}'Response
201 Created
{
"incident": {
"id": 5188,
"publicId": "c1d6e0b2-7a4f-4f1e-8b33-0e9a5d2c7f18"
}
}Common Errors
400 Bad Request(invalidRequestBody) when a required field is missing, a value has the wrong type,componentImpactsnames a component outsidecomponentIds, or an unknown field is sent400 Bad Request(invalidDateRange) whenstartedAtis not beforeresolvedAtor an update time is outside them400 Bad Request(backfillInFuture) when a time is in the future400 Bad Request(backfillTooOld) whenstartedAtis more than 90 days before the oldest named page was created400 Bad Request(statusPageComponentNotOnPage,statusPageCustomerMismatch,invalidIdentifier) for components or pages that do not fit401 Unauthorizedwhen not authenticated403 Forbidden(forbidden,statusPagesModuleDisabled) when your role or scope does not allow it or the module is off404 Not Found(statusPageNotFound,statusPageComponentNotFound) when a page or component does not exist in your organization