Foxl Foxl Status Back to status

API

Shaped like Statuspage v2, so a dashboard or bot that already watches a status page works against Foxl with only the host changed. Every response is public, CORS-open, and served from a precomputed snapshot, so polling it costs us one indexed row read at most.
GET /api/v2/summary.json
everything at once: overall status, components, open incidents, maintenance
GET /api/v2/status.json
the overall indicator only, plus monitoring freshness
GET /api/v2/components.json
per-component status with 24h, 30d and 90d uptime
GET /api/v2/incidents.json
incident history with every update
GET /api/v2/incidents/unresolved.json
only the open ones
GET /api/v2/scheduled-maintenances.json
all maintenance windows
GET /api/v2/scheduled-maintenances/upcoming.json
windows that have not started
GET /api/v2/scheduled-maintenances/active.json
windows in progress
GET /api/v2/history.json
90 days of daily uptime per component
GET /api/v2/uptime.json
cumulative uptime per month and all time
GET /history.rss, /history.atom
incident feeds
POST /subscribe
form or JSON: kind=email|webhook|slack, target=<address or URL>
Two extensions to the Statuspage shape
monitoring reports the freshness of the monitoring itself (stale, age_ms, measured_at). Alarm on it: a status page whose own cron has died otherwise reports green forever. unknown can appear as an indicator and as a component status, meaning the probe could not establish either state. Code that treats anything other than operational as not-fine handles it correctly.
Polling etiquette
Components are probed every 2 to 15 minutes depending on cost, so polling faster than once a minute tells you nothing new. cache-control says how long each response is good for.

Example

curl -s https://status.foxl.ai/api/v2/status.json