Status page public API

Read your incidents and scheduled maintenances as JSON, straight from your status page.

Every status page serves two public JSON endpoints alongside the page itself. They need no API key, they return the same history your visitors see, and they use the response shapes statuspage.io publishes, so integrations written against a statuspage.io page keep working once you switch.

Reach for them when:

  • You are building your own status widget, banner, or in-app notice
  • An internal tool needs to mirror your incidents without scraping HTML
  • A dashboard tracks the status of several vendors, yours among them
  • You are migrating from statuspage.io and would rather not rewrite what already consumes the feed

Endpoints

EndpointReturns
GET /api/v1/incidents.jsonIncidents and outages
GET /api/v1/scheduled_maintenances.jsonMaintenance windows

Both live on your status page domain, so a page on status.acme.com serves https://status.acme.com/api/v1/incidents.json. The Hyperping-hosted slug works the same way.

Incidents

curl https://meta.hyperping.app/api/v1/incidents.json
Response200 OK
[
  {
    "id": "6kddbqdycckq",
    "start_date": "2026-07-06T23:18:06.000Z",
    "end_date": "2026-07-07T00:38:17.000Z",
    "name": "EU voice call phone number unavailable",
    "title": { "en": "EU voice call phone number unavailable" },
    "type": "incident",
    "status": "resolved",
    "link": "https://meta.hyperping.app/history/inci_MiabOZOm5ObN2h"
  }
]

Query parameters

ParameterTypeDefaultDescription
statusstringallFilter by incident status
typestringallFilter by incident type
limitinteger50Results per page, 50 maximum
pageinteger1Page number

Status values

ValueMeaning
ongoingNo resolved update yet
resolvedClosed with a resolved update
investigatingCurrently being investigated
identifiedCause has been identified
updateProgress update posted
monitoringFix deployed, watching for stability

Type values

outage for service outages, incident for everything else.

Examples

  • /api/v1/incidents.json?status=ongoing returns only what is unresolved right now
  • /api/v1/incidents.json?type=outage&status=resolved returns resolved outages
  • /api/v1/incidents.json?limit=20&page=2 pages through the history

Scheduled maintenances

curl "https://meta.hyperping.app/api/v1/scheduled_maintenances.json?status=upcoming"
Response200 OK
[
  {
    "id": "t4btxayrds4g",
    "start_date": "2026-08-15T14:30:00.000Z",
    "end_date": "2026-08-15T18:30:00.000Z",
    "name": "API infrastructure upgrade",
    "title": { "en": "API infrastructure upgrade" },
    "status": "upcoming",
    "link": "https://meta.hyperping.app/history/mw_6ckvtMuyDhMfto"
  }
]

Query parameters

Same limit and page as incidents, plus a status filter with its own values:

ValueMeaning
upcomingScheduled for the future
inprogressRunning right now
completedFinished
allEvery maintenance window

With no status parameter you get upcoming and ongoing windows only, which is what a "what is coming up" widget usually wants.

Response fields

FieldTypeDescription
idstringStable identifier for the entry
start_datestringISO 8601 start of the incident or window
end_datestringISO 8601 end, once there is one
namestringTitle in the page's default language
titleobjectTitle keyed by language code, for multilingual pages
typestringIncidents only: outage or incident
statusstringCurrent status, from the values above
linkstringPermalink to the entry on your status page

A live reference on your own page

Every status page hosts its own copy of this reference at /docs, filled in with your domain. Send integrators to https://status.acme.com/docs and they get the endpoints, parameters, and example responses without needing a Hyperping account.

Access and caching

Both endpoints are open to anonymous requests on public pages and send Access-Control-Allow-Origin: *, so a browser front-end can call them directly without a proxy.

On a protected page they answer 401 unless the request carries a valid session, the same rule the feeds follow. Publishing an incident update clears the cache immediately, so a poller sees a new incident on its next request.

Troubleshooting

The endpoint returns a 401

The status page is password or SSO protected. These endpoints only serve anonymous requests on public pages.

I get fewer results than expected

limit is capped at 50 per request. Page through with page=2, page=3, and so on rather than raising the limit.

Maintenance windows I know about are missing

Without a status parameter the endpoint returns upcoming and ongoing windows only. Add ?status=all to include completed ones.

I need the current up or down state, not history

Use the status.json endpoint. It returns a single indicator and an uptime percentage, which is what a badge or a health check wants.

Next steps