Documentation
REST API
HTTP API for status reads and project management. For Cursor and AI editors, use MCP separately.
See also: MCP setup
Public API
Read an open status page without authentication. Private pages return 404.
/v1/public/status/{slug}no authPublic status JSON
Read the current status of a public status page — no API key. Use the page slug or project id from the dashboard URL.
Parameters
slug(path) · requiredStatus page slug or project id (cuid).
Responses
- 200 — Overall status, components, 7-day uptime, optional open incident.
- 404 — Page not found or visibility is private.
- 429 — Rate limit: 60 requests per minute per IP (Retry-After header).
{
"slug": "demo",
"status": "operational",
"updated_at": "2026-05-27T12:00:00.000Z",
"components": [
{
"name": "Website",
"url": "https://example.com",
"status": "operational",
"uptime_7d": 99.9
}
],
"active_incident": null
}status / component status: "operational" | "degraded" | "down" | "unknown". Response is cached ~60s (Cache-Control).
GET https://api.stillonline.tech/v1/public/status/{slug}Private REST API
Pro or Ultimate plan. Create an API key in the dashboard.
Authorization: Bearer sk_live_…
Base: https://api.stillonline.tech/v1Errors: 401 — invalid or revoked key, or Free without API; 403 — plan limit (body code PLAN_LIMIT_*); 429 — rate limit on the public endpoint.
/v1/healthno authAPI health
Lightweight liveness check for monitors and deploy smoke tests.
Responses
- 200 — Service is up.
{
"status": "ok",
"service": "stillonline-api",
"version": "v1"
}GET https://api.stillonline.tech/v1/health/v1/projectsBearer sk_live_…List projects
Returns all non-deleted projects for the API key owner, newest first.
Responses
- 200 — Array of projects with status_page_id.
- 401 — Missing or invalid Bearer key.
{
"projects": [
{
"id": "clx…",
"name": "Acme",
"description": null,
"slug": "acme",
"timezone": "UTC",
"status_page_id": "clx…",
"created_at": "2026-05-27T10:00:00.000Z"
}
]
}GET https://api.stillonline.tech/v1/projects/v1/projectsBearer sk_live_…Create project
Creates a project, status page, and the first HTTP check in one request.
Request body
JSON body. name and url are required.
{
"name": "Acme API",
"url": "https://api.example.com/health",
"description": "Optional note"
}Responses
- 201 — Created project object.
- 400 — Invalid JSON or missing name/url.
- 403 — Plan limit (code PLAN_LIMIT_PROJECTS) or Free tier without API access.
- 401 — Unauthorized.
POST https://api.stillonline.tech/v1/projects/v1/projects/{id}/checksBearer sk_live_…List checks
All uptime checks for a project you own.
Parameters
id(path) · requiredProject id.
Responses
- 200 — Array of checks.
- 404 — Project not found.
- 401 — Unauthorized.
{
"checks": [
{
"id": "clx…",
"project_id": "clx…",
"name": "API",
"url": "https://api.example.com/health",
"method": "GET",
"interval_seconds": 300,
"enabled": true,
"last_status": "OPERATIONAL",
"last_probed_at": "2026-05-27T12:00:00.000Z"
}
]
}GET https://api.stillonline.tech/v1/projects/{id}/checks/v1/projects/{id}/checksBearer sk_live_…Create check
Adds an HTTP check to a project. interval_seconds must match your plan (Pro/Ultimate).
Parameters
id(path) · requiredProject id.
Request body
url required; name defaults to url; interval_seconds optional.
{
"name": "API",
"url": "https://api.example.com/health",
"interval_seconds": 300
}Responses
- 201 — Created check.
- 403 — PLAN_LIMIT_CHECKS or PLAN_LIMIT_INTERVAL.
- 404 — Project not found.
- 401 — Unauthorized.
POST https://api.stillonline.tech/v1/projects/{id}/checks/v1/checks/{id}Bearer sk_live_…Update check
Partial update: name, enabled, or interval_seconds.
Parameters
id(path) · requiredCheck id.
Request body
Send only fields to change.
{
"enabled": false,
"interval_seconds": 300
}Responses
- 200 — Updated check.
- 403 — PLAN_LIMIT_INTERVAL.
- 404 — Check not found.
- 401 — Unauthorized.
PATCH https://api.stillonline.tech/v1/checks/{id}/v1/checks/{id}Bearer sk_live_…Delete check
Permanently removes a check you own.
Parameters
id(path) · requiredCheck id.
Responses
- 200 — Deleted.
- 404 — Check not found.
- 401 — Unauthorized.
{ "deleted": true }DELETE https://api.stillonline.tech/v1/checks/{id}/v1/status-pages/{id}Bearer sk_live_…Get status page
Metadata for a status page: slug, visibility (public/private), linked project.
Parameters
id(path) · requiredStatus page id.
Responses
- 200 — Status page object.
- 404 — Not found.
- 401 — Unauthorized.
{
"status_page": {
"id": "clx…",
"project_id": "clx…",
"slug": "acme",
"visibility": "public",
"project_name": "Acme"
}
}GET https://api.stillonline.tech/v1/status-pages/{id}/v1/status-pages/{id}/incidentsBearer sk_live_…Create incident
Opens a manual incident on a status page (shown on the public page while open).
Parameters
id(path) · requiredStatus page id.
Request body
title is required.
{ "title": "Investigating API errors" }Responses
- 201 — Created incident.
- 404 — Status page not found.
- 401 — Unauthorized.
POST https://api.stillonline.tech/v1/status-pages/{id}/incidents/v1/incidents/{id}Bearer sk_live_…Get incident
Fetch one incident by id (open or resolved).
Parameters
id(path) · requiredIncident id.
Responses
- 200 — Incident object.
- 404 — Not found.
- 401 — Unauthorized.
{
"incident": {
"id": "clx…",
"status_page_id": "clx…",
"title": "Investigating API errors",
"status": "open",
"started_at": "2026-05-27T12:00:00.000Z",
"resolved_at": null
}
}GET https://api.stillonline.tech/v1/incidents/{id}Machine-readable spec: openapi.json (same paths and short English descriptions).