Skip to main content
Incidents and maintenances share one lifecycle. State is derived from timestamp fields, identically whether the transition came from the API, the console, or a scheduled job. Transitions are idempotent.

States

Transitions

Webhook events

Each transition fires a webhook event. See Webhook payload reference for exact body shapes.

Auto-message side effects

Some lifecycle transitions append a system message to the timeline:
  • maintenance.started (automatic or API) appends an Information message: “Maintenance started.”
  • maintenance.completed (automatic or API) appends a Resolved message: “Maintenance completed.”
  • maintenance.canceled (API) appends an Information message: “Maintenance canceled.”
These are visible on the public page exactly like operator-authored messages. They exist so the timeline reflects every state change without requiring the operator to remember.
IdempotencyLifecycle transitions reject double-application: POST /publish on an already-published incident returns 409 (already_published). Same for resolve, start, complete, cancel. Soft-delete returns 200 (idempotent).