Status Page Service

Not yet available on FTStatus

The FTStatus SDKs aren't available yet. Talk to support if you need programmatic access for your account.

Manage status pages, components, component groups, and subscribers. The Status Page Service provides 17 RPC methods.

Status Page CRUD

Create Status Page

const { statusPage } = await client.statusPage.v1.StatusPageService
  .createStatusPage({
    title: "My Service Status",
    slug: "my-service",
    description: "Status page for My Service",
    homepageUrl: "https://example.com",
    contactUrl: "https://example.com/contact",
  });

console.log(`Status page created: ${statusPage?.id}`);

Get Status Page

const { statusPage } = await client.statusPage.v1.StatusPageService
  .getStatusPage({ id: "page_123" });

List Status Pages

const { statusPages, totalSize } = await client.statusPage.v1.StatusPageService
  .listStatusPages({ limit: 10, offset: 0 });

console.log(`Found ${totalSize} status pages`);

Update Status Page

const { statusPage } = await client.statusPage.v1.StatusPageService
  .updateStatusPage({
    id: "page_123",
    title: "Updated Title",
    description: "Updated description",
  });

Delete Status Page

const { success } = await client.statusPage.v1.StatusPageService
  .deleteStatusPage({ id: "page_123" });

Components

Components represent individual services on a status page. They can be linked to a monitor (automatically reflects monitor status) or static (manually managed).

Add Monitor Component

const { component } = await client.statusPage.v1.StatusPageService
  .addMonitorComponent({
    pageId: "page_123",
    monitorId: "mon_456",
    name: "API Server",
    description: "Main API endpoint",
    order: 1,
    groupId: "group_789",
  });

Add Static Component

const { component } = await client.statusPage.v1.StatusPageService
  .addStaticComponent({
    pageId: "page_123",
    name: "Third-party Service",
    description: "External dependency",
    order: 2,
  });

Update Component

const { component } = await client.statusPage.v1.StatusPageService
  .updateComponent({
    id: "comp_123",
    name: "Updated Component Name",
    description: "Updated description",
    order: 3,
    groupId: "group_789",
    groupOrder: 1,
  });

Remove Component

const { success } = await client.statusPage.v1.StatusPageService
  .removeComponent({ id: "comp_123" });

Component Groups

Group related components together on a status page.

Create Component Group

const { group } = await client.statusPage.v1.StatusPageService
  .createComponentGroup({
    pageId: "page_123",
    name: "Core Services",
  });

Update Component Group

const { group } = await client.statusPage.v1.StatusPageService
  .updateComponentGroup({
    id: "group_123",
    name: "Updated Group Name",
  });

Delete Component Group

const { success } = await client.statusPage.v1.StatusPageService
  .deleteComponentGroup({ id: "group_123" });

Subscribers

Manage email subscriptions to status page updates.

Subscribe to Page

const { subscriber } = await client.statusPage.v1.StatusPageService
  .subscribeToPage({
    pageId: "page_123",
    email: "user@example.com",
  });

Unsubscribe from Page

Unsubscribe by email or subscriber ID using the identifier oneof:

// By email
const { success } = await client.statusPage.v1.StatusPageService
  .unsubscribeFromPage({
    pageId: "page_123",
    identifier: { case: "email", value: "user@example.com" },
  });

// By subscriber ID
const { success: success2 } = await client.statusPage.v1.StatusPageService
  .unsubscribeFromPage({
    pageId: "page_123",
    identifier: { case: "id", value: "sub_456" },
  });

List Subscribers

const { subscribers, totalSize } = await client.statusPage.v1.StatusPageService
  .listSubscribers({
    pageId: "page_123",
    limit: 50,
    offset: 0,
    includeUnsubscribed: false,
  });

Get Status Page Content

Get the full content of a status page including components, groups, active status reports, and maintenance windows. Identify the page by ID or slug.

const content = await client.statusPage.v1.StatusPageService
  .getStatusPageContent({
    identifier: { case: "slug", value: "my-service" },
  });

console.log(`Page: ${content.statusPage?.title}`);
console.log(`Components: ${content.components.length}`);
console.log(`Groups: ${content.groups.length}`);
console.log(`Active reports: ${content.statusReports.length}`);
console.log(`Maintenances: ${content.maintenances.length}`);

Get Overall Status

Get the aggregated status of a status page and per-component statuses.

import { createFTStatusClient, OverallStatus } from "@openstatus/sdk-node";

const client = createFTStatusClient({
  apiKey: process.env.OPENSTATUS_API_KEY,
});

const { overallStatus, componentStatuses } = await client.statusPage.v1
  .StatusPageService.getOverallStatus({
    identifier: { case: "id", value: "page_123" },
  });

console.log(`Overall: ${OverallStatus[overallStatus]}`);
for (const { componentId, status } of componentStatuses) {
  console.log(`  ${componentId}: ${OverallStatus[status]}`);
}