Instatus
Post to and update maintenance and incidents on your status page through an HTTP REST API
Post to and update maintenance and incidents on your status page through an HTTP REST API
asyncapi: '2.6.0'
info:
title: Instatus Webhooks
version: '1.0.0'
description: |
AsyncAPI specification for the Instatus webhook surface. Instatus delivers
HTTP POST callbacks to subscriber-configured endpoints for incident
lifecycle events, scheduled maintenance lifecycle events, and component
status changes on a status page.
Each request is signed with an `x-instatus-webhook-signature` header
containing the HMAC-SHA256 digest of the raw JSON body using the
configured webhook secret. Subscribers should verify this signature
before processing the payload.
contact:
name: Instatus
url: https://instatus.com/help/webhooks
license:
name: Proprietary
url: https://instatus.com/legal/terms
defaultContentType: application/json
servers:
subscriber:
url: '{webhookUrl}'
protocol: https
description: |
Subscriber-controlled HTTPS endpoint configured in the Instatus
status page notification settings. Instatus is the producer; the
subscriber's URL receives POST requests.
variables:
webhookUrl:
description: Full HTTPS URL provided by the subscriber.
default: https://example.com/webhooks/instatus
channels:
incident:
description: |
Delivered when an incident is created or updated on the status page.
Covers the full incident lifecycle, including state transitions
across INVESTIGATING, IDENTIFIED, MONITORING, and RESOLVED.
subscribe:
operationId: receiveIncidentEvent
summary: Receive an incident lifecycle event.
bindings:
http:
type: request
method: POST
bindingVersion: '0.3.0'
message:
$ref: '#/components/messages/IncidentEvent'
maintenance:
description: |
Delivered when a scheduled maintenance is created or updated. Covers
lifecycle state transitions across NOTSTARTEDYET, INPROGRESS, and
COMPLETED.
subscribe:
operationId: receiveMaintenanceEvent
summary: Receive a maintenance lifecycle event.
bindings:
http:
type: request
method: POST
bindingVersion: '0.3.0'
message:
$ref: '#/components/messages/MaintenanceEvent'
component:
description: |
Delivered when a component status changes. Includes the previous
and new status alongside the component record.
subscribe:
operationId: receiveComponentEvent
summary: Receive a component status change event.
bindings:
http:
type: request
method: POST
bindingVersion: '0.3.0'
message:
$ref: '#/components/messages/ComponentEvent'
components:
messages:
IncidentEvent:
name: IncidentEvent
title: Incident lifecycle event
summary: Fired when an incident is added or updated.
contentType: application/json
headers:
$ref: '#/components/schemas/WebhookHeaders'
payload:
$ref: '#/components/schemas/IncidentPayload'
MaintenanceEvent:
name: MaintenanceEvent
title: Maintenance lifecycle event
summary: Fired when a scheduled maintenance is added or updated.
contentType: application/json
headers:
$ref: '#/components/schemas/WebhookHeaders'
payload:
$ref: '#/components/schemas/MaintenancePayload'
ComponentEvent:
name: ComponentEvent
title: Component status change event
summary: Fired when a component's status changes.
contentType: application/json
headers:
$ref: '#/components/schemas/WebhookHeaders'
payload:
$ref: '#/components/schemas/ComponentPayload'
schemas:
WebhookHeaders:
type: object
properties:
x-instatus-webhook-signature:
type: string
description: |
HMAC-SHA256 signature of the raw JSON body computed with the
subscriber's webhook secret. Used to verify authenticity and
detect payload tampering.
Content-Type:
type: string
enum:
- application/json
required:
- x-instatus-webhook-signature
- Content-Type
Meta:
type: object
description: Common metadata included on every webhook payload.
properties:
unsubscribe:
type: string
format: uri
description: URL the subscriber can use to unsubscribe.
documentation:
type: string
format: uri
description: Link to the webhook format documentation.
Page:
type: object
description: Status page summary included on every webhook payload.
properties:
id:
type: string
description: Unique status page identifier.
status_indicator:
type: string
description: Page-level status indicator.
enum:
- UP
- HASISSUES
- UNDERMAINTENANCE
status_description:
type: string
description: Human-readable description of the current page status.
url:
type: string
format: uri
description: Public URL of the status page.
IncidentStatus:
type: string
description: Incident lifecycle status.
enum:
- INVESTIGATING
- IDENTIFIED
- MONITORING
- RESOLVED
MaintenanceStatus:
type: string
description: Maintenance lifecycle status.
enum:
- NOTSTARTEDYET
- INPROGRESS
- COMPLETED
ComponentStatus:
type: string
description: Component operational status.
enum:
- OPERATIONAL
- UNDERMAINTENANCE
- DEGRADEDPERFORMANCE
- PARTIALOUTAGE
- MAJOROUTAGE
IncidentUpdate:
type: object
properties:
id:
type: string
incident_id:
type: string
body:
type: string
description: Update body text shared with subscribers.
status:
$ref: '#/components/schemas/IncidentStatus'
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
Incident:
type: object
properties:
id:
type: string
name:
type: string
url:
type: string
format: uri
status:
$ref: '#/components/schemas/IncidentStatus'
impact:
type: string
description: Impact level of the incident.
backfilled:
type: boolean
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
resolved_at:
type: string
format: date-time
nullable: true
incident_updates:
type: array
items:
$ref: '#/components/schemas/IncidentUpdate'
MaintenanceUpdate:
type: object
properties:
id:
type: string
maintenance_id:
type: string
body:
type: string
status:
$ref: '#/components/schemas/MaintenanceStatus'
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
Maintenance:
type: object
properties:
id:
type: string
name:
type: string
url:
type: string
format: uri
status:
$ref: '#/components/schemas/MaintenanceStatus'
impact:
type: string
backfilled:
type: boolean
duration:
type: string
description: Planned maintenance window duration.
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
resolved_at:
type: string
format: date-time
nullable: true
maintenance_updates:
type: array
items:
$ref: '#/components/schemas/MaintenanceUpdate'
Component:
type: object
properties:
id:
type: string
name:
type: string
status:
$ref: '#/components/schemas/ComponentStatus'
created_at:
type: string
format: date-time
ComponentUpdate:
type: object
properties:
component_id:
type: string
new_status:
$ref: '#/components/schemas/ComponentStatus'
created_at:
type: string
format: date-time
IncidentPayload:
type: object
required:
- meta
- page
- incident
properties:
meta:
$ref: '#/components/schemas/Meta'
page:
$ref: '#/components/schemas/Page'
incident:
$ref: '#/components/schemas/Incident'
MaintenancePayload:
type: object
required:
- meta
- page
- maintenance
properties:
meta:
$ref: '#/components/schemas/Meta'
page:
$ref: '#/components/schemas/Page'
maintenance:
$ref: '#/components/schemas/Maintenance'
ComponentPayload:
type: object
required:
- meta
- page
- component_update
- component
properties:
meta:
$ref: '#/components/schemas/Meta'
page:
$ref: '#/components/schemas/Page'
component_update:
$ref: '#/components/schemas/ComponentUpdate'
component:
$ref: '#/components/schemas/Component'