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

ValueMeaning
operationalAll checks passing
degraded_performanceSome checks slow or partial failures
partial_outageSome regions failing
major_outageAll regions failing
under_maintenancePlanned 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.

javascript
fetch("https://happyuptime.com/api/v1/widgets/status/page/acme") .then(r => r.json()) .then(data => render(data.overall_status));
Ask a question... ⌘I