1. Documentation
  2. HTTP API
  3. Status endpoints
ReadmeGitHub
  • Introduction
  • Quickstart
  • CLI
  • Configuration
  • Identity
  • Branding
  • Themes
  • Monitors
  • Checks and scheduling
  • Metrics and badges
  • Incidents
  • Maintenance
  • Notifications
  • Subscribers
  • React Router
  • Next.js
  • Astro
  • SQLite
  • Cloudflare D1
  • PostgreSQL
  • Schema and migrations
  • Cloudflare
  • Vercel
  • Self-hosting
  • API overview
  • Status endpoints
  • Incident endpoints
  • Maintenance endpoints
  • Subscriber endpoints
  • Badges, feeds and metrics
  • Admin endpoints
  • The check run
  • Uptime and history
  • Automatic incidents
  • Notification delivery
  • Public subscriptions

Status endpoints

Snapshots, summaries, monitors and uptime, with full payload shapes.

Use /status/summary for a compact dashboard response or /status for the full page snapshot. Monitor routes let you read one service and its uptime. These read endpoints are public and use the same snapshot cache as the page.

GET /status

The full public snapshot contains the monitors, daily history, incidents and maintenance shown on the page.

bash
curl https://status.acme.com/api/heyo-status/status
json
{  "generatedAt": "2026-01-01T12:00:00.000Z",  "retentionDays": 90,  "displayDays": 90,  "overall": "degraded",  "groups": [    { "name": "Web", "status": "operational", "monitors": ["Website", "Dashboard"] },    { "name": "API", "status": "degraded", "monitors": ["API", "Webhooks"] }  ],  "monitors": [    {      "name": "API",      "type": "http",      "description": "Public REST API.",      "group": "API",      "latestStatus": false,      "latestCheckedAt": "2026-01-01T11:55:00.000Z",      "latestLatencyMs": 142,      "uptimePercent": 99.82,      "uptimePercent24h": 97.2,      "uptimePercent7d": 99.6,      "uptimePercent30d": 99.8,      "uptimePercent90d": 99.82,      "avgLatencyMs": 118,      "days": [        {          "key": "2025-10-04",          "label": "Oct 4, 2025",          "status": "up",          "tooltip": "100% uptime — 288 checks",          "totalChecks": 288,          "downChecks": 0,          "downMinutes": 0,          "downPercent": 0        }      ],      "latencySeries": [        {          "key": "2026-01-01T11:00:00.000Z",          "label": "Jan 1, 2026, 11:00 UTC",          "at": "2026-01-01T11:00:00.000Z",          "latencyMs": 121,          "totalChecks": 12        }      ]    }  ],  "activeIncidents": [],  "scheduledMaintenances": [],  "hasConfig": true,  "hasData": true}
overall"operational" | "degraded" | "major-outage" | "maintenance"optional

Maintenance wins, then a critical incident, then any incident, then the monitors themselves.

daysDaySnapshot[]optional

Exactly displayDays entries, oldest first. status is up, down, degraded or empty.

latencySeriesLatencySample[]optional

Hourly averages over the last 24 hours while raw rows exist, otherwise daily averages over 7 days. Empty buckets are omitted.

hasConfig / hasDatabooleanoptional

Whether any public monitor is configured, and whether any check has landed. Themes use them for the onboarding state.

Private monitors never appear here.

GET /status/summary

A deliberately small payload for embeds, uptime widgets and dashboards — no day grid, no latency series.

bash
curl https://status.acme.com/api/heyo-status/status/summary
json
{  "generatedAt": "2026-01-01T12:00:00.000Z",  "overall": "operational",  "hasConfig": true,  "hasData": true,  "activeIncidents": 0,  "scheduledMaintenances": 1,  "groups": [{ "name": "Web", "status": "operational", "monitors": ["Website"] }],  "monitors": [    {      "name": "Website",      "type": "http",      "group": "Web",      "latestStatus": true,      "latestCheckedAt": "2026-01-01T11:55:00.000Z",      "latestLatencyMs": 96,      "uptimePercent": 99.98    }  ]}

activeIncidents and scheduledMaintenances are counts here, not arrays.

GET /monitors

The monitors array from the snapshot, unchanged.

bash
curl https://status.acme.com/api/heyo-status/monitors

GET /monitors/:name

One monitor, or 404 { "error": "Monitor not found." }. Percent-encode names with spaces.

bash
curl https://status.acme.com/api/heyo-status/monitors/APIcurl https://status.acme.com/api/heyo-status/monitors/Web%20App

GET /monitors/:name/uptime

Just the numbers, for an SLA report or a dashboard tile.

bash
curl https://status.acme.com/api/heyo-status/monitors/API/uptime
json
{  "name": "API",  "24h": 97.2,  "7d": 99.6,  "30d": 99.8,  "90d": 99.82,  "window": 99.82,  "displayDays": 90,  "avgLatencyMs": 118}

window is uptime across the configured display window, which is not always 90 days — displayDays tells you what it covers. A null means no checks exist for that period, which is different from 0.

GET /healthz

json
{ "ok": true }

Use this for a load-balancer probe, not service health. It only confirms that the API is serving; it doesn't query the database or check your monitors. Use /status/summary to read the actual status.

Caching

Snapshot reads are served from the in-process cache for cache.snapshotTtlMs (default 30 s). Check runs and admin mutations invalidate it. Responses carry no Cache-Control, so add your own edge caching if you need it — badges are the exception and set public, max-age=60 themselves.

Related

  • How uptime is calculated
  • Badges, feeds and metrics
  • Next.js page rendering
API overview< PreviousIncident endpointsNext >

Powered by heyo

On this page

GET /statusGET /status/summaryGET /monitorsGET /monitors/:nameGET /monitors/:name/uptimeGET /healthzCaching