Index freshness and depth
const url = 'https://api.getchord.xyz/v1/arc/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/arc/statusIs the Arc rollup fresh, how far back it reaches, and the state of the pool index and the holder ledger. Check this before trusting a quiet number.
Served from Chord’s rollup and index tables (every swap on Arc summed by hour, token and venue), never from a raw scan — so calls are cheap and every answer carries its coverage. No key needed. 503 NOT_READY until the rollup has run on the deployment.
Responses
Section titled “ Responses ”object
Unix time, seconds, UTC.
object
V2 + V3 pools indexed.
Last block the pool crawler processed.
Pool discovery reached genesis.
Holder-ledger lane state (tracked tokens, completed backfills, cursors).
Unix time, milliseconds — when the server built this answer.
Example
{ "chain": 5042, "enabled": true, "recentAt": 1789891429, "staleSec": 423, "floorHour": 1780520400, "genesisHour": 1780520400, "backfillComplete": true, "index": { "pools": 30528, "v4Pools": 190394, "cursor": 21808222, "genesis": true }, "holders": { "enabled": true, "tracked": 1000, "complete": 225, "forwardCursor": 21808247, "from": 21273472, "backfilling": "0x3600000000000000000000000000000000000000" }, "updatedAt": 1789891853280}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"}