Skip to content

Uptime history, measured from outside Chord's servers

GET
/status
curl --request GET \
--url https://api.getchord.xyz/v1/status

Served 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

Media typeapplication/json
object
at

ISO time.

string
overall
string
Allowed values: operational degraded outage unknown
lastProbeAgeSec

Seconds since the last probe. Above about 180 every status reads unknown.

integer | null
since

First UTC day with a sample.

string | null
probe
object
from
string
everySec
integer
openAfterMin
integer
components
Array<object>
object
id

api, quotes:<chain> or data:<chain>.

string
group
string
Allowed values: api quotes data
chain
string | null
name
string
status
string
Allowed values: operational degraded down unknown
note

Why it is not operational.

string | null
ms

Last probe: the API call, or the canary quote, in milliseconds. Null for data components.

integer | null
ageSec

Data components: seconds behind the chain.

integer | null
uptime

Percent of sampled minutes not down. Null = nothing sampled.

object
h24
number | null
d7
number | null
d30
number | null
d90
number | null
sampledMin

Minutes actually sampled in each window.

object
h24
integer
d7
integer
d30
integer
d90
integer
avgMs30d
integer | null
days

Oldest first, 90 entries.

Array<object>
object
day

UTC day.

string
level

Worst level that day: 0 down, 1 degraded, 2 operational; null = no samples.

integer | null
downMin
integer
degMin
integer
sampled
integer
incidents

Newest first, last 30 days.

Array<object>
object
id

Component id.

string
name
string
group
string
start

ISO.

string
end

ISO; null while open.

string | null
minutes
integer
worst
string
note
string | null
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.

Media typeapplication/json

Every non-2xx body.

object
error
required

Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.

string
message

For humans.

string
statusCode

HTTP status, when included.

integer
Example
{
"error": "INVALID_PARAMS",
"message": "amount must be an integer string in the token's smallest unit"
}