On-Call API › Maintenance windows
Schedule a maintenance window
Schedules a maintenance window of at most 30 days. While it runs, alerts are
still recorded but nobody is paged, unless silence_oncall is false.
Optionally it also fans out: status_page_id publishes a scheduled
maintenance (with affected_component_ids and message) on that status page,
and uptime_monitor_ids silences those uptime monitors for the window.
Deleting the window undoes both.
Permission (API-key scope): oncall:maintenance:write.
Authorization
bearerAuth(oncall:maintenance:write)apiKeyHeader(oncall:maintenance:write)
Request body required
titlestring requiredstarts_atstring (date-time) requiredends_atstring (date-time) requiredAfterstarts_at, at most 30 days later.silence_oncallbooleanstatus_page_idstringAlso publish a scheduled maintenance on this status page.affected_component_idsarray of stringmessagestringThe status-page maintenance text.uptime_monitor_idsarray of string
Responses
201
The window.
dataMaintenanceWindow requiredShow MaintenanceWindow properties
idstringorg_idstringtitlestringbodystringWhat the maintenance does.starts_atstring (date-time)ends_atstring (date-time)created_bystringcreated_atstring (date-time)ended_atstring (date-time)Set when the window was ended early.silence_oncallbooleanWhether paging is held back during the window.
successboolean required
400
The body is not JSON (INVALID_BODY); title, starts_at or ends_at is missing (VALIDATION_FAILED); or the window ends before it starts or is longer than 30 days (INVALID_WINDOW).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.
401
No API key was sent, or it is unknown, revoked or expired (UNAUTHORIZED).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.
403
The key lacks the scope this endpoint needs (FORBIDDEN).
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.
429
Too many requests (RATE_LIMITED). Wait Retry-After seconds.
Retry-AfterintegerSeconds to wait.
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.
500
Something went wrong on EvoHub's side (INTERNAL_ERROR). Retry later.
errorobject requiredcodestring requiredMachine-readable code. Branch on this.messagestring requiredHuman-readable explanation.
Example request
curl -X POST 'https://evohub.io/api/v1/maintenance-windows' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <TOKEN>' \
-d '{
"title": "Database upgrade",
"ends_at": "2026-10-13T00:00:00Z",
"message": "Expect a few minutes of read-only mode.",
"starts_at": "2026-10-12T22:00:00Z",
"status_page_id": "page_1f2e3d4c",
"uptime_monitor_ids": [
"mon_7a8b9c"
],
"affected_component_ids": [
"comp_api"
]
}'