Status Pages API
Status pages publish the live health of selected monitors at a public (or private) URL. This page documents the public status endpoint that any client can read without authentication, plus the User API endpoints for listing and reading your status pages.
There are three distinct surfaces, and they do not share the same host or auth:
| Surface | Endpoint | Auth | Host |
|---|---|---|---|
| Public status data | GET /api/status/{slug} |
None | api.statusradar.dev |
| User API (read) | GET /v1/status-pages, GET /v1/status-pages/{id} |
Authorization: Bearer <token> |
api.statusradar.dev |
| Human-facing page | GET /status/{slug} |
None (public pages) | statusradar.dev |
Status pages themselves are created and edited from the dashboard, not the API β the User API exposes them read-only. See Managing status pages.
Public Status Endpoint
GET /api/status/{slug}
Returns the published state of a status page identified by its slug. No authentication. Only pages with is_public = true are served; a private or unknown slug returns 404.
curl https://api.statusradar.dev/v1/status/my-status-page
Path parameters
| Parameter | Type | Description |
|---|---|---|
slug |
string | The page's unique URL slug (lowercase, a-z0-9-_). |
Response fields
The payload describes the page and the monitors assigned to it.
| Field | Type | Description |
|---|---|---|
slug |
string | Unique URL slug for the page. |
title |
string | Display title. |
description |
string | null | Optional description shown under the title. |
is_public |
boolean | Whether the page is publicly readable. The endpoint only ever returns true here. |
language |
string | Display language, ISO 639-1 (e.g. en, ru, es). |
show_history_days |
integer | Length of the uptime history window in days. One of 30, 60, 90, 180, 365. |
theme |
object | Theme settings (see below). |
overall_status |
string | Roll-up across all monitors: operational or partial. |
monitors |
array | Monitors assigned to the page, grouped by their group_name. |
incidents |
array | Up to the 10 most recent incidents affecting page monitors. |
uptime_history |
array | Daily uptime points for the last show_history_days days. |
theme object
| Field | Type | Description |
|---|---|---|
primary_color |
string | Hex accent color, e.g. #10b981. |
layout |
string | Layout/theme name, e.g. modern-light. |
monitors[] object
Each monitor entry combines the monitor definition with its per-page display settings and live status.
| Field | Type | Description |
|---|---|---|
id |
integer | Monitor ID. |
name |
string | Monitor name. |
display_name |
string | null | Optional override shown on this page instead of name. |
group_name |
string | Group the monitor is displayed under (defaults to General). |
current_status |
string | operational, down, or unknown. |
response_time_ms |
number | null | Latest response time in milliseconds. |
last_check |
string | null | Timestamp of the last check. |
show_uptime |
boolean | Whether the uptime bar is shown for this monitor. |
show_response_time |
boolean | Whether the response-time figure is shown. |
uptime_history[] object
| Field | Type | Description |
|---|---|---|
date |
string | Calendar day, YYYY-MM-DD. |
uptime |
number | null | Uptime percentage for that day, or null when no data exists. |
hasData |
boolean | Whether metrics were recorded for that day. |
Example response
{
"slug": "my-status-page",
"title": "Acme Status",
"description": "Live status of the Acme platform.",
"is_public": true,
"language": "en",
"show_history_days": 90,
"theme": {
"primary_color": "#10b981",
"layout": "modern-light"
},
"overall_status": "operational",
"monitors": [
{
"id": 42,
"name": "API",
"display_name": "Public API",
"group_name": "Core",
"current_status": "operational",
"response_time_ms": 128,
"last_check": "2026-06-23T09:14:02Z",
"show_uptime": true,
"show_response_time": true
},
{
"id": 43,
"name": "Website",
"display_name": null,
"group_name": "Core",
"current_status": "down",
"response_time_ms": null,
"last_check": "2026-06-23T09:13:55Z",
"show_uptime": true,
"show_response_time": false
}
],
"incidents": [
{
"id": 9,
"monitor_name": "Website",
"title": "Elevated error rate",
"status": "investigating",
"severity": "major",
"started_at": "2026-06-23T09:00:00Z"
}
],
"uptime_history": [
{ "date": "2026-06-22", "uptime": 100, "hasData": true },
{ "date": "2026-06-23", "uptime": 99.86, "hasData": true }
]
}
When any assigned monitor is
down,overall_statusbecomespartialand that monitor's group is also reported aspartial. Only active monitors (is_active = true) appear in the payload.
Errors
| Status | Meaning |
|---|---|
404 |
No public status page exists for that slug (unknown slug or the page is private). |
User API β Status Pages
These endpoints require a user API token. Generate one at Dashboard β Settings β API (/dashboard/settings/api) and send it as a Bearer token. Results are scoped to the status pages your account and team own. The User API is read-only for status pages; create and edit them from the dashboard.
Authorization: Bearer YOUR_API_TOKEN
List status pages
GET /v1/status-pages
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://api.statusradar.dev/v1/status-pages
Returns the status pages owned by your team, including both public and private pages, each with its slug, title, is_public, show_history_days, language, theme, and the count of assigned monitors.
Get a status page
GET /v1/status-pages/{id}
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://api.statusradar.dev/v1/status-pages/12
Returns a single status page by numeric id with its full configuration and assigned monitors. Returns 404 if the page does not exist or is not owned by your team.
| Parameter | Type | Description |
|---|---|---|
id |
integer | Numeric status page ID (not the slug). |
Status Page Fields
These fields define a status page. They are set in the dashboard and surfaced by the endpoints above.
| Field | Type | Default | Description |
|---|---|---|---|
slug |
string | β | Unique URL slug, 3β100 chars, a-z0-9-_ (lowercased on save). Drives /status/{slug} and /api/status/{slug}. |
title |
string | β | Display title, 3β255 chars. |
description |
string | null | null |
Optional description, up to 1000 chars. |
is_public |
boolean | true |
Public pages are served by the public endpoint and at /status/{slug}; private pages are not. |
language |
string | en |
Display language (ISO 639-1). Sets the locale of the rendered page. |
show_history_days |
integer | 90 |
Uptime history window. Allowed values: 30, 60, 90, 180, 365. Any other value falls back to 90. |
theme.primary_color |
string | #10b981 |
Accent color (hex). |
theme.layout |
string | modern-light |
Layout/theme name. |
monitors |
array | [] |
Monitors assigned to the page. Each assignment can override the display name and toggle the uptime / response-time widgets. |
Per-monitor display settings
When you assign a monitor to a page, these per-assignment settings control how it appears:
| Setting | Type | Default | Description |
|---|---|---|---|
display_name |
string | null | null |
Override shown instead of the monitor's name. |
group_name |
string | General |
Section heading the monitor is grouped under. |
order_index |
integer | 0 |
Sort order within the group. |
show_uptime |
boolean | true |
Show the uptime history bar. |
show_response_time |
boolean | true |
Show the latest response time. |
Managing Status Pages (Dashboard)
Create and configure status pages from the dashboard β these actions are not exposed on the public/User API:
- Create β
Dashboard β Status Pages β Create(/dashboard/status-pages/create). Settitle,slug,description, visibility, language, history window, and theme. - Edit β
/dashboard/status-pages/{slug}/edit. - Assign monitors β
/dashboard/status-pages/{slug}/manage-monitors. Pick monitors and set per-monitor display options. - Delete β removes the page and its monitor assignments.
Status page creation is subject to your plan's status-page quota; reaching the limit prompts an upgrade. See Status Pages.
Public Page URL
Every public status page is also viewable as an HTML page at:
https://statusradar.dev/status/{slug}
This is the human-facing version of the same data returned by GET /api/status/{slug} β share it with your users. Private pages return 404 at this URL.
Next Steps
- API Overview β the full API surface and base URLs
- API Authentication β token types and how to send them
- Status Pages β building and customizing status pages
- Monitors β create the monitors you assign to a page
- Alerts β alerting that surfaces as incidents on a page