Public endpoints
The visitor-facing surfaces a published status page exposes on its mounted host - the rendered page, the status.json feed, and the embeddable SVG badge.
Public endpoints
A published status page exposes three unauthenticated surfaces on its mounted host. None take an API key; access is governed by the page row (published, not suspended, not expired). Replace <your-domain> below with your mounted host (your custom domain or <slug>.hep.gg).
The rendered page
https://<your-domain>/PublicThe status page itself: a dark, mobile-friendly render with an overall status hero, a color legend, the component tree with 90-day uptime bars, and the incident timeline.
- No body, no query parameters. The page is driven entirely by the
Hostheader. - Returns
200withContent-Type: text/html; charset=utf-8andCache-Control: no-store. - If no published page matches the host, the request falls through (404, or a redirect to
hep.ggfor unmatched custom domains).
Live auto-refresh
The rendered page refreshes itself when you change anything, so a visitor who leaves the tab open sees new incidents, posted updates, and status changes without reloading. It embeds a small poller that checks the version endpoint every 30 to 45 seconds (and immediately when the tab regains focus) and reloads only when the page's fingerprint actually changes. Detection lands within about a minute of your edit.
The poll is visibility-aware (background tabs are skipped) and jittered so a crowd of visitors does not synchronize their requests.
Live version
https://<your-domain>/status-version.jsonPublicA tiny opaque fingerprint of everything a visitor sees. It changes whenever you edit the page, add or remove a component, change a status, or post an incident update. It is what the rendered page polls; you can also poll it yourself instead of diffing the full status.json.
- Returns
200withCache-Control: no-storeand a singlevstring. - The value is opaque: compare it for equality against your last-seen value, do not parse it.
{ "v": "mpsgxslc-13.mpsjyydk-1.mpsjxznk-2.mpsjxyvs" }Status JSON
https://<your-domain>/status.jsonPublicA compact JSON snapshot of the page, suitable for dashboards, uptime bots, or your own integrations.
- Returns
200withCache-Control: no-store. status.indicatoris the worst component status;componentslists each leaf component;incidentslists currently-active (unresolved) incidents.versionis the same fingerprint served by/status-version.json, so a poller can watch this one feed for changes.
{
"page": { "name": "Acme", "url": "https://status.acme.example" },
"version": "mpsgxslc-13.mpsjyydk-1.mpsjxznk-2.mpsjxyvs",
"status": { "indicator": "operational", "description": "All Systems Operational" },
"components": [
{ "id": "c_api", "name": "API", "status": "operational", "label": "Online" }
],
"incidents": [
{
"id": "i_123",
"name": "Elevated API latency",
"impact": "minor",
"state": "monitoring",
"startedAt": "2026-05-30T18:00:00.000Z",
"latestUpdate": "We are monitoring the fix."
}
]
}Status badge
https://<your-domain>/badge.svgPublicA shields-style SVG badge showing the page's overall status, colored to match. Drop it in a README or site footer.
- Returns
200withContent-Type: image/svg+xml; charset=utf-8and a short cache (max-age=60). - The label reads the overall summary (e.g. "All Systems Operational"); the color follows the worst component status.
[](https://your-domain.example)