Everything you need to drive a status page from code — read pages, manage components, run incidents through their lifecycle, and schedule maintenance. New to FlipSign? Start with the quickstart.
Base URL & authentication
The base URL is https://flipsign.live and all endpoints live under /api/v1. Every request carries a Bearer token (fs_sk_…) created in Settings → API Keys. A missing, placeholder, invalid, or revoked key returns 401 with a descriptive message.
Pages
Status pages are read-only over the API — create, rename, and delete them in the dashboard. Use these to discover a page's id, which every other call needs.
GET/api/v1/pagesBearerPro+ tier
List every status page owned by the API key's user, newest first.
Responses
200OK
Body is { pages: [...] }. Each page carries id, slug, name, description, brandColor, customDomain, isPublic, and createdAt.
401Unauthorized
Missing, placeholder, invalid, or revoked API key.
"description": "Live status for the Acme platform.",
"brandColor": "#8b5cf6",
"customDomain": "status.acme.com",
"isPublic": true,
"createdAt": "2026-05-20T09:00:00.000Z"
}
Components
Components are the rows on your board. Their valid statuses are operational, degraded, partial_outage, major_outage, and maintenance. Every status change is recorded in the component's history, which powers the uptime heatmap. The number of components per page is capped by your tier.
GET/api/v1/pages/{id}/componentsBearerPro+ tier
List a page's components, ordered by position.
Path parameters
id
string·REQUIRED
The status page UUID.
Responses
200OK
Body is { components: [...] } ordered by position.
401Unauthorized
Missing, placeholder, invalid, or revoked API key.
An incident moves through investigating → identified → monitoring → resolved with a severity of minor, major, or critical. Creating an incident, posting an update, or changing its status fans out to email subscribers and alert channels in the background. Resolving (via PATCH status=resolved or a final update) stamps resolvedAt and sends the all-clear once.
GET/api/v1/pages/{id}/incidentsBearerPro+ tier
List a page's incidents, newest first.
Path parameters
id
string·REQUIRED
The status page UUID.
Responses
200OK
Body is { incidents: [...] } ordered by startedAt descending.
401Unauthorized
Missing, placeholder, invalid, or revoked API key.
Update an incident's title, severity, or status. Setting status=resolved stamps resolvedAt and sends the all-clear; an optional message is recorded as an update.
Path parameters
id
string·REQUIRED
The incident UUID.
Request body
title
string·OPTIONAL
New title. Trimmed; rejected if empty.
severity
string·OPTIONAL
New severity.
"minor""major""critical"
status
string·OPTIONAL
New lifecycle status. Setting resolved stamps resolvedAt and fires the all-clear once.
"investigating""identified""monitoring""resolved"
message
string·OPTIONAL
Optional update body recorded alongside this change.
Responses
200OK
Incident updated. Setting status to resolved sends the all-clear; any other change re-notifies. A no-op body returns the unchanged incident.
400Bad Request
Invalid JSON, empty title, or an unknown severity/status.
error.codetitle cannot be emptyseverity must be one of: …status must be one of: …
401Unauthorized
Missing, placeholder, invalid, or revoked API key.
404Not Found
No incident with that id belongs to a page you own.
Request
PATCH /api/v1/incidents/{id}
curl-XPATCH"https://flipsign.live/api/v1/incidents/:id"\-H"Authorization: Bearer <FLIPSIGN_API_KEY>"\-H"Content-Type: application/json"\-d{"status":"resolved","message":"The rollback is complete; error rates are back to normal."}'
Response200OK
application/json
{
"id": "a3f2c1e0-9b8d-4e21-8c0f-2d1e3f4a5b6c",
"pageId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
"title": "Elevated API error rates",
"severity": "major",
"status": "resolved",
"startedAt": "2026-05-29T17:55:00.000Z",
"resolvedAt": "2026-05-29T18:20:00.000Z",
"createdAt": "2026-05-29T17:55:00.000Z",
"updatedAt": "2026-05-29T18:20:00.000Z"
}
GET/api/v1/incidents/{id}/updatesBearerPro+ tier
List an incident's update entries, oldest first — the public timeline.
Path parameters
id
string·REQUIRED
The incident UUID.
Responses
200OK
Body is { updates: [...] } ordered by createdAt ascending.
401Unauthorized
Missing, placeholder, invalid, or revoked API key.
404Not Found
No incident with that id belongs to a page you own.
Append an update to an incident. A new status transitions the incident (resolved stamps resolvedAt). Subscribers and channels are re-notified.
Path parameters
id
string·REQUIRED
The incident UUID.
Request body
body
string·REQUIRED
The update narrative. Trimmed; must be non-empty.
status
string·OPTIONAL
If supplied and different from the incident's current status, transitions the incident. Defaults to the incident's current status.
"investigating""identified""monitoring""resolved"
Responses
201Created
Update appended. Body is { update, incident }. If the status changed, the incident reflects the new status (and resolvedAt when resolved). Notifies subscribers and channels.
400Bad Request
Invalid JSON, missing body, or an unknown status.
error.codebody is requiredstatus must be one of: …
401Unauthorized
Missing, placeholder, invalid, or revoked API key.
404Not Found
No incident with that id belongs to a page you own.
Request
POST /api/v1/incidents/{id}/updates
curl-XPOST"https://flipsign.live/api/v1/incidents/:id/updates"\-H"Authorization: Bearer <FLIPSIGN_API_KEY>"\-H"Content-Type: application/json"\-d{"body":"Root cause identified — rolling back the bad deploy.","status":"identified"}'
"body": "Root cause identified — rolling back the bad deploy.",
"status": "identified",
"createdAt": "2026-05-29T18:05:00.000Z"
},
"incident": {
"id": "a3f2c1e0-9b8d-4e21-8c0f-2d1e3f4a5b6c",
"pageId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
"title": "Elevated API error rates",
"severity": "major",
"status": "identified",
"resolvedAt": null
}
}
Scheduled maintenance
Planned downtime communicated ahead of time. A window needs a title, an ISO 8601 startsAt, and an ISO 8601 endsAt (strictly after startsAt). The board shows an "Upcoming maintenance" callout before the window and a banner during it. Note the page id must be a UUID — a non-UUID returns 404.
Create a maintenance window. Optionally scope it to specific components on the page.
Path parameters
id
string·REQUIRED
The status page UUID.
Request body
title
string·REQUIRED
Maintenance window title. Trimmed and capped at 200 characters.
startsAt
string·REQUIRED
Window start as a strict ISO 8601 timestamp (e.g. 2026-06-01T02:00:00Z).
endsAt
string·REQUIRED
Window end as ISO 8601. Must be strictly after startsAt.
description
string | null·OPTIONAL
Optional details shown on the board.
affectedComponentIds
string[] | null·OPTIONAL
Optional list of component UUIDs to highlight. Every id must belong to this page.
Responses
201Created
Maintenance window created. Body is the window row.
400Bad Request
Invalid JSON, missing title/startsAt/endsAt, malformed ISO 8601, endsAt not after startsAt, or a component id that isn't on this page.
error.codetitle is requiredstartsAt and endsAt are required (ISO 8601)startsAt and endsAt must be valid ISO 8601 timestampsendsAt must be after startsAtOne or more affectedComponentIds don't belong to this page
401Unauthorized
Missing, placeholder, invalid, or revoked API key.
404Not Found
The page id is not a UUID, or no page with that id belongs to you.
Request
POST /api/v1/pages/{id}/scheduled-maintenance
curl-XPOST"https://flipsign.live/api/v1/pages/:id/scheduled-maintenance"\-H"Authorization: Bearer <FLIPSIGN_API_KEY>"\-H"Content-Type: application/json"\-d{"title":"Database upgrade","description":"Brief read-only window while we upgrade Postgres.","startsAt":"2026-06-01T02:00:00Z","endsAt":"2026-06-01T03:00:00Z"}'
Response201Created
application/json
{
"id": "e7f8a9b0-3456-4cde-9f01-23456789abcd",
"pageId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
"title": "Database upgrade",
"description": "Brief read-only window while we upgrade Postgres.",