Uptimeify Docs
Monitoring

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 is partial_outage or major_outage (degraded and maintenance do 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

FieldTypeRequiredDescription
titlestringyesHeadline, 1 to 200 characters.
severitystringyesminor, major, critical or maintenance.
startedAtstringyesISO 8601 start, in the past.
resolvedAtstringyesISO 8601 end, in the past and after startedAt.
statusPageIdsarrayyesStatus pages (id or publicId), 1 to 10. A page without one of componentIds gets the incident page-wide.
componentIdsarraynoAffected components (id or publicId), at most 100; each must belong to one of statusPageIds.
impactstringnodegraded, partial_outage, major_outage or maintenance. Default from severity as in Create Manual Incident.
componentImpactsarraynoImpact of single components, [{ "componentId": 8, "impact": "major_outage" }]; each must also be in componentIds.
customerIdintegernoCustomer the incident belongs to. With it, only pages without a customer or of that customer.
summarystringnoUp to 5,000 characters.
updatesarraynoUp 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, componentImpacts names a component outside componentIds, or an unknown field is sent
  • 400 Bad Request (invalidDateRange) when startedAt is not before resolvedAt or an update time is outside them
  • 400 Bad Request (backfillInFuture) when a time is in the future
  • 400 Bad Request (backfillTooOld) when startedAt is more than 90 days before the oldest named page was created
  • 400 Bad Request (statusPageComponentNotOnPage, statusPageCustomerMismatch, invalidIdentifier) for components or pages that do not fit
  • 401 Unauthorized when not authenticated
  • 403 Forbidden (forbidden, statusPagesModuleDisabled) when your role or scope does not allow it or the module is off
  • 404 Not Found (statusPageNotFound, statusPageComponentNotFound) when a page or component does not exist in your organization

On this page