Status page JSON

Read a published status page and its incident history as JSON: the fields, pagination, caching and error responses.

Last reviewed

On this page

A published status page is also available as JSON. It's the same data OctoPing's own page renders, so you can show a client's status inside your own dashboard or app. This page is the reference for the two read endpoints and the fields they return.

Find the slug

Every status page has a slug. It's the Slug field under Basic Information on the page's settings, and the page itself is served at /status/{slug}. Only published pages are available. A page that's unpublished, or a slug that doesn't exist, returns HTTP 404 with {"detail": "Not Found"}.

Status page

GEThttps://octoping.com/api/status-pages/{slug}/public

Get Public Status Page

  • slug (path, string, required)
bash
curl -fsS https://octoping.com/api/status-pages/YOUR_SLUG/public

The response is cached for 60 seconds. Changes an operator makes to the page, its items or its incidents clear the cached copy, but the status of a monitored item can be up to 60 seconds behind. Read last_updated to see when the copy was built. The API address is the same when the page is served from a custom domain, because the domain itself has no API.

Top-level fields

FieldTypeMeaning
namestringThe page's name.
slugstringThe page's slug.
page_titlestringThe title shown on the page.
page_descriptionstringThe description shown on the page.
company_urlstringThe company website address set on the page.
logo_url, header_image_url, favicon_urlstring or nullImage addresses for the page's uploaded logo, header and favicon, relative to the API base. Null when the page has none.
style_configobjectAppearance settings that OctoPing's own page uses. Treat the contents as opaque.
custom_domainstring or nullThe page's custom domain, if one is set.
overall_statusstringThe banner status. The values are listed below.
itemsarrayThe visible monitored items, in the order the page shows them.
active_incidentsarrayIncidents that aren't resolved, newest first.
recent_incidentsarrayIncidents resolved in the last 14 days, most recently resolved first.
scheduled_maintenancearrayMaintenance in progress or starting within 7 days, for the items on this page only. At most 50 entries.
last_updatedstringWhen this copy was built, as a UTC ISO 8601 timestamp.
subscriptions_openbooleanWhether the page is taking new email subscribers right now.

overall_status

ValueShown asRule
major_outageMajor OutageAt least one item is down.
degradedSome Systems DegradedNo item is down and at least one is degraded.
maintenanceUnder MaintenanceNo item is down or degraded and at least one is under maintenance.
operationalAll Systems OperationalEverything else.

An item whose status is unknown counts as operational for this banner. An active incident that marks a component down or degraded changes that item's status first, so the banner follows it.

Items

Each entry in items describes one site or heartbeat.

FieldTypeMeaning
idstringThe item's id on this page. It isn't the site's own id.
display_namestringThe name set for the item, or the site's URL or the heartbeat's name.
item_typestringwebpage or heartbeat.
current_statusstringOne of the values below.
uptime_percentagenumber or nullUptime over the last 90 days. For a heartbeat it's the share of expected intervals that contained a ping. Null when there is nothing to measure.
average_response_timenumber or nullAverage response time in milliseconds. Always null for a heartbeat.
daily_statusarrayOne entry per day with checks, within the last 90 days. Always empty for a heartbeat.
current_statusShown asFrom
operationalOperationalOnline and Partial
degradedDegradedDegraded
downDownOffline
maintenanceUnder maintenanceMaintenance
unknownUnknownPending and Disabled

A heartbeat reads operational when healthy, down when it has missed its deadline, maintenance inside a window and unknown before its first judgment. An incident's component impact can override any of these: degraded performance and partial outage read degraded, and major outage reads down.

daily_status

FieldTypeMeaning
datestringThe day, as YYYY-MM-DD.
statusstringerror when any counted check failed, then maintenance, changed when the page content changed, otherwise success.
total_checksintegerThe checks made that day.
error_countintegerThe counted checks that failed. Maintenance checks aren't counted.
change_countintegerThe checks that detected a content change.

A day when OctoPing's own checker was refused but every probe region saw the site up (Partial in the app) is returned as success, or changed if the content changed that day. The vantage points page explains Partial.

Incidents

The incident arrays and the history endpoint use one shape. The incidents are the ones the operator posted on the page.

FieldTypeMeaning
idstringThe incident's id.
titlestringThe incident's title.
statusstringThe lifecycle status: investigating, identified, monitoring, resolved.
impactstringThe overall impact: none, minor, major, critical.
started_atstringWhen the incident started.
resolved_atstring or nullWhen it was resolved. Null while it's open.
updatesarrayThe timeline, each entry with id, status (one of the lifecycle statuses), body and created_at.
affected_itemsarrayThe components involved. Each has item_id, display_name and impact_status, which is one of degraded_performance, partial_outage, major_outage.

Scheduled maintenance

Each entry has an id, a name, starts_at and ends_at as UTC timestamps, the IANA timezone the window was scheduled in, is_active and affected_items. The affected items list only components shown on this page, each with item_id and display_name. The id identifies the occurrence.

Incident history

GEThttps://octoping.com/api/status-pages/{slug}/public/incidents

Get Public Incident History

  • slug (path, string, required)
  • limit (query, integer, optional, default 20)
  • offset (query, integer, optional, default 0)
bash
curl -fsS "https://octoping.com/api/status-pages/YOUR_SLUG/public/incidents?limit=20&offset=0"

The history lists resolved incidents only, most recently resolved first, in the incident shape above. Page through it with limit and offset. The default limit is 20 and the largest is 50. A limit outside that range is moved into it, and a negative offset is treated as 0.

FieldTypeMeaning
incidentsarrayThe incidents on this page of the history.
total_countintegerHow many resolved incidents the page has in total.

To read everything, request pages until offset reaches total_count. This endpoint isn't cached.

Limits and errors

StatusWhen
200The page is published.
404The slug doesn't exist or the page isn't published. The body is a detail message.
429Too many requests to the same endpoint from one address. The body is a detail message.