Status JSON
Public JSON endpoint for live status of a monitor or status page.
Widget status JSON
Public, CORS-enabled JSON API for embedding live status in your own dashboards or sites.
Monitor status
GET /widgets/status/monitor/{monitor_id_or_slug}
json{ "monitor": { "id": "mon_abc", "name": "API", "status": "up", "uptime_24h": 100.0, "uptime_7d": 99.97, "uptime_30d": 99.94, "response_time_p50_ms": 287, "response_time_p95_ms": 412, "last_check_at": "2026-04-17T20:01:23Z" }, "incidents": []}
Status page status
GET /widgets/status/page/{slug}
json{ "page": { "name": "Acme Status", "slug": "acme" }, "overall_status": "operational", "components": [ { "name": "Web App", "status": "operational" }, { "name": "API", "status": "degraded_performance" } ], "active_incidents": [ { "id": "inc_xyz", "title": "API latency", "severity": "minor", "started_at": "2026-04-17T19:50:00Z", "url": "https://status.acme.com/incidents/inc_xyz" } ]}
Status values
| Value | Meaning |
|---|---|
operational | All checks passing |
degraded_performance | Some checks slow or partial failures |
partial_outage | Some regions failing |
major_outage | All regions failing |
under_maintenance | Planned maintenance window active |
Caching + rate limiting
- Cached at edge for 30 seconds
- Rate limited to 60 requests/min/IP (use server-side polling, not per-pageview)
CORS
Access-Control-Allow-Origin: * — safe to call from browser JS.
javascriptfetch("https://happyuptime.com/api/v1/widgets/status/page/acme") .then(r => r.json()) .then(data => render(data.overall_status));