StatusPage.me Help Center

Popular topics: creating a status page, connecting monitors, automatic incidents, custom domains, integrations and billing.

StatusPage.me Mar 14, 2026 API

Maintenances API

Full CRUD access to maintenance windows. Requires maintenances:read or maintenances:write scope.


List maintenances

GET /user/api/v1/maintenances

Required scope: maintenances:read

Query parameters:

ParameterDescription
status_page_idFilter by status page UUID
created_afterReturn only windows created after this RFC3339 timestamp

Example:

curl -H "Authorization: Bearer spk_..." \
  https://statuspage.me/user/api/v1/maintenances

Get a single maintenance

GET /user/api/v1/maintenances/:id

Required scope: maintenances:read


Create a maintenance window

POST /user/api/v1/maintenances

Required scope: maintenances:write

Request body:

{
  "status_page_id": "550e8400-e29b-41d4-a716-446655440000",
  "title": "Scheduled database upgrade",
  "message": "We will be performing a database upgrade during this window.",
  "start_at": "2026-03-20T02:00:00Z",
  "end_at": "2026-03-20T04:00:00Z",
  "notify_subscribers": true,
  "affected_components": "component-id-1,component-id-2",
  "affected_monitor_ids": "42,84"
}
FieldRequiredDescription
status_page_idYesUUID of the status page
titleYesShort description
start_atYesRFC3339 start time
end_atYesRFC3339 end time
messageNoLonger description shown to subscribers
notify_subscribersNoSend email to subscribers (default: false)
affected_componentsNoComma-separated component IDs; every component must belong to the status page
affected_monitor_idsNoComma-separated monitor IDs shown as affected

Response: 201 Created with the created maintenance object. To make a create safe to retry, send a unique Idempotency-Key header; see Authenticated REST API Overview.


Update a maintenance window

PATCH /user/api/v1/maintenances/:id

Required scope: maintenances:write

Request body (all fields optional):

{
  "title": "Extended database upgrade",
  "end_at": "2026-03-20T06:00:00Z",
  "affected_monitor_ids": "42,84"
}

You can update affected_components and affected_monitor_ids as comma-separated strings. Send either as an empty string to clear it. Sending message as an empty string clears the maintenance message.


Delete a maintenance window

DELETE /user/api/v1/maintenances/:id

Required scope: maintenances:write


Automating maintenance from CI/CD

A common use case is to create a maintenance window automatically before a deployment:

# Start maintenance
MAINT_ID=$(curl -s -X POST \
  -H "Authorization: Bearer $SPK_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"title\":\"Deploy v2.5.0\",\"status_page_id\":\"$PAGE_ID\",\"start_at\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"end_at\":\"$(date -u -d '+30 minutes' +%Y-%m-%dT%H:%M:%SZ)\"}" \
  https://statuspage.me/user/api/v1/maintenances | jq -r '.data.id')

# ... run deployment ...

# Delete maintenance when done
curl -s -X DELETE \
  -H "Authorization: Bearer $SPK_TOKEN" \
  https://statuspage.me/user/api/v1/maintenances/$MAINT_ID

Was this article helpful?