Skip to main content

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

StatusDescriptionColor
operationalAll systems operationalGreen
degraded_performanceReduced performanceYellow
partial_outageSome functionality unavailableOrange
major_outageService completely downRed
maintenanceScheduled maintenanceBlue

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

VisibilityDescriptionAccess
publicAnyone can viewNo authentication
privatePassword protectedPassword required
unlistedNot indexed, but accessibleAnyone 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