Uptime history, measured from outside Chord's servers
const url = 'https://api.getchord.xyz/v1/status';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.getchord.xyz/v1/statusServed by Cloudflare, not by the API’s own servers, so it answers while they do not. A probe runs every minute: it reads GET /health/chains and requests one small quote per chain down the public path. Components are api, quotes:<chain> and data:<chain>. Uptime is the share of SAMPLED minutes that were not down; sampledMin says how many minutes each window really holds, and a day with no samples has level: null: it is never counted as up. An incident opens on the second bad check in a row and closes on the second good one. The same data as a page: https://getchord.xyz/status
Responses
Section titled “ Responses ”object
ISO time.
Seconds since the last probe. Above about 180 every status reads unknown.
First UTC day with a sample.
object
object
api, quotes:<chain> or data:<chain>.
Why it is not operational.
Last probe: the API call, or the canary quote, in milliseconds. Null for data components.
Data components: seconds behind the chain.
Percent of sampled minutes not down. Null = nothing sampled.
object
Minutes actually sampled in each window.
object
Oldest first, 90 entries.
object
UTC day.
Worst level that day: 0 down, 1 degraded, 2 operational; null = no samples.
Newest first, last 30 days.
object
Component id.
ISO.
ISO; null while open.
Example
{ "at": "2026-10-11T17:33:09.133Z", "overall": "operational", "lastProbeAgeSec": 9, "since": "2026-10-11", "probe": { "from": "Cloudflare edge", "everySec": 60, "openAfterMin": 2 }, "incidents": [], "components": [ { "id": "api", "group": "api", "chain": null, "name": "API", "status": "operational", "note": null, "ms": 58, "ageSec": null, "uptime": { "h24": 100, "d7": 100, "d30": 100, "d90": 100 }, "sampledMin": { "h24": 9, "d7": 9, "d30": 9, "d90": 9 }, "avgMs30d": 119, "days": [ { "day": "2026-07-14", "level": null, "downMin": 0, "degMin": 0, "sampled": 0 }, { "day": "2026-07-15", "level": null, "downMin": 0, "degMin": 0, "sampled": 0 } ] }, { "id": "quotes:arc", "group": "quotes", "chain": "arc", "name": "Arc", "status": "operational", "note": null, "ms": 697, "ageSec": null, "uptime": { "h24": 100, "d7": 100, "d30": 100, "d90": 100 }, "sampledMin": { "h24": 9, "d7": 9, "d30": 9, "d90": 9 }, "avgMs30d": 683, "days": [ { "day": "2026-07-14", "level": null, "downMin": 0, "degMin": 0, "sampled": 0 }, { "day": "2026-07-15", "level": null, "downMin": 0, "degMin": 0, "sampled": 0 } ] }, { "id": "data:arc", "group": "data", "chain": "arc", "name": "Arc", "status": "operational", "note": null, "ms": null, "ageSec": 2, "uptime": { "h24": 100, "d7": 100, "d30": 100, "d90": 100 }, "sampledMin": { "h24": 9, "d7": 9, "d30": 9, "d90": 9 }, "avgMs30d": null, "days": [ { "day": "2026-07-14", "level": null, "downMin": 0, "degMin": 0, "sampled": 0 }, { "day": "2026-07-15", "level": null, "downMin": 0, "degMin": 0, "sampled": 0 } ] } ]}The lane behind this endpoint is not ready or not enabled here (NOT_READY, CHAIN_NOT_ENABLED, NOT_ENABLED, *_UNAVAILABLE). Retry later; do not treat it as an empty answer.
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}