REST API

Status pages

Services, pages, incidents and maintenance windows.

  • GET /status (tracker:read, company admins or owners): status pages. Services (status is what the customer sees now, the worst of manual_status and the open incidents; version, the project's version in production), pages (public url, slug, published, primary) and recent incidents and maintenance windows (phase: active, upcoming or closed).
  • POST /status/services and PATCH/DELETE /status/services/{id} (tracker:write): {"name": "Driver app", "project": "MOB", "description": "...", "status": "operational|degraded|partial_outage|major_outage|maintenance", "show_version": true, "check_url": "https://api.example.com/health", "sentry_alerts": true}. In the PATCH, only what's sent changes. check_url: a healthcheck every minute (over 3 s is Slow; two failures in a row, Down); sentry_alerts: a new error in the project's Sentry sets Slow for 30 minutes. The response has monitor with the latest result.
  • GET /status/pages/{id}, POST /status/pages and PATCH/DELETE /status/pages/{id} (tracker:write): {"title": "Status", "intro": "...", "published": true, "blocks": [{"kind": "projects", "projects": ["MOB"]}, {"kind": "projects", "title": "Platform", "projects": ["PLT", "API"], "hidden_services": ["Internal queue"]}, {"kind": "services", "title": "Highlights", "services": ["Driver app"]}]}. blocks replaces all blocks, in order; without it, they stay as they are. Services by id or name; projects by prefix, slug or id. slug: a readable address on the company's address (/status/<slug>; without it, it comes from the title); primary: true: the page that opens at /status (one per company). The page key keeps opening at any address. Appearance (whatever isn't sent stays as it is): brand_name (the page's brand; null goes back to the company name), accent_color (#rrggbb; null goes back to the default color), links (up to 4 buttons at the top, [{"label": "Support", "url": "https://..."}], https: or mailto:; replaces the existing ones), show_history and show_past_incidents (false hides the 90-day bars and the closed incidents) and remove_logo: true; the logo is uploaded on screen and comes back in logo_url.
  • POST /status/incidents (tracker:write): opens an incident or schedules maintenance. {"kind": "incident|maintenance", "title": "...", "services": ["Driver app"], "message": "<what the customer reads>", "impact": "degraded|partial_outage|major_outage", "status": "...", "starts_at": "2026-10-18T23:00:00-03:00", "ends_at": "..."} (maintenance requires starts_at and ends_at).
  • GET /status/incidents/{id} (with the timeline), POST /status/incidents/{id}/updates ({"message": "...", "status": "monitoring", "impact": "degraded"}; resolved or completed closes it), PATCH /status/incidents/{id} (fixes title, services, starts_at, ends_at and impact, and with message also publishes an update) and DELETE /status/incidents/{id} (tracker:write).