Use when an agent must judge selling pressure or check reserves before depositing: a co…
Use when an agent must judge selling pressure or check reserves before depositing: a coin's exchange inflow or outflow. chainpeek (Tanod) exchange reserves: how much of a coin sits on centralised exchanges and its 1, 7 and 30-day inflow or outflow, from cache…
by tanod.dev · discovered, not yet claimed by its owner · updated 2026-10-12
Mirrored from Coinbase's public x402 Bazaar. The description is the provider's own text and has not been reviewed here; the payment requirements are copied as published.
What it does
Use when an agent must judge selling pressure or check reserves before depositing: a coin's exchange inflow or outflow. chainpeek (Tanod) exchange reserves: how much of a coin sits on centralised exchanges and its 1, 7 and 30-day inflow or outflow, from cached DefiLlama data.
Tags: chainpeek · chain · exchange · reserves · ens · bazaar · builder-code · erc20ApprovalGasSponsoring
Call contract
- Method
- POST
- Input
- json
- Output
- json
- Last paid call
- 2026-10-12
{
"asset": "BTC",
"days": 3,
"exchanges": [
"okx",
"bitfinex"
]
}{
"as_of": "2026-10-11",
"asset": "BTC",
"cache_age_hours": 0,
"cache_refreshed_at": "2026-10-11T22:48:42Z",
"days": 3,
"exchange_count": 2,
"exchanges": [
{
"amount": 157892.88715,
"as_of": "2026-10-11",
"change": {
"1d": {
"amount": 37.80942,
"pct": 0.024
},
"30d": {
"amount": 9143.91377,
"pct": 6.147
},
"7d": {
"amount": 4803.74547,
"pct": 3.138
}
},
"direction_7d": "inflow",
"exchange": "Bitfinex",
"share_pct": 51.97,
"slug": "bitfinex",
"stale": false,
"usd_value": 13195310963.64
},
{
"amount": 145924.63864,
"as_of": "2026-10-11",
"change": {
"1d": {
"amount": 372.45472,
"pct": 0.256
},
"30d": {
"amount": 2433.25547,
"pct": 1.696
},
"7d": {
"amount": 3457.86836,
"pct": 2.427
}
},
"direction_7d": "inflow",
"exchange": "OKX",
"share_pct": 48.03,
"slug": "okx",
"stale": false,
"usd_value": 12184838489.28
}
],
"history": [
{
"amount": 301262.89765,
"date": "2026-10-09",
"exchanges": 2,
"usd_value": 24616388603.82
},
{
"amount": 303407.26165,
"date": "2026-10-10",
"exchanges": 2,
"usd_value": 25036746237.95
},
{
"amount": 303817.52579,
"date": "2026-10-11",
"exchanges": 2,
"usd_value": 25380149452.92
}
],
"not_found": [],
"note": "The wallets are the exchanges' published or labelled wallets (proof-of-reserves lists and addresses DefiLlama has labelled), so a rise means coins moved into those wallets and a fall means they moved out. It does not show an exchange's full custody, off-chain or internal balances, or what the coins are used for. Token symbols are matched exactly: a wrapped token (WBTC, WETH) is a different asset from BTC or ETH. USD values use DefiLlama's price for that day. Daily snapshots; the newest day can be partial. Informational only, not investment advice.",
"reason": null,
"source": "Data: DefiLlama (used with permission), served from Tanod's cache, refreshed every few hours",
"totals": {
"amount": 303817.52579,
"change": {
"1d": {
"amount": 410.26414,
"pct": 0.135
},
"30d": {
"amount": 11577.16924,
"pct": 3.962
},
"7d": {
"amount": 8261.61383,
"pct": 2.795
}
},
"direction_7d": "inflow",
"usd_value": 25380149452.92
}
}Use with an agent
- Discover. Agents find this listing with
GET https://bazaar.saylorinnovations.com/discovery/search?query=…, the MCP toolsearch_resources, or/discovery/resources. - Inspect. Fetch
/resources/35783.jsonfor the price and payment options. - Pay. Call
GET https://tanod.dev/v1/chain/exchange-reserves. The provider answers402with its payment requirements. An x402 client signs one of the options below and retries withPAYMENT-SIGNATURE. - Execute. The provider returns
200with the data. Agent Bazaar is not in the request path and never sees your payment.
For humans
You don't need an account or an API key; you need a wallet holding a small amount of USDC on Base, Polygon, Solana, eip155:56, and an x402-capable client (see the examples below). Call the endpoint unpaid first to see exactly what it asks for.
Pricing & payment
- Price
- $0.01 / request
- Protocol
- x402 v2
- Auth
- No account or API key. Pay per request.
- Networks
- Base, Polygon, Solana, eip155:56
- Demand
- 3 calls · 3 unique payers in 30d (public x402 Bazaar data)
x402 payment requirements
| Scheme | Network | Asset | Amount | Pay to | Timeout |
|---|---|---|---|---|---|
| exact | Base eip155:8453 | USDC | $0.01 | 0x593857A4a4F619543ea12394137C3004ce841720 | 300s |
| exact | Polygon eip155:137 | USDC | $0.01 | 0x593857A4a4F619543ea12394137C3004ce841720 | 300s |
| exact | Solana solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp | USDC | $0.01 | RMk9k3VC8dr4hhjgFh88rGhjAbzfBzHxJJ5n2fTcqus | 300s |
| exact | eip155:56 eip155:56 | 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d | 10000000000000000 | 0x593857A4a4F619543ea12394137C3004ce841720 | 300s |
accepts[] (raw JSON)
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0x593857A4a4F619543ea12394137C3004ce841720",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "10000",
"amountUsd": 0.01,
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "eip155:137",
"payTo": "0x593857A4a4F619543ea12394137C3004ce841720",
"asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"amount": "10000",
"amountUsd": 0.01,
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"payTo": "RMk9k3VC8dr4hhjgFh88rGhjAbzfBzHxJJ5n2fTcqus",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"amount": "10000",
"amountUsd": 0.01,
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "eip155:56",
"payTo": "0x593857A4a4F619543ea12394137C3004ce841720",
"asset": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
"amount": "10000000000000000",
"maxTimeoutSeconds": 300
}
]Schemas
Output schema (JSON Schema)
{
"properties": {
"example": {
"properties": {
"as_of": {
"type": [
"string",
"null"
]
},
"asset": {
"type": "string"
},
"cache_age_hours": {
"type": "number"
},
"cache_refreshed_at": {
"type": "string"
},
"days": {
"type": "integer"
},
"exchange_count": {
"type": "integer"
},
"exchanges": {
"items": {
"properties": {
"amount": {
"type": "number"
},
"as_of": {
"type": "string"
},
"change": {
"properties": {
"1d": {
"properties": {
"amount": {
"type": "number"
},
"pct": {
"type": [
"number",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"30d": {
"properties": {
"amount": {
"type": "number"
},
"pct": {
"type": [
"number",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"7d": {
"properties": {
"amount": {
"type": "number"
},
"pct": {
"type": [
"number",
"null"
]
}
},
"type": [
"object",
"null"
]
}
},
"type": "object"
},
"direction_7d": {
"enum": [
"inflow",
"outflow",
"flat",
null
]
},
"exchange": {
"type": "string"
},
"share_pct": {
"type": [
"number",
"null"
]
},
"slug": {
"type": "string"
},
"stale": {
"type": "boolean"
},
"usd_value": {
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"history": {
"items": {
"properties": {
"amount": {
"type": "number"
},
"date": {
"type": "string"
},
"exchanges": {
"type": "integer"
},
"usd_value": {
"type": "number"
}
},
"type": "object"
},
"type": "array"
},
"not_found": {
"items": {
"type": "string"
},
"type": "array"
},
"note": {
"type": "string"
},
"reason": {
"type": [
"string",
"null"
]
},
"source": {
"type": "string"
},
"totals": {
"properties": {
"amount": {
"type": "number"
},
"change": {
"properties": {
"1d": {
"properties": {
"amount": {
"type": "number"
},
"pct": {
"type": [
"number",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"30d": {
"properties": {
"amount": {
"type": "number"
},
"pct": {
"type": [
"number",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"7d": {
"properties": {
"amount": {
"type": "number"
},
"pct": {
"type": [
"number",
"null"
]
}
},
"type": [
"object",
"null"
]
}
},
"type": "object"
},
"direction_7d": {
"enum": [
"inflow",
"outflow",
"flat",
null
]
},
"usd_value": {
"type": "number"
}
},
"type": "object"
}
},
"required": [
"asset",
"as_of",
"exchanges",
"totals",
"history",
"source",
"note"
],
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}Example shape — generated from the schema, not a captured live response
{
"example": {
"as_of": "string",
"asset": "string",
"cache_age_hours": 0,
"cache_refreshed_at": "string",
"days": 0,
"exchange_count": 0,
"exchanges": [
{
"amount": 0,
"as_of": "string",
"change": {
"1d": {
"amount": 0,
"pct": 0
},
"30d": {
"amount": 0,
"pct": 0
},
"7d": {
"amount": 0,
"pct": 0
}
},
"direction_7d": "inflow",
"exchange": "string",
"share_pct": 0,
"slug": "string",
"stale": true,
"usd_value": 0
}
],
"history": [
{
"amount": 0,
"date": "string",
"exchanges": 0,
"usd_value": 0
}
],
"not_found": [
"string"
],
"note": "string",
"reason": "string",
"source": "string",
"totals": {
"amount": 0,
"change": {
"1d": {
"amount": 0,
"pct": 0
},
"30d": {
"amount": 0,
"pct": 0
},
"7d": {
"amount": 0,
"pct": 0
}
},
"direction_7d": "inflow",
"usd_value": 0
}
},
"type": "string"
}Examples
curl "https://tanod.dev/v1/chain/exchange-reserves"
# -> 402 Payment Required, accepts[] lists how to pay
# retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paidconst res = await fetch("https://tanod.dev/v1/chain/exchange-reserves");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}import httpx
res = httpx.get("https://tanod.dev/v1/chain/exchange-reserves")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerDetails
- Provider
- tanod.dev
- Endpoint
- https://tanod.dev/v1/chain/exchange-reserves
- Machine-readable
/resources/35783.json