API Documentation

Integrate StatusHive into your workflow. Manage monitors, incidents, and status pages programmatically.

Authentication

All API requests require a Supabase access token. Sign in to get your token, then pass it in the Authorization header.

# 1. Get your access token curl https://statushive.app/auth/v1/token?grant_type=password \ -H "apikey: YOUR_ANON_KEY" \ -d '{"email":"you@example.com","password":"..."}' # 2. Use it in API requests curl https://statushive.app/api/monitors \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Monitors

get/api/monitors

List all your monitors. Supports filtering by active status and pagination.

# Response { "monitors": [...], "total": 12 }
post/api/monitors

Create a new uptime monitor. URL must be public HTTP/HTTPS.

# Request body { "name": "My Site", "url": "https://example.com", "interval_seconds": 60 }
# Response { "monitor": { "id": "...", "name": "My Site", ... } }
get/api/monitors/:id

Get a single monitor with 30-day uptime stats and average response time.

# Response { "monitor": {...}, "stats": { "uptime_30d": "99.95", "avg_response_ms": 245 } }
put/api/monitors/:id

Update a monitor's configuration (name, URL, method, interval, etc.).

# Request body { "name": "My Site", "url": "https://example.com", "method": "GET", "active": true }
delete/api/monitors/:id

Permanently delete a monitor and all its data.

# Response { "deleted": true }
get/api/monitors/:id/heartbeats

Get recent check results for a monitor.

# Response { "heartbeats": [{ "status": 1, "response_time": 234, "status_code": 200, ... }] }

Incidents

get/api/incidents

List all your incidents. Filter by status, with pagination.

# Response { "incidents": [...], "total": 5 }
post/api/incidents

Create a new incident. Optionally include an initial status update message.

# Request body { "title": "API Outage", "severity": "major", "status": "investigating", "message": "Looking into it" }
get/api/incidents/:id

Get a single incident with all its status updates.

# Response { "incident": { ..., "incident_updates": [...] } }
put/api/incidents/:id

Update an incident's status or severity. Setting status to 'resolved' auto-sets resolved_at.

# Request body { "status": "resolved" }
delete/api/incidents/:id

Permanently delete an incident and all its updates.

# Response { "deleted": true }
post/api/incidents/:id/updates

Add a status update to an incident. Also updates the parent incident status.

# Request body { "status": "monitoring", "message": "Fix deployed, monitoring." }

Status Pages

get/api/status-pages

List all your status pages.

# Response { "status_pages": [...] }
post/api/status-pages

Create a new status page. Optionally link monitors by ID.

# Request body { "name": "My Status", "slug": "my-status", "monitor_ids": ["id1", "id2"] }
get/api/status-pages/:id

Get a status page with its linked monitors.

# Response { "status_page": {...}, "monitors": [...] }
put/api/status-pages/:id

Update a status page's settings or linked monitors.

# Request body { "name": "Updated Name", "is_public": true }
delete/api/status-pages/:id

Permanently delete a status page.

# Response { "deleted": true }

Error Codes

All errors return a JSON object with an "error" field.

CodeMeaning
400Bad request — invalid or missing parameters
401Unauthorized — missing or invalid token
403Forbidden — plan limit reached or resource not owned
404Not found
409Conflict — slug already taken
500Internal server error

Plan Limits

FeatureFreeProPro
Monitors1050200
Check interval3 min1 min30 sec
Status pages15Unlimited
History retention7 days90 days365 days

AI agents can access our machine-readable API reference at /llms.txt