Status Pages API
Status pages let you communicate service uptime and incident history to your users through a branded, public-facing page. Each status page can display one or more monitors and supports subscriber notifications so your users are alerted when incidents occur.
Status Page Object
{
"id": "sp_abc123def456",
"orgId": "org_abc123",
"name": "Acme Cloud Status",
"slug": "acme-cloud",
"subdomain": null,
"customDomain": null,
"headerText": "Service Status for Acme Cloud",
"footerText": "Powered by Sentro",
"accentColor": "#00f0ff",
"isPublic": true,
"visibility": "PUBLIC",
"showUptime": true,
"showIncidents": true,
"showResponseTime": false,
"showMonitorType": true,
"uptimeHistoryDays": 90,
"createdAt": "2025-01-15T08:30:00.000Z",
"updatedAt": "2025-01-15T08:30:00.000Z",
"monitors": [
{
"id": "cly1abc2d0001abcdef012345",
"name": "Production API",
"status": "UP",
"sortOrder": 0,
"isVisible": true
}
]
}
| Field | Type | Description |
|---|---|---|
id | string | Unique status page identifier |
orgId | string | Organization that owns the status page |
name | string | Display name shown on the status page |
slug | string | URL-safe identifier (lowercase letters, numbers, hyphens) |
subdomain | string|null | Custom subdomain for the status page |
customDomain | string|null | Custom domain pointed at the status page |
headerText | string|null | Optional header text displayed at the top |
footerText | string|null | Optional footer text displayed at the bottom |
accentColor | string | Hex color for branding (default #00f0ff) |
isPublic | boolean | Whether the page is publicly accessible (default true) |
visibility | string | PUBLIC, PRIVATE_LINK or PRIVATE (default PUBLIC) |
theme | string | DARK, LIGHT or CUSTOM (default DARK) |
bgColor | string | Page background, six-digit hex. Only used when theme is CUSTOM |
surfaceColor | string | Card background, six-digit hex |
borderColor | string | Border colour, six-digit hex |
textColor | string | Body text colour, six-digit hex |
mutedTextColor | string | Label and heading colour, six-digit hex |
showUptime | boolean | Whether to display uptime history and percentages (default true) |
showIncidents | boolean | Whether to display the active and past incident lists (default true) |
showResponseTime | boolean | Whether to display response time graphs (default false) |
showMonitorType | boolean | Whether to display each monitor's type, e.g. HTTP (default true) |
uptimeHistoryDays | number | The furthest back a visitor may look; the page opens on 30 days (default 90) |
createdAt | string | ISO 8601 creation timestamp |
updatedAt | string | ISO 8601 last update timestamp |
monitors | array | Assigned monitors with id, name, status, sortOrder, isVisible |
subscribers | array | Subscriber list (only included in single status page responses) |
The subscribers array is only returned when fetching a single status page by ID. It includes each subscriber's id, email, isVerified, and subscribedAt fields.
List Status Pages
GET /v1/status-pages
Returns all status pages belonging to your organization, including their assigned monitors.
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | number | 50 | Number of status pages to return (max 200) |
offset | number | 0 | Number of status pages to skip for pagination |
Example Request
curl https://api.sentro.dev/v1/status-pages \
-H "Authorization: Bearer sentro_sk_live_your_key_here"
Response 200 OK
{
"data": [
{
"id": "sp_abc123def456",
"orgId": "org_abc123",
"name": "Acme Cloud Status",
"slug": "acme-cloud",
"subdomain": null,
"customDomain": null,
"headerText": "Service Status for Acme Cloud",
"footerText": null,
"accentColor": "#00f0ff",
"isPublic": true,
"visibility": "PUBLIC",
"showUptime": true,
"showIncidents": true,
"showResponseTime": false,
"showMonitorType": true,
"uptimeHistoryDays": 90,
"createdAt": "2025-01-15T08:30:00.000Z",
"updatedAt": "2025-01-15T08:30:00.000Z",
"monitors": [
{
"id": "cly1abc2d0001abcdef012345",
"name": "Production API",
"status": "UP",
"sortOrder": 0,
"isVisible": true
},
{
"id": "cly2def3e0002ghijkl678901",
"name": "Marketing Site",
"status": "UP",
"sortOrder": 1,
"isVisible": true
}
]
},
{
"id": "sp_ghi789jkl012",
"orgId": "org_abc123",
"name": "Internal Services",
"slug": "internal-services",
"subdomain": null,
"customDomain": null,
"headerText": null,
"footerText": null,
"accentColor": "#00f0ff",
"isPublic": false,
"visibility": "PUBLIC",
"showUptime": true,
"showIncidents": true,
"showResponseTime": true,
"showMonitorType": true,
"uptimeHistoryDays": 30,
"createdAt": "2025-01-10T12:00:00.000Z",
"updatedAt": "2025-01-12T14:30:00.000Z",
"monitors": []
}
],
"meta": {
"total": 2
}
}
Fetch all status pages in your organization.
/v1/status-pages?limit=50&offset=0Get Status Page
GET /v1/status-pages/:id
Returns a single status page with its assigned monitors and subscriber list.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | The status page ID |
Example Request
curl https://api.sentro.dev/v1/status-pages/sp_abc123def456 \
-H "Authorization: Bearer sentro_sk_live_your_key_here"
Response 200 OK
{
"data": {
"id": "sp_abc123def456",
"orgId": "org_abc123",
"name": "Acme Cloud Status",
"slug": "acme-cloud",
"subdomain": null,
"customDomain": null,
"headerText": "Service Status for Acme Cloud",
"footerText": "Powered by Sentro",
"accentColor": "#00f0ff",
"isPublic": true,
"visibility": "PUBLIC",
"showUptime": true,
"showIncidents": true,
"showResponseTime": false,
"showMonitorType": true,
"uptimeHistoryDays": 90,
"createdAt": "2025-01-15T08:30:00.000Z",
"updatedAt": "2025-01-15T08:30:00.000Z",
"monitors": [
{
"id": "cly1abc2d0001abcdef012345",
"name": "Production API",
"status": "UP",
"sortOrder": 0,
"isVisible": true
},
{
"id": "cly2def3e0002ghijkl678901",
"name": "Marketing Site",
"status": "UP",
"sortOrder": 1,
"isVisible": true
}
],
"subscribers": [
{
"id": "sub_abc123",
"email": "ops@example.com",
"isVerified": true,
"subscribedAt": "2025-01-16T10:00:00.000Z"
},
{
"id": "sub_def456",
"email": "cto@example.com",
"isVerified": false,
"subscribedAt": "2025-01-17T14:30:00.000Z"
}
]
}
}
Error
{
"error": {
"code": "NOT_FOUND",
"message": "StatusPage with id 'sp_invalid' not found"
}
}
Get a single status page with monitors and subscribers.
/v1/status-pages/:idCreate Status Page
POST /v1/status-pages
Creates a new status page. Requires a READ_WRITE API key.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Display name for the status page |
slug | string | Yes | URL-safe identifier (lowercase letters, numbers, hyphens) |
subdomain | string | No | Custom subdomain |
customDomain | string | No | Custom domain |
headerText | string | No | Header text displayed at the top of the page |
footerText | string | No | Footer text displayed at the bottom of the page |
accentColor | string | No | Hex color for branding (default: #00f0ff) |
isPublic | boolean | No | Whether the page is publicly accessible (default: true) |
visibility | string | No | PUBLIC, PRIVATE_LINK or PRIVATE (default: PUBLIC). Takes precedence over isPublic |
theme | string | No | DARK, LIGHT or CUSTOM (default: DARK) |
bgColor | string | No | Page background as six-digit hex; only applied when theme is CUSTOM |
surfaceColor | string | No | Card background as six-digit hex |
borderColor | string | No | Border colour as six-digit hex |
textColor | string | No | Body text colour as six-digit hex |
mutedTextColor | string | No | Label colour as six-digit hex |
showUptime | boolean | No | Show uptime history and percentages (default: true) |
showIncidents | boolean | No | Show the active and past incident lists (default: true) |
showResponseTime | boolean | No | Show response time graphs (default: false) |
showMonitorType | boolean | No | Show each monitor's type, e.g. HTTP (default: true) |
uptimeHistoryDays | number | No | Days of uptime history to display (default: 90) |
monitorIds | string[] | No | Monitor IDs to assign, in the order they appear on the page |
Example Request
{
"name": "Acme Cloud Status",
"slug": "acme-cloud",
"headerText": "Service Status for Acme Cloud",
"accentColor": "#00f0ff",
"isPublic": true,
"visibility": "PUBLIC",
"showUptime": true,
"showIncidents": true,
"monitorIds": [
"cly1abc2d0001abcdef012345",
"cly2def3e0002ghijkl678901"
]
}
Response 201 Created
{
"data": {
"id": "sp_new789xyz012",
"orgId": "org_abc123",
"name": "Acme Cloud Status",
"slug": "acme-cloud",
"subdomain": null,
"customDomain": null,
"headerText": "Service Status for Acme Cloud",
"footerText": null,
"accentColor": "#00f0ff",
"isPublic": true,
"visibility": "PUBLIC",
"showUptime": true,
"showIncidents": true,
"showResponseTime": false,
"showMonitorType": true,
"uptimeHistoryDays": 90,
"createdAt": "2025-01-20T10:00:00.000Z",
"updatedAt": "2025-01-20T10:00:00.000Z",
"monitors": [
{
"id": "cly1abc2d0001abcdef012345",
"name": "Production API",
"status": "UP",
"sortOrder": 0,
"isVisible": true
},
{
"id": "cly2def3e0002ghijkl678901",
"name": "Marketing Site",
"status": "UP",
"sortOrder": 1,
"isVisible": true
}
]
}
}
Validation Error
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid status page data",
"details": {
"name": ["Required"],
"slug": ["Slug must contain only lowercase letters, numbers, and hyphens"]
}
}
}
Creating a status page requires a READ_WRITE API key. Requests made with a READ_ONLY key will receive a 403 Forbidden response.
Create a new status page for your organization.
/v1/status-pagesUpdate Status Page
PATCH /v1/status-pages/:id
Updates an existing status page. Only the fields you include in the request body will be updated. Requires a READ_WRITE API key.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | The status page ID |
Request Body
All fields are optional. Include only the fields you want to change.
| Field | Type | Description |
|---|---|---|
name | string | Updated display name |
slug | string | Updated URL-safe identifier |
subdomain | string|null | Updated subdomain (null to clear) |
customDomain | string|null | Updated custom domain (null to clear) |
headerText | string|null | Updated header text (null to clear) |
footerText | string|null | Updated footer text (null to clear) |
accentColor | string | Updated hex color |
isPublic | boolean | Updated public visibility |
visibility | string | Updated visibility mode |
theme | string | Updated appearance |
bgColor | string | Updated page background |
surfaceColor | string | Updated card background |
borderColor | string | Updated border colour |
textColor | string | Updated body text colour |
mutedTextColor | string | Updated label colour |
showUptime | boolean | Updated uptime display setting |
showIncidents | boolean | Updated incident display setting |
showResponseTime | boolean | Updated response time display setting |
showMonitorType | boolean | Updated monitor type display setting |
uptimeHistoryDays | number | Updated uptime history window |
monitorIds | string[] | Replace assigned monitors with this list, in order |
The order of monitorIds is the order the systems appear on the public page. Sending the list is a full replacement: monitors you leave out are removed from the page, and monitors that stay keep their display name and visibility. An ID that does not belong to your organization is rejected rather than silently dropped.
Example Request
{
"name": "Acme Cloud Status (v2)",
"showResponseTime": true,
"showMonitorType": true,
"uptimeHistoryDays": 30
}
Response 200 OK
{
"data": {
"id": "sp_abc123def456",
"orgId": "org_abc123",
"name": "Acme Cloud Status (v2)",
"slug": "acme-cloud",
"subdomain": null,
"customDomain": null,
"headerText": "Service Status for Acme Cloud",
"footerText": "Powered by Sentro",
"accentColor": "#00f0ff",
"isPublic": true,
"visibility": "PUBLIC",
"showUptime": true,
"showIncidents": true,
"showResponseTime": true,
"showMonitorType": true,
"uptimeHistoryDays": 30,
"createdAt": "2025-01-15T08:30:00.000Z",
"updatedAt": "2025-01-20T11:00:00.000Z",
"monitors": [
{
"id": "cly1abc2d0001abcdef012345",
"name": "Production API",
"status": "UP",
"sortOrder": 0,
"isVisible": true
}
]
}
}
Update specific fields on an existing status page.
/v1/status-pages/:idDelete Status Page
DELETE /v1/status-pages/:id
Permanently deletes a status page and removes all monitor assignments and subscriber subscriptions. Requires a READ_WRITE API key.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string | The status page ID |
Example Request
curl -X DELETE https://api.sentro.dev/v1/status-pages/sp_abc123def456 \
-H "Authorization: Bearer sentro_sk_live_your_key_here"
Response 200 OK
{
"data": {
"id": "sp_abc123def456",
"deleted": true
}
}
Error
{
"error": {
"code": "NOT_FOUND",
"message": "StatusPage with id 'sp_invalid' not found"
}
}
Permanently delete a status page.
/v1/status-pages/:idPlan Limits
The number of status pages you can create depends on your subscription plan.
| Plan | Status Pages |
|---|---|
| Free | 1 |
| Starter | 3 |
| Pro | 10 |
| Max | Unlimited |
Attempting to create a status page beyond your plan limit returns a 402 error:
{
"error": {
"code": "PLAN_LIMIT_ERROR",
"message": "Status page limit reached. Upgrade your plan to create more status pages."
}
}