API Documentation

Base URL: https://uptimecove.com

GET /api/status/{slug}

Public. Returns status page and monitors with daily uptime. Cache-Control: no-store

{
  "page": "default",
  "monitors": [{ "id": 1, "name": "API", "status": "up", "dailyUptime": [...] }]
}

POST /api/monitors

Auth required. Create monitor. Body: name, url, method?, expected_status?, interval_seconds?, timeout_ms?, body_must_contain?, body_must_not_contain?, max_response_time_ms?, custom_headers? (JSON)

Form posts redirect to /dashboard, JSON returns 201.

PUT /api/monitors/{id}

Update monitor. Same fields as create, partial allowed.

POST /api/monitors/{id}/toggle · POST /api/monitors/{id}/delete

Pause/resume or delete. Returns 204 or 404.

POST /api/checks/run

Auth required. Forces checked batch for due monitors. Returns { checked, failed }

GET /api/status-pages · POST /api/status-pages

List/create status pages. Fields: title, slug, description, branding_logo_url, branding_theme, custom_domain, is_public

PUT /api/status-pages/{id} · DELETE /api/status-pages/{id}

Update/delete page. Default page protected if sole page.

PUT /api/status-pages/{id}/monitors

Set ordered monitor ids: { monitorIds: [1,2] }

GET /api/notification-channels · POST /api/notification-channels

Types: email, webhook, slack, discord. Config: url/webhook_url, to, endpoint etc.

POST /api/incidents/{id}/resolve · POST /api/incidents/{id}/updates

Resolve incident or add timeline update (message, author).

POST /api/maintenance · DELETE /api/maintenance/{id}

Maintenance windows to suppress alerts. Fields: title, monitor_id (null=global), start_at, end_at (unix sec or ISO), description.

Auth

Single admin token via ADMIN_TOKEN. Login POSTs to /api/auth/login sets uc_session HttpOnly session cookie (7d, Secure in prod, Lax). All /dashboard and /api/* except /api/status/* and /api/auth/* require it. Sessions table validates and revokes on token rotation.

See repo for OpenAPI JSON when available. PRs to improve docs welcome.