All API endpoints require authentication via API key. Generate one from Settings. Include it as a Bearer token:
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.
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.
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
Every status page exposes a public JSON API — no authentication needed:
GET /status/:slug/api/status
Current status of all components + active incidents.
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.