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)
curl -fsS https://octoping.com/api/status-pages/YOUR_SLUG/publicThe 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
| Field | Type | Meaning |
|---|---|---|
name | string | The page's name. |
slug | string | The page's slug. |
page_title | string | The title shown on the page. |
page_description | string | The description shown on the page. |
company_url | string | The company website address set on the page. |
logo_url, header_image_url, favicon_url | string or null | Image addresses for the page's uploaded logo, header and favicon, relative to the API base. Null when the page has none. |
style_config | object | Appearance settings that OctoPing's own page uses. Treat the contents as opaque. |
custom_domain | string or null | The page's custom domain, if one is set. |
overall_status | string | The banner status. The values are listed below. |
items | array | The visible monitored items, in the order the page shows them. |
active_incidents | array | Incidents that aren't resolved, newest first. |
recent_incidents | array | Incidents resolved in the last 14 days, most recently resolved first. |
scheduled_maintenance | array | Maintenance in progress or starting within 7 days, for the items on this page only. At most 50 entries. |
last_updated | string | When this copy was built, as a UTC ISO 8601 timestamp. |
subscriptions_open | boolean | Whether the page is taking new email subscribers right now. |
overall_status
| Value | Shown as | Rule |
|---|---|---|
major_outage | Major Outage | At least one item is down. |
degraded | Some Systems Degraded | No item is down and at least one is degraded. |
maintenance | Under Maintenance | No item is down or degraded and at least one is under maintenance. |
operational | All Systems Operational | Everything 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.
| Field | Type | Meaning |
|---|---|---|
id | string | The item's id on this page. It isn't the site's own id. |
display_name | string | The name set for the item, or the site's URL or the heartbeat's name. |
item_type | string | webpage or heartbeat. |
current_status | string | One of the values below. |
uptime_percentage | number or null | Uptime 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_time | number or null | Average response time in milliseconds. Always null for a heartbeat. |
daily_status | array | One entry per day with checks, within the last 90 days. Always empty for a heartbeat. |
| current_status | Shown as | From |
|---|---|---|
operational | Operational | Online and Partial |
degraded | Degraded | Degraded |
down | Down | Offline |
maintenance | Under maintenance | Maintenance |
unknown | Unknown | Pending 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
| Field | Type | Meaning |
|---|---|---|
date | string | The day, as YYYY-MM-DD. |
status | string | error when any counted check failed, then maintenance, changed when the page content changed, otherwise success. |
total_checks | integer | The checks made that day. |
error_count | integer | The counted checks that failed. Maintenance checks aren't counted. |
change_count | integer | The 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.
| Field | Type | Meaning |
|---|---|---|
id | string | The incident's id. |
title | string | The incident's title. |
status | string | The lifecycle status: investigating, identified, monitoring, resolved. |
impact | string | The overall impact: none, minor, major, critical. |
started_at | string | When the incident started. |
resolved_at | string or null | When it was resolved. Null while it's open. |
updates | array | The timeline, each entry with id, status (one of the lifecycle statuses), body and created_at. |
affected_items | array | The 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, default20)offset(query, integer, optional, default0)
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.
| Field | Type | Meaning |
|---|---|---|
incidents | array | The incidents on this page of the history. |
total_count | integer | How 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
| Status | When |
|---|---|
| 200 | The page is published. |
| 404 | The slug doesn't exist or the page isn't published. The body is a detail message. |
| 429 | Too many requests to the same endpoint from one address. The body is a detail message. |
- For what each status means in the app, see statuses.
- For how uptime and outages are calculated, see uptime and outages.
Related
- DocsAPI overviewThe public endpoints OctoPing offers today, how they are authenticated, their limits and what is not available yet.
- DocsStatusesThe statuses a site and a heartbeat can have in the app and on a public status page, and the order in which the rules apply.
- DocsAdd your first site, alert and status pageAdd a site, get a first alert through the default email notification and publish a status page, using the app's own labels.
- FeatureWhite-label status pages with custom domains and subscribersPublish a status page in your client's branding, with incidents, scheduled maintenance, email subscribers, feeds and client contacts. Custom domains on paid plans.
- GuideShow live status on your own siteShow a client's live status inside your own website, portal or dashboard by reading their status page as JSON.