REST API
Status pages
Services, pages, incidents and maintenance windows.
GET /status(tracker:read, company admins or owners): status pages. Services (statusis what the customer sees now, the worst ofmanual_statusand the open incidents;version, the project's version in production), pages (publicurl,slug,published,primary) and recent incidents and maintenance windows (phase: active, upcoming or closed).POST /status/servicesandPATCH/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 hasmonitorwith the latest result.GET /status/pages/{id},POST /status/pagesandPATCH/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"]}]}.blocksreplaces 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;nullgoes back to the company name),accent_color(#rrggbb;nullgoes back to the default color),links(up to 4 buttons at the top,[{"label": "Support", "url": "https://..."}],https:ormailto:; replaces the existing ones),show_historyandshow_past_incidents(falsehides the 90-day bars and the closed incidents) andremove_logo: true; the logo is uploaded on screen and comes back inlogo_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 requiresstarts_atandends_at).GET /status/incidents/{id}(with the timeline),POST /status/incidents/{id}/updates({"message": "...", "status": "monitoring", "impact": "degraded"};resolvedorcompletedcloses it),PATCH /status/incidents/{id}(fixestitle,services,starts_at,ends_atandimpact, and withmessagealso publishes an update) andDELETE /status/incidents/{id}(tracker:write).