Status Pages API
Create and manage public status pages programmatically. Update component status, publish incidents, and manage subscribers via API.
List Status Pages
GET /v1/status-pages
# Response:
{
"data": [
{
"id": "sp_abc123",
"name": "Production Status",
"slug": "status",
"url": "https://status.example.com",
"visibility": "public",
"components": 5,
"subscribers": 342,
"createdAt": "2026-01-15T10:00:00Z"
}
]
}
Get Status Page
GET /v1/status-pages/:id
# Response:
{
"id": "sp_abc123",
"name": "Production Status",
"slug": "status",
"url": "https://status.example.com",
"visibility": "public",
"branding": {
"logo": "https://cdn.example.com/logo.png",
"primaryColor": "#387CE9",
"customCss": "..."
},
"components": [
{
"id": "comp_api",
"name": "API",
"status": "operational",
"monitorId": "mon_abc123"
}
],
"subscribers": 342
}
Create Status Page
POST /v1/status-pages
Content-Type: application/json
{
"name": "Production Status",
"slug": "status",
"visibility": "public",
"components": [
{
"name": "API",
"monitorId": "mon_api_001"
},
{
"name": "Database",
"monitorId": "mon_db_001"
}
],
"branding": {
"logo": "https://cdn.example.com/logo.png",
"primaryColor": "#387CE9"
}
}
# Response: 201 Created
{
"id": "sp_new_123",
"name": "Production Status",
"slug": "status",
"url": "https://blacktide.xyz/status/status"
}
Update Status Page
PUT /v1/status-pages/:id
Content-Type: application/json
{
"name": "Updated Status Page",
"visibility": "private",
"branding": {
"primaryColor": "#FF0000"
}
}
Delete Status Page
DELETE /v1/status-pages/:id
# Response: 204 No Content
Components
Add Component
POST /v1/status-pages/:id/components
Content-Type: application/json
{
"name": "CDN",
"description": "Content Delivery Network",
"monitorId": "mon_cdn_001",
"order": 3
}
# Response: 201 Created
{
"id": "comp_cdn",
"name": "CDN",
"status": "operational"
}
Update Component Status
PUT /v1/status-pages/:pageId/components/:componentId
Content-Type: application/json
{
"status": "degraded_performance",
"statusMessage": "Experiencing high latency"
}
# Response: 200 OK
{
"id": "comp_cdn",
"status": "degraded_performance",
"statusMessage": "Experiencing high latency",
"updatedAt": "2026-02-13T12:00:00Z"
}
Delete Component
DELETE /v1/status-pages/:pageId/components/:componentId
# Response: 204 No Content
Component Statuses
| Status | Description | Color |
|---|
operational | All systems operational | Green |
degraded_performance | Reduced performance | Yellow |
partial_outage | Some functionality unavailable | Orange |
major_outage | Service completely down | Red |
maintenance | Scheduled maintenance | Blue |
Incidents
Publish Incident
POST /v1/status-pages/:id/incidents
Content-Type: application/json
{
"title": "API Performance Degradation",
"status": "investigating",
"severity": "major",
"affectedComponents": ["comp_api"],
"message": "We are investigating reports of slow API response times."
}
# Response: 201 Created
{
"id": "inc_public_123",
"title": "API Performance Degradation",
"status": "investigating",
"publishedAt": "2026-02-13T12:00:00Z"
}
Update Incident
PUT /v1/status-pages/:pageId/incidents/:incidentId
Content-Type: application/json
{
"status": "identified",
"message": "We have identified the issue as a database connection pool exhaustion."
}
# Response: 200 OK
{
"id": "inc_public_123",
"status": "identified",
"updates": [
{
"timestamp": "2026-02-13T12:05:00Z",
"status": "identified",
"message": "We have identified the issue..."
}
]
}
Resolve Incident
PUT /v1/status-pages/:pageId/incidents/:incidentId
Content-Type: application/json
{
"status": "resolved",
"message": "Issue has been resolved. All systems operational."
}
Incident Statuses
investigating # Initial state
↓
identified # Root cause found
↓
monitoring # Fix applied, monitoring
↓
resolved # Fully resolved
Subscribers
List Subscribers
GET /v1/status-pages/:id/subscribers
# Response:
{
"data": [
{
"id": "sub_123",
"email": "user@example.com",
"verified": true,
"subscribedAt": "2026-01-20T10:00:00Z",
"preferences": {
"incidents": true,
"maintenance": true
}
}
],
"meta": {
"total": 342
}
}
Add Subscriber
POST /v1/status-pages/:id/subscribers
Content-Type: application/json
{
"email": "newuser@example.com"
}
# Response: 201 Created
# Verification email sent
{
"id": "sub_new",
"email": "newuser@example.com",
"verified": false
}
Remove Subscriber
DELETE /v1/status-pages/:pageId/subscribers/:subscriberId
# Response: 204 No Content
Visibility Options
| Visibility | Description | Access |
|---|
public | Anyone can view | No authentication |
private | Password protected | Password required |
unlisted | Not indexed, but accessible | Anyone with link |
Code Examples
Python
from blacktide import Client
client = Client(api_token="YOUR_TOKEN")
# Create status page
page = client.status_pages.create({
"name": "Production Status",
"slug": "status",
"visibility": "public"
})
# Add component
component = client.status_pages.add_component(page.id, {
"name": "API",
"monitorId": "mon_api_001"
})
# Update component status
client.status_pages.update_component_status(
page.id,
component.id,
status="degraded_performance"
)
# Publish incident
incident = client.status_pages.create_incident(page.id, {
"title": "API Degradation",
"status": "investigating",
"affectedComponents": [component.id]
})
JavaScript/TypeScript
import { BlackTide } from '@blacktide/sdk';
const client = new BlackTide('YOUR_TOKEN');
// Create status page
const page = await client.statusPages.create({
name: 'Production Status',
slug: 'status',
components: [
{ name: 'API', monitorId: 'mon_api_001' },
{ name: 'Database', monitorId: 'mon_db_001' }
]
});
// Publish incident
const incident = await client.statusPages.createIncident(page.id, {
title: 'Scheduled Maintenance',
status: 'monitoring',
severity: 'maintenance',
affectedComponents: ['comp_api'],
message: 'Upgrading database servers'
});
// Resolve incident
await client.statusPages.updateIncident(page.id, incident.id, {
status: 'resolved',
message: 'Maintenance completed successfully'
});
Next Steps