1. Documentation
  2. HTTP API
  3. Maintenance endpoints
ReadmeGitHub
  • Introduction
  • Quickstart
  • CLI
  • Configuration
  • Identity
  • Branding
  • Themes
  • Monitors
  • Checks and scheduling
  • Metrics and badges
  • Incidents
  • Maintenance
  • Notifications
  • Subscribers
  • React Router
  • Next.js
  • Astro
  • SQLite
  • Cloudflare D1
  • PostgreSQL
  • Schema and migrations
  • Cloudflare
  • Vercel
  • Self-hosting
  • API overview
  • Status endpoints
  • Incident endpoints
  • Maintenance endpoints
  • Subscriber endpoints
  • Badges, feeds and metrics
  • Admin endpoints
  • The check run
  • Uptime and history
  • Automatic incidents
  • Notification delivery
  • Public subscriptions

Maintenance endpoints

Read scheduled maintenance publicly and manage windows with an admin token.

Visitors can read upcoming maintenance at /maintenance. To schedule or change a window over HTTP, send an admin bearer token to /admin/maintenance. If maintenance is disabled, all these routes return 404 { "error": "This feature is disabled." }.

GET /maintenance

Returns upcoming and in-progress windows. Completed work doesn't appear in this public list.

bash
curl https://status.acme.com/api/heyo-status/maintenance
json
[  {    "id": "mnt_71be90",    "title": "Database upgrade",    "description": "Read-only for about 30 minutes.",    "affectedMonitors": ["API", "Dashboard"],    "scheduledStart": "2026-02-01T02:00:00.000Z",    "scheduledEnd": "2026-02-01T03:00:00.000Z",    "status": "scheduled",    "createdAt": "2026-01-20T09:14:00.000Z"  }]

The returned status follows the clock when you read the list; you don't need to update a window just because its start time has passed.

POST /admin/maintenance

bash
curl -X POST https://status.acme.com/api/heyo-status/admin/maintenance \  -H "authorization: Bearer $ADMIN_TOKEN" \  -H "content-type: application/json" \  -d '{    "title": "Database upgrade",    "description": "Read-only for about 30 minutes.",    "affectedMonitors": ["API"],    "scheduledStart": "2026-02-01T02:00:00Z",    "scheduledEnd": "2026-02-01T03:00:00Z"  }'
titlestringrequired
descriptionstringoptional
affectedMonitorsstring[]required

Empty means every monitor.

scheduledStartISO-8601required
scheduledEndISO-8601required

Must be after scheduledStart.

Returns 201 and dispatches maintenance.scheduled, maintenance.starting or maintenance.completed depending on the derived status.

PATCH /admin/maintenance/:id

Any subset of title, description, affectedMonitors, scheduledStart, scheduledEnd and status. An empty body is rejected with 400 { "error": "At least one field must be provided." }.

bash
curl -X PATCH https://status.acme.com/api/heyo-status/admin/maintenance/mnt_71be90 \  -H "authorization: Bearer $ADMIN_TOKEN" \  -H "content-type: application/json" \  -d '{"status":"completed"}'

DELETE /admin/maintenance/:id

204 on success, 404 if unknown.

Every mutation invalidates the snapshot

The cached snapshot is dropped on each write, so the page and API agree immediately rather than after the TTL.

Related

  • Configure maintenance
  • Incident endpoints
  • CLI commands
Incident endpoints< PreviousSubscriber endpointsNext >

Powered by heyo

On this page

GET /maintenancePOST /admin/maintenancePATCH /admin/maintenance/:idDELETE /admin/maintenance/:id