← StillOnline

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.

GET/v1/public/status/{slug}no auth

Public 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

  • 200Overall status, components, 7-day uptime, optional open incident.
  • 404Page not found or visibility is private.
  • 429Rate limit: 60 requests per minute per IP (Retry-After header).
example
{
  "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).

HTTP
GET https://api.stillonline.tech/v1/public/status/{slug}

Private REST API

Pro or Ultimate plan. Create an API key in the dashboard.

HTTP
Authorization: Bearer sk_live_…
Base: https://api.stillonline.tech/v1

Errors: 401 — invalid or revoked key, or Free without API; 403 — plan limit (body code PLAN_LIMIT_*); 429 — rate limit on the public endpoint.

GET/v1/healthno auth

API health

Lightweight liveness check for monitors and deploy smoke tests.

Responses

  • 200Service is up.
example
{
  "status": "ok",
  "service": "stillonline-api",
  "version": "v1"
}
HTTP
GET https://api.stillonline.tech/v1/health
GET/v1/projectsBearer sk_live_…

List projects

Returns all non-deleted projects for the API key owner, newest first.

Responses

  • 200Array of projects with status_page_id.
  • 401Missing or invalid Bearer key.
example
{
  "projects": [
    {
      "id": "clx…",
      "name": "Acme",
      "description": null,
      "slug": "acme",
      "timezone": "UTC",
      "status_page_id": "clx…",
      "created_at": "2026-05-27T10:00:00.000Z"
    }
  ]
}
HTTP
GET https://api.stillonline.tech/v1/projects
POST/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.

JSON
{
  "name": "Acme API",
  "url": "https://api.example.com/health",
  "description": "Optional note"
}

Responses

  • 201Created project object.
  • 400Invalid JSON or missing name/url.
  • 403Plan limit (code PLAN_LIMIT_PROJECTS) or Free tier without API access.
  • 401Unauthorized.
HTTP
POST https://api.stillonline.tech/v1/projects
GET/v1/projects/{id}/checksBearer sk_live_…

List checks

All uptime checks for a project you own.

Parameters

  • id (path) · requiredProject id.

Responses

  • 200Array of checks.
  • 404Project not found.
  • 401Unauthorized.
example
{
  "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"
    }
  ]
}
HTTP
GET https://api.stillonline.tech/v1/projects/{id}/checks
POST/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.

JSON
{
  "name": "API",
  "url": "https://api.example.com/health",
  "interval_seconds": 300
}

Responses

  • 201Created check.
  • 403PLAN_LIMIT_CHECKS or PLAN_LIMIT_INTERVAL.
  • 404Project not found.
  • 401Unauthorized.
HTTP
POST https://api.stillonline.tech/v1/projects/{id}/checks
PATCH/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.

JSON
{
  "enabled": false,
  "interval_seconds": 300
}

Responses

  • 200Updated check.
  • 403PLAN_LIMIT_INTERVAL.
  • 404Check not found.
  • 401Unauthorized.
HTTP
PATCH https://api.stillonline.tech/v1/checks/{id}
DELETE/v1/checks/{id}Bearer sk_live_…

Delete check

Permanently removes a check you own.

Parameters

  • id (path) · requiredCheck id.

Responses

  • 200Deleted.
  • 404Check not found.
  • 401Unauthorized.
example
{ "deleted": true }
HTTP
DELETE https://api.stillonline.tech/v1/checks/{id}
GET/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

  • 200Status page object.
  • 404Not found.
  • 401Unauthorized.
example
{
  "status_page": {
    "id": "clx…",
    "project_id": "clx…",
    "slug": "acme",
    "visibility": "public",
    "project_name": "Acme"
  }
}
HTTP
GET https://api.stillonline.tech/v1/status-pages/{id}
POST/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.

JSON
{ "title": "Investigating API errors" }

Responses

  • 201Created incident.
  • 404Status page not found.
  • 401Unauthorized.
HTTP
POST https://api.stillonline.tech/v1/status-pages/{id}/incidents
GET/v1/incidents/{id}Bearer sk_live_…

Get incident

Fetch one incident by id (open or resolved).

Parameters

  • id (path) · requiredIncident id.

Responses

  • 200Incident object.
  • 404Not found.
  • 401Unauthorized.
example
{
  "incident": {
    "id": "clx…",
    "status_page_id": "clx…",
    "title": "Investigating API errors",
    "status": "open",
    "started_at": "2026-05-27T12:00:00.000Z",
    "resolved_at": null
  }
}
HTTP
GET https://api.stillonline.tech/v1/incidents/{id}

Machine-readable spec: openapi.json (same paths and short English descriptions).