cursor
Query Optionalstring
Opaque cursor returned by the preceding page.
Developers
Health incidents
Overview
/v1/health/incidents
Page the retained feed-health episode ledger newest first. These records describe source freshness incidents, never route state, destination access, or driving safety.
Path and query parameters are documented together so the request surface stays easy to scan.
cursor
Query Optionalstring
Opaque cursor returned by the preceding page.
limit
Query Optionalinteger (1–50)
Episodes per page. Defaults to 10.
| Name | Location | Required | Type | Description |
|---|---|---|---|---|
| cursor | Query | No | string | Opaque cursor returned by the preceding page. |
| limit | Query | No | integer (1–50) | Episodes per page. Defaults to 10. |
Use the same endpoint across all three snippets. The tabs switch only the client syntax.
cURL
curl -sS "https://api.mountainswitch.co/v1/health/incidents?limit=10" \
-H "Accept: application/json" TypeScript
const response = await fetch(
"https://api.mountainswitch.co/v1/health/incidents?limit=10",
{ headers: { Accept: "application/json" } },
);
const payload = await response.json(); Python
import requests
response = requests.get(
"https://api.mountainswitch.co/v1/health/incidents",
params={"limit": 10},
headers={"Accept": "application/json"},
)
payload = response.json()
The example response shows the documented JSON envelope with endpoint data in
data and request metadata in
_meta.
{
"data": [
{
"started_at": "2026-08-13T22:49:56.151Z",
"resolved_at": "2026-08-14T04:27:32.374Z",
"class": "feed_outage",
"affected_regions": ["lake-tahoe", "central-sierra"],
"public_summary": "Road condition feeds are delayed; showing last-confirmed conditions with timestamps."
}
],
"_meta": {
"request_id": "req_health_incidents_docs",
"response_generated_at": "2026-08-14T04:30:00.000Z",
"pagination": {
"cursor": "eyJzdGFydGVkQXQiOiIuLi4ifQ==",
"has_more": true
}
}
} This reference stays flat on purpose so the documented fields remain easy to scan.
These rows keep the repo-wide rate-limit and infrastructure behavior visible without inventing endpoint-specific transport semantics.
| Status | Code | When it happens |
|---|---|---|
| 400 | INVALID_PARAMETER | limit or cursor is malformed, unsupported, or no longer identifies a retained episode. |
These notes capture the contract edges that matter most for consumers of the endpoint.
A resolved incident that reopens within 20 minutes remains one episode. Its original start is preserved, class and regions accumulate, and intermediate close/reopen timestamps are not retained.
GET /v1/health/incidents reads the live retained ring and always returns Cache-Control: no-store.