Account
Status Pages API
The Status Pages API is at https://api.scaledpapers.com. Authenticate with the same key you use for the Checks API: Authorization: Bearer sp_…. Creating and revoking keys still happens in API Keys.
Every request acts as the account that owns the key — you can only see and change your own status pages.
Create a status page
curl https://api.scaledpapers.com/v1/sites \
-H "Authorization: Bearer sp_…" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme",
"slug": "acme",
"url": "https://acme.com"
}'
nameandslugare required. Slug is lowercase letters, numbers, and hyphens (2-40 chars) and cannot change later.urlis optional — it creates a website component for the page.- The page is live at
https://acme.status.scaledpapers.com. - A taken slug returns
409with{"detail":"That slug is taken"}.
List and read pages
curl https://api.scaledpapers.com/v1/sites \
-H "Authorization: Bearer sp_…"
Each row includes slug, name, and the worst open incident status. GET /v1/sites/{slug} returns the full bundle: components, groups, incidents, uptime payload, and Slack connection state.
Delete a page
DELETE /v1/sites/{slug} removes the public page, its components, incidents, and the owner Slack connection. This cannot be undone.
Add a component
curl https://api.scaledpapers.com/v1/sites/acme/components \
-H "Authorization: Bearer sp_…" \
-H "Content-Type: application/json" \
-d '{"name": "Payments API", "url": "https://api.acme.com"}'
Components are the services shown on the public page — they are not checks. Rename with PATCH /v1/sites/{slug}/components/{id}; delete with DELETE.
Link a check to a component
Use the Checks API: send site_id, site_slug, and component_id together on PATCH /v1/endpoints/{id}. alert_incident_enabled opens an incident when the check is down; display_metrics shows latency on the public page. A component can be linked to only one check.
Create an incident
curl https://api.scaledpapers.com/v1/sites/acme/incidents \
-H "Authorization: Bearer sp_…" \
-H "Content-Type: application/json" \
-d '{
"title": "Payments API errors",
"body": "We are looking into the issue.",
"status": "investigating",
"impact": "major",
"component_ids": ["m3vnq6ytahvq"]
}'
titleandbodyare required.component_idsis optional: it takes component public ids — the same 12-character ids as in console component URLs (/app/{slug}/components/{id}) — internal integer ids also work. Omit it for a site-wide incident with no affected components.status: investigating, identified, monitoring, resolved.impact: minor, major, critical.- Backfill a past incident with
opened_at+resolved_at(status is forced toresolved). - Email subscribers and Slack notifications fire exactly as they do from the console. A site-wide incident notifies only visitors subscribed to all components; a component incident also notifies subscribers watching that component.
Post an update
curl https://api.scaledpapers.com/v1/sites/acme/incidents/{public_id}/updates \
-H "Authorization: Bearer sp_…" \
-H "Content-Type: application/json" \
-d '{
"status": "identified",
"body": "Root cause found, deploying a fix."
}'
{public_id} is the 12-character id from the incident (incidents/{id} on the public page). Status resolved closes the incident. Resolving from the Checks API (a linked check recovering) posts the same update shape.
The response is 201 with the full incident: status is the new current status, updates lists all updates newest-first (the first entry is the one you just posted), and resolved_at stays null until a resolved update sets it. Subscribers and Slack are notified before the response returns.
What is not on the API yet
Component groups, Slack integration connect, and visitor subscriber management stay console-only for now.