Agent traffic per chain
const url = 'https://api.getchord.xyz/v1/agent/stats?chain=all&days=30';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/agent/stats?chain=all&days=30'How much programmatic traffic a chain sees through Chord, by the surface it came through: mcp (the hosted MCP), api (an API key), x402 and wallet (not live yet), anon (keyless scripts), and web (people in Chord’s own app; their board reads are not counted). agents adds up everything that is not web. Counts are requests answered 2xx; swapTx is swap transactions BUILT; what executed is under onchain, read from the router’s events on each chain. callers is distinct callers over the window. since is the first day with any count: the counters started on 2026-10-11, earlier days are unknown, not zero.
Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters”A chain key or id, or all (every chain plus chain-free calls such as Ask). Default all.
Window in UTC days, today included.
Responses
Section titled “ Responses ”object
UTC day.
UTC day.
Counts for one surface or a sum of surfaces.
object
Requests answered 2xx.
Swap transactions built, not executed.
Questions to the analyst.
Distinct callers in the window.
Counts for one surface or a sum of surfaces.
object
Requests answered 2xx.
Swap transactions built, not executed.
Questions to the analyst.
Distinct callers in the window.
object
Counts for one surface or a sum of surfaces.
object
Requests answered 2xx.
Swap transactions built, not executed.
Questions to the analyst.
Distinct callers in the window.
Counts for one surface or a sum of surfaces.
object
Requests answered 2xx.
Swap transactions built, not executed.
Questions to the analyst.
Distinct callers in the window.
Counts for one surface or a sum of surfaces.
object
Requests answered 2xx.
Swap transactions built, not executed.
Questions to the analyst.
Distinct callers in the window.
Counts for one surface or a sum of surfaces.
object
Requests answered 2xx.
Swap transactions built, not executed.
Questions to the analyst.
Distinct callers in the window.
Counts for one surface or a sum of surfaces.
object
Requests answered 2xx.
Swap transactions built, not executed.
Questions to the analyst.
Distinct callers in the window.
Counts for one surface or a sum of surfaces.
object
Requests answered 2xx.
Swap transactions built, not executed.
Questions to the analyst.
Distinct callers in the window.
Oldest first; programmatic callers only.
object
What actually executed on chain. Null for Solana (Chord has no router there) and when the record cannot be read.
object
Swaps executed through Chord’s router in the window, from the router’s own Swap events.
Distinct sender addresses. A swap relayed by another contract has that contract as sender.
USD of the swaps that have a dollar-stable leg (that leg’s own amount).
Swaps with no stable leg: counted in swaps, not in volumeUsd. Never estimated.
Swaps whose transaction was built through a known surface in the two hours before it landed, by surface. The rest are unlabelled.
object
Oldest first.
object
object
First block this record covers. Swaps before it are not known, not zero.
Last block read.
ISO time.
Example
{ "chain": "arc", "days": 7, "from": "2026-10-05", "to": "2026-10-11", "agents": { "calls": 9, "reads": 7, "quotes": 2, "swapTx": 0, "asks": 0, "callers": 2 }, "web": { "calls": 0, "reads": 0, "quotes": 0, "swapTx": 0, "asks": 0, "callers": 0 }, "bySource": { "mcp": { "calls": 6, "reads": 6, "quotes": 0, "swapTx": 0, "asks": 0, "callers": 1 }, "x402": { "calls": 0, "reads": 0, "quotes": 0, "swapTx": 0, "asks": 0, "callers": 0 }, "wallet": { "calls": 0, "reads": 0, "quotes": 0, "swapTx": 0, "asks": 0, "callers": 0 }, "api": { "calls": 1, "reads": 1, "quotes": 0, "swapTx": 0, "asks": 0, "callers": 1 }, "anon": { "calls": 2, "reads": 0, "quotes": 2, "swapTx": 0, "asks": 0, "callers": 1 }, "web": { "calls": 0, "reads": 0, "quotes": 0, "swapTx": 0, "asks": 0, "callers": 0 } }, "daily": [ { "day": "2026-10-05", "calls": 0, "reads": 0, "quotes": 0, "swapTx": 0, "asks": 0 }, { "day": "2026-10-06", "calls": 0, "reads": 0, "quotes": 0, "swapTx": 0, "asks": 0 } ], "since": "2026-10-11", "onchain": { "swaps": 1, "wallets": 1, "volumeUsd": 190, "unpriced": 0, "bySource": {}, "daily": [ { "day": "2026-10-05", "swaps": 0, "volumeUsd": 0 }, { "day": "2026-10-06", "swaps": 0, "volumeUsd": 0 } ], "coverage": [ { "chain": 5042, "fromBlock": 20268312, "cursor": 25453341 } ] }, "updatedAt": "2026-10-11T18:22:55.946Z"}Invalid parameters — error names the check that failed (INVALID_PARAMS, BAD_ADDRESS, BAD_LIMIT, BAD_HOURS, …).
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"}Over the per-minute limit (RATE_LIMIT_EXCEEDED). Read X-RateLimit-Reset and back off.
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"}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"}