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

GEThttps://<your-domain>/Public
Server-rendered public status page.

The 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 Host header.
  • Returns 200 with Content-Type: text/html; charset=utf-8 and Cache-Control: no-store.
  • If no published page matches the host, the request falls through (404, or a redirect to hep.gg for 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

GEThttps://<your-domain>/status-version.jsonPublic
Cheap change fingerprint the page polls to auto-refresh.

A 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 200 with Cache-Control: no-store and a single v string.
  • The value is opaque: compare it for equality against your last-seen value, do not parse it.
200 response
{ "v": "mpsgxslc-13.mpsjyydk-1.mpsjxznk-2.mpsjxyvs" }

Status JSON

GEThttps://<your-domain>/status.jsonPublic
Machine-readable status snapshot.

A compact JSON snapshot of the page, suitable for dashboards, uptime bots, or your own integrations.

  • Returns 200 with Cache-Control: no-store.
  • status.indicator is the worst component status; components lists each leaf component; incidents lists currently-active (unresolved) incidents.
  • version is the same fingerprint served by /status-version.json, so a poller can watch this one feed for changes.
200 response
{
  "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."
    }
  ]
}
curl
curl https://your-domain.example/status.json

Status badge

GEThttps://<your-domain>/badge.svgPublic
Embeddable SVG status badge.

A shields-style SVG badge showing the page's overall status, colored to match. Drop it in a README or site footer.

  • Returns 200 with Content-Type: image/svg+xml; charset=utf-8 and a short cache (max-age=60).
  • The label reads the overall summary (e.g. "All Systems Operational"); the color follows the worst component status.
Markdown
[![Status](https://your-domain.example/badge.svg)](https://your-domain.example)