API Documentation

Authentication

All API endpoints require authentication via API key. Generate one from Settings. Include it as a Bearer token:

Authorization: Bearer uf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Pages

GET /api/pages

List all your status pages.

POST /api/pages

Create a new status page. Body: {"name": "...", "description": "..."}

DELETE /api/pages/:id

Delete a status page and all its data.

Components

GET /api/components/:pageId

List components for a page.

POST /api/components/:pageId

Add a component. Body: {"name": "API", "description": "..."}

PUT /api/components/:pageId/:id

Update component status. Body: {"status": "operational"}
Valid statuses: operational, degraded, partial_outage, major_outage, maintenance

DELETE /api/components/:pageId/:id

Remove a component.

Incidents

POST /api/incidents/:pageId

Create an incident. Body: {"title": "...", "impact": "minor", "message": "...", "component_ids": [...]}
Impact levels: none, minor, major, critical

POST /api/incidents/:pageId/:id/updates

Post an update. Body: {"status": "identified", "message": "..."}
Statuses: investigating, identified, monitoring, resolved

Public API

Every status page exposes a public JSON API — no authentication needed:

GET /status/:slug/api/status

Current status of all components + active incidents.

CronSafe Integration

Link a CronSafe monitor to an Upfront component. When the monitor's status changes, the component updates automatically.

POST /api/integrations/:pageId

Create a link. Body: {"component_id": "...", "cronsafe_monitor_slug": "..."}
Returns a webhook URL to configure in CronSafe.

GET /api/integrations/:pageId

List all CronSafe integrations for a page.