Status pages: Statuspage-compatible API v2, a widget, badges and an incident archive
2026.10.14-api-statusPublic status routes below sit under /public/orgs/{orgId}/spaces/{spaceId}/status. A status page also serves each one at its own address (/st/{org}/{space}/… or your domain), with CORS and Cross-Origin-Resource-Policy: cross-origin, so a tool on another origin can read them.
Changed
summary.json lists maintenance under scheduled_maintenances. Maintenance windows are no longer in incidents. They are in their own array, scheduled_maintenances, which holds every window that has not completed. incidents now holds only open incidents. A poller that read maintenance out of incidents must read scheduled_maintenances instead. summary.json also gains Statuspage's id, position, group_id, impact, shortlink and incident_updates fields, plus page.id, page.time_zone and page.updated_at. Components keep our state words (degraded, maintenance, unknown).
Incidents take components, times and an audience. On create and PATCH:
components: [{monitorId, impact}]names what an incident affects. A component from another space answers 422.startedAt/resolvedAtrecord when it really happened. Both are clamped to the server clock.audiencelimits who can see it.
Severity gains notice, which paints no day on the bars. Maintenance has its own states, Scheduled → In progress → Verifying → Completed, with autoStart / autoComplete.
Added
Statuspage-compatible api/v2. …/status/api/v2/ serves summary.json, status.json, components.json, incidents.json, incidents/unresolved.json, scheduled-maintenances.json, scheduled-maintenances/upcoming.json and scheduled-maintenances/active.json. They use Statuspage's words (operational, degraded_performance, partial_outage, major_outage, under_maintenance), and groups appear as group entries. One exception to Statuspage's vocabulary: a component nothing has measured yet reads unknown, not operational. We will not report a measurement we do not have. Tools built for a Statuspage page can point at a Forumulate one.
An embeddable widget. …/status/widget.js is a small script you can drop on any site. It shows a dismissible notice only while an incident or maintenance window is open, and polls every two minutes. It builds its DOM without innerHTML, so it runs under a strict host CSP. Placement and look come from theme.status.widget or data-* attributes. …/status/widget.json is the same data as JSON, for drawing your own banner.
Badges. …/status/badge.svg takes style=uptime|status, theme=light|dark, size=s|m|l and component=<slug or id> for a single component. With no options it draws the same badge as before.
An incident archive. GET …/status/incidents pages back through every incident and maintenance window. It takes the cursor before, plus since, limit (≤100), component, kind and scope=past|upcoming, and answers nextBefore and oldestAt. GET …/status/incidents/{id} returns one incident with its updates and affected components. Feeds, maintenance.ics and notification emails now link to each incident's own page.
Response times and custom metrics. GET …/status/latency?range=24h|7d|30d gives p50/p95 response times per component, worked out from your checks. GET …/status/metrics gives your custom series. Write a series with PUT /orgs/{orgId}/spaces/{spaceId}/status/metrics/{key}, then push to it with POST …/metrics/{key}/points: one point, or up to 500 at a time. A personal access token can push.
More public reads.
…/status/day.json: one day, hour by hour.…/status/siblings: the org's other status pages.atom.xmlandfeed.json, besiderss.xml. All three take?component=and?severity=.
Incident templates. You can save an incident as a template. CRUD is at /orgs/{orgId}/spaces/{spaceId}/status/templates, and POST …/templates/{id}/incidents opens an incident from a template.
Webhooks. status.incident.created, status.incident.updated and status.incident.resolved. Automations can use them as triggers too.
Component kinds. Besides your own checks and manual components, a component can roll up another status page in the org (space) or mirror a vendor's public Statuspage (statuspage). Components also take a region.