Skip to content

Agent traffic per chain

GET
/agent/stats
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.

chain
string
Allowed values: all monad robinhood arc avalanche base bnb arbitrum ethereum solana

A chain key or id, or all (every chain plus chain-free calls such as Ask). Default all.

days
integer
default: 30 >= 1 <= 90

Window in UTC days, today included.

Media typeapplication/json
object
chain
string
days
integer
from

UTC day.

string
to

UTC day.

string
agents

Counts for one surface or a sum of surfaces.

object
calls

Requests answered 2xx.

integer
reads
integer
quotes
integer
swapTx

Swap transactions built, not executed.

integer
asks

Questions to the analyst.

integer
callers

Distinct callers in the window.

integer
web

Counts for one surface or a sum of surfaces.

object
calls

Requests answered 2xx.

integer
reads
integer
quotes
integer
swapTx

Swap transactions built, not executed.

integer
asks

Questions to the analyst.

integer
callers

Distinct callers in the window.

integer
bySource
object
mcp

Counts for one surface or a sum of surfaces.

object
calls

Requests answered 2xx.

integer
reads
integer
quotes
integer
swapTx

Swap transactions built, not executed.

integer
asks

Questions to the analyst.

integer
callers

Distinct callers in the window.

integer
x402

Counts for one surface or a sum of surfaces.

object
calls

Requests answered 2xx.

integer
reads
integer
quotes
integer
swapTx

Swap transactions built, not executed.

integer
asks

Questions to the analyst.

integer
callers

Distinct callers in the window.

integer
wallet

Counts for one surface or a sum of surfaces.

object
calls

Requests answered 2xx.

integer
reads
integer
quotes
integer
swapTx

Swap transactions built, not executed.

integer
asks

Questions to the analyst.

integer
callers

Distinct callers in the window.

integer
api

Counts for one surface or a sum of surfaces.

object
calls

Requests answered 2xx.

integer
reads
integer
quotes
integer
swapTx

Swap transactions built, not executed.

integer
asks

Questions to the analyst.

integer
callers

Distinct callers in the window.

integer
anon

Counts for one surface or a sum of surfaces.

object
calls

Requests answered 2xx.

integer
reads
integer
quotes
integer
swapTx

Swap transactions built, not executed.

integer
asks

Questions to the analyst.

integer
callers

Distinct callers in the window.

integer
web

Counts for one surface or a sum of surfaces.

object
calls

Requests answered 2xx.

integer
reads
integer
quotes
integer
swapTx

Swap transactions built, not executed.

integer
asks

Questions to the analyst.

integer
callers

Distinct callers in the window.

integer
daily

Oldest first; programmatic callers only.

Array<object>
object
day
string
calls
integer
reads
integer
quotes
integer
swapTx
integer
asks
integer
since
string | null
onchain

What actually executed on chain. Null for Solana (Chord has no router there) and when the record cannot be read.

object
swaps

Swaps executed through Chord’s router in the window, from the router’s own Swap events.

integer
wallets

Distinct sender addresses. A swap relayed by another contract has that contract as sender.

integer
volumeUsd

USD of the swaps that have a dollar-stable leg (that leg’s own amount).

number
unpriced

Swaps with no stable leg: counted in swaps, not in volumeUsd. Never estimated.

integer
bySource

Swaps whose transaction was built through a known surface in the two hours before it landed, by surface. The rest are unlabelled.

object
key
additional properties
any
daily

Oldest first.

Array<object>
object
day
string
swaps
integer
volumeUsd
number
coverage
Array<object>
object
chain
integer
fromBlock

First block this record covers. Swaps before it are not known, not zero.

integer | null
cursor

Last block read.

integer | null
updatedAt

ISO time.

string
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, …).

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

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

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