Skip to content

Health of every chain, one generic row each

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

What the status page is built from, readable directly. quotes.engine is the routing engine’s own state (ok, starting after a deploy, stale when its pool sync stopped, down); quotes.canary is the small quote the status probe sends. data.ageSec is how old the newest indexed trade is and data.maxAgeSec the age past which the chain’s data counts as delayed. quotes is null where Chord does not route (Solana), data is null where no tape runs. Answers from a 15-second memo.

Media typeapplication/json
object
at

ISO time the rows were read.

string
chains
Array<object>
object
key
string
Allowed values: monad robinhood arc avalanche base bnb arbitrum ethereum solana
id
integer | null
name
string
quotes
object
engine
string
latencyMs

Round trip from the API to the engine.

integer | null
lastSyncBlock
integer | null
canary

10 units of the chain’s first dollar stable into its wrapped native (Arc: into EURC).

object
inputMint
string
outputMint
string
amount

Amount in the token’s smallest unit, as a decimal string. Never a float.

string
/^\d+$/
data
object
ageSec

Null = the age could not be read.

integer | null
maxAgeSec
integer
Example
{
"at": "2026-10-11T17:33:02.088Z",
"chains": [
{
"key": "monad",
"id": 143,
"name": "Monad",
"quotes": {
"engine": "ok",
"latencyMs": 4,
"lastSyncBlock": 112529162,
"canary": {
"inputMint": "0x754704bc059f8c67012fed69bc8a327a5aafb603",
"outputMint": "0x3bd359c1119da7da1d913d1c4d2b7c461115433a",
"amount": "10000000"
}
},
"data": {
"ageSec": 10,
"maxAgeSec": 600
}
},
{
"key": "robinhood",
"id": 4663,
"name": "Robinhood Chain",
"quotes": {
"engine": "ok",
"latencyMs": 5,
"lastSyncBlock": 86010669,
"canary": {
"inputMint": "0x5fc5360d0400a0fd4f2af552add042d716f1d168",
"outputMint": "0x0bd7d308f8e1639fab988df18a8011f41eacad73",
"amount": "10000000"
}
},
"data": {
"ageSec": 4,
"maxAgeSec": 2700
}
}
]
}

Over the per-minute limit (RATE_LIMIT_EXCEEDED). Read X-RateLimit-Reset and back off.

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"
}