Counterparties
counterpartiesCOUNTERPARTIES / who an address set paid and was paid by, in one call: one row per counterparty with the USD value received from it and sent to it, the transfer counts each way, the first and last time they transacted, and how many of those transfers could not be priced. Counterparties are ranked by total USD (received plus sent) and the top ones are returned; everything below the cutoff is summed into one below_cutoff bucket, so the returned rows plus that bucket account for the whole flow. Pass one address or a set (up to 50); a transfer between two members of the set is left out. It can instead TOTAL the whole flow by the counterparty's label TYPE (group_by=label_type): the SHARE of inflow and outflow from exchanges, bridges, sanctioned or other entity types (e.g. "62% of inflow came from exchanges, 3% from sanctioned addresses"). Every counterparty row carries its on-chain LABELS. NOT a risk score -> use address_risk_report; NOT the labels of one address -> use labels_for_addresses; NOT a single address's asset totals -> use eth_address_flow_summary. USD is the value at the time of each transfer, from the chain's price store, and is null (never zero) for a side whose transfers could not be priced; a transfer in a token the price gate does not cover is counted but left unpriced. usd_total (received plus sent) is the ranking key, not a net balance: a pass-through counterparty counts on both sides. The window is the last 90 days by default; set after_time / before_time for a fixed period, which the answer echoes. format json (ask for it) returns the full object: every returned row with usd_total and the per-side unpriced-transfer counts, the below_cutoff bucket, how many addresses were requested and used (and invalid, when any were), and the cost - statements, rows and bytes read, and timing_ms. format markdown (the default) is a shorter summary and counterparty table to read - the counterparty, its USD in and out, the transfer counts, and first and last seen - without the cost or the per-row unpriced counts.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"addresses": "<addresses>",
"chain": "<chain>"
},
"name": "counterparties"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| chain | Yes | Chain of the address set - ethereum, tron, solana, bitcoin or zcash (Zcash transparent addresses only). | |
| limit | No | How many counterparties to return, largest total USD first. 1 to 1000 (default 100). Everything below is summed into below_cutoff. | |
| token | No | Restrict to one token. On Ethereum its contract address (0x followed by 40 hex characters); on Tron a TRC-20 contract (T followed by 33 characters) or a TRC-10 numeric asset id. Not applicable on Solana, Bitcoin or Zcash and rejected there. Empty (default) counts every token. | |
| cursor | No | Page token to continue past the returned counterparties. Take next_cursor from a previous call and pass it back with the SAME addresses, chain, window and filters to get the next page, until no next_cursor comes back. group_by=address only. Empty (default) returns the first page. | |
| format | No | markdown (default) returns a summary and a counterparty table to read (text); json returns every returned row as the object. | markdown |
| max_txs | No | Bitcoin and Zcash only. How many of the address's most recent transactions to read on each side - its newest max_txs spends (who it paid) and newest max_txs receipts (who paid it). 1 to 2000 (default 1000). The counterparties and totals are computed over that window; raise it to look further back, at more cost. Ignored on Ethereum, Tron and Solana (they use after_time / before_time). | |
| min_usd | No | Return only counterparties whose total USD (received plus sent) is at least this much. 0 (default) = no floor. Counterparties below it still count in below_cutoff. | |
| group_by | No | address (default) returns one row per counterparty. label_type returns the flow totalled by each counterparty's primary label type, with a (none) row for the unlabeled and a (below_cutoff) row for the counterparties past the limit, so the shares sum to 100%. | address |
| addresses | Yes | One address or a set of up to 50, separated by spaces, commas or '|'. On Ethereum each is a 0x address (0x followed by 40 hex characters); on Tron a base58 address (T followed by 33 characters); on Solana a base58 address (32-44 characters, case-sensitive); on Bitcoin a 1.../3.../bc1 address; on Zcash a transparent t1.../t3 address. Bitcoin and Zcash take ONE address per call (send a set one at a time). An address that is not valid for the chain is reported as invalid and skipped, not fatal. | |
| direction | No | both (default) counts what the set received and what it sent. in counts only inflows (who paid the set); out counts only outflows (who the set paid). | both |
| after_time | No | Only transfers at/after this UTC time. Empty = 90 days before before_time. Format: YYYY-MM-DD, YYYY-MM-DD HH:MM[:SS], ISO-8601 like 2026-09-20T00:00:00Z or 10-digit unix seconds. | |
| label_type | No | Keep only counterparties that carry at least one label of these types, a comma-separated list. Empty (default) keeps all. | |
| before_time | No | Only transfers strictly before this UTC time. Empty = the moment the call starts. Same formats as after_time. | |
| include_internal | No | EVM only. 0 (default) counts top-level transfers only - the transfer a transaction makes itself, plus token transfers. 1 also counts value moved by contract code deeper inside a transaction (an internal transfer). Only 0 or 1; 1 is rejected on Tron, Solana, Bitcoin and Zcash. | |
| exclude_label_type | No | Drop counterparties that carry any label of these types, a comma-separated list. Empty (default) drops none. | |
| include_zero_value | No | 0 (default) drops zero-amount transfers - an address-poisoning look-alike is planted as a 0-amount transfer. 1 keeps them. Only 0 or 1. |