# Agent traffic per chain

`GET https://api.getchord.xyz/v1/agent/stats`

Source: https://getchord.xyz/docs/api-reference/operations/agentstats/

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

| Name | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| `chain` | query | no | `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` | query | no | integer (default `30`) | Window in UTC days, today included. |

## Response 200

Example (captured from the live API):

```json
{
  "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"
}
```

- **400**: Invalid parameters — `error` names the check that failed (`INVALID_PARAMS`, `BAD_ADDRESS`, `BAD_LIMIT`, `BAD_HOURS`, …).
- **429**: Over the per-minute limit (`RATE_LIMIT_EXCEEDED`). Read `X-RateLimit-Reset` and back off.
- **503**: 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.
