/api/health
Liveness for the whole data path, not just the web process. “The server answered” is a useless health check for a market data site — it stays green while every price on the page is an hour stale. This reports whether the ingest worker is writing its heartbeat, which is the capability that actually matters.
Takes no parameters. Answers 503 when ingest is down, so a monitor can act on it without parsing the body.
Request
curl -i 'https://your-deployment/api/health'Response
| Field | Type | Notes |
|---|---|---|
| status | 'ok' | 'degraded' | Mirrors ingest.live. Degraded means slower, not down — reads fall back to the venue. |
| ingest.live | boolean | True when marketd wrote a heartbeat inside its 30-second expiry window. |
| ingest.streamed | number | Symbols the worker is currently streaming tickers for, across every pipeline. |
| ingest.watching | number | Symbols with at least one terminal open on them — the detail sockets the worker holds because someone asked for them. |
| ingest.at | number | null | When the heartbeat was written, ms. Null when there is no heartbeat at all. |
| fallback | string | null | Names what is carrying the site while ingest is down. Null when it is up. |
| at | number | This server’s clock when the check ran, ms. |
200 — worker writing
{
"status": "ok",
"ingest": { "live": true, "streamed": 412, "watching": 3, "at": 1754003123456 },
"fallback": null,
"at": 1754003123999
}503 — worker down, venue fallback carrying the site
{
"status": "degraded",
"ingest": { "live": false, "streamed": 0, "watching": 0, "at": null },
"fallback": "serving market data directly from the venue REST API",
"at": 1754003123999
}Status codes
| Status | When |
|---|---|
| 200 | A heartbeat is present and inside its window. |
| 503 | No heartbeat. The body still parses and still carries counts — all zeroes. |
Watch it in the product
The system status page is this endpoint’s only first-party client, rendering the same numbers as they arrive.