Wallet data
Two endpoints read an address directly from the chain, and one reads a transaction. They do not depend on the transfer index, and they work for addresses that have no label and no stored rows. You can use them from the wallet explorer or the transaction lookup too.
| Endpoint | Cost | Cache | Reads |
|---|---|---|---|
| Wallet overview | 3 units | 30 s | Balances on each chain of the family |
| Wallet activity | 3 units | 60 s on EVM, none on Solana | Recent transfers on one chain |
| Transaction lookup | 2 units | None | One transaction |
#Wallet overview on EVM
An EVM address is read on all six EVM chains at once, in one batch per chain:
eth_getBalancegives the native balance.eth_getTransactionCountgivestx_sent, the account nonce.eth_getCodegivesis_contract.balanceOfis called for each curated token. Only non-zero balances are returned.
This excerpt is from GET /wallets/0x28C6c06298d514Db089934071355E5743bf21d60 on 2026-11-04 UTC.
{
"address": "0x28C6c06298d514Db089934071355E5743bf21d60",
"family": "evm",
"label": { "name": "Binance 14", "type": "exchange", "address": "0x28C6c06298d514Db089934071355E5743bf21d60", "chains": ["ethereum"] },
"chains": [
{
"chain": "ethereum",
"ok": true,
"native": { "symbol": "ETH", "amount": 0.8033193330768161, "usd": 1946.85 },
"tx_sent": 18915339,
"is_contract": false,
"tokens": [
{ "symbol": "USDT", "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7", "amount": 1352017.937959, "usd": 1351209.43 }
],
"tracked_usd": 1409953.33
}
],
"indexed_transfers": [],
"partial": false
}If a chain fails, that entry reads {"chain":"base","ok":false,"error":"upstream_unavailable"}, and partial is true. If all six fail, the response is 502.
#Wallet overview on Solana
A Solana address returns one chain entry and recent signatures.
| Field | Meaning |
|---|---|
native | SOL balance from getBalance |
tokens[] | Top 60 by USD value, sorted |
token_count | All fungible tokens found, before the cut to 60 |
token_source | helius-das or getTokenAccountsByOwner |
tracked_usd | Value of tokens with a known price, plus SOL |
recent_signatures[] | Last 15, with signature, slot, ts and success |
With Helius, tokens come from getAssetsByOwner, up to 100 assets, with Helius price data where it exists. On fallback they come from getTokenAccountsByOwner, which covers the classic SPL Token program only, and only curated tokens get a USD value. Check token_source, because the two can differ for the same wallet. usd can be null, and symbol can be null for tokens with no metadata.
Anyone can send a token to any wallet. Unrecognized tokens in a balance list may be spam. A token with usd: null is common, and the list does not vouch for any token.
#Stored rows on the overview
indexed_transfers holds up to 25 stored rows that touch the address, newest first, across all chains. It is empty if nothing qualified in the last 7 days. An empty list does not mean the wallet was idle. See indexing. ts in this list is integer milliseconds, not an ISO string.
#Wallet activity on EVM
GET /wallets/{address}/activity?chain=base reads eth_getLogs for curated tokens where the address is the sender or the recipient.
| Field | Meaning |
|---|---|
blocks_scanned | Size of the range that was read |
from_block, to_block | The range |
scope | Transfers of the curated token list only. |
items[] | Up to 40 rows, newest first |
items[].direction | in or out |
items[].amount | Token amount, or null when decimals are unknown |
The range starts at 5,000 blocks. Public RPCs cap log ranges, so on an error the service tries 1,000, then 200, then 40 blocks. **Read blocks_scanned.** On 2026-11-04 UTC, a request for a Binance address on Ethereum returned blocks_scanned: 1000, or about 3.5 hours, and items: []. An empty list covers only that range.
| Chain | 5,000 blocks is roughly |
|---|---|
| Ethereum | 17 hours |
| Base, OP Mainnet, Polygon | 2 to 3 hours |
| BNB Chain | 40 minutes |
| Arbitrum One | 25 minutes |
These are estimates from the block rates measured on 2026-11-04 UTC. Activity has no size threshold. It returns small transfers too, unlike the index.
#Wallet activity on Solana
The same path returns the last 25 signatures with signature, slot, ts and success. It does not decode amounts. Pass a signature to Transaction lookup to read one.
#Transaction lookup
On EVM, the service reads the transaction and receipt, then decodes up to 60 ERC-20 Transfer logs.
| Field | Meaning |
|---|---|
status | success, failed or pending |
method | Name for known selectors, else the 4-byte selector |
value | Native value, with USD at the current price |
fee | Gas used times effective gas price, in the native asset |
token_transfers[] | Decoded logs with labels |
log_count | All logs in the receipt |
explorer | Public explorer link |
Known method names: transfer, transferFrom, approve, swapExactTokensForTokens, swapExactETHForTokens, swapExactTokensForETH, execute (Universal Router), exactInputSingle, exactInput, multicall, deposit, withdraw, supply, withdraw (Aave), swap (1inch), aggregate3, and native transfer for empty input.
On Solana, the response holds signer, programs[], sol_changes[] (up to 20), token_changes[] (up to 30), fee and compute_units. Solana has token names only for curated mints. Other tokens show mint with token: null.
#Address format
| Family | Accepted form |
|---|---|
| EVM | 0x plus 40 hex characters, any case |
| Solana | Base58, 32 to 44 characters |
| EVM hash | 0x plus 64 hex characters |
| Solana signature | Base58, 64 to 90 characters |
Addresses are public data, and looking one up does not mean anything about its owner. Do not use this data to identify or target private individuals. See acceptable use.
For a monitor built from these endpoints, see the wallet watch recipe.