Eth Transfers Out
eth_transfers_outOUTGOING Ethereum (eth, ETH, mainnet, L1) transfers from an address — where this wallet sent funds. Narrow with after_time (flows after funds arrived), currency (follow one asset), min_amount (drop dust). For an aggregated "where did the bulk go" view use eth_trace_next_hop; for incoming use eth_transfers_in. For an address with many transfers set min_amount or sort='amount', else large counterparties hide behind recent dust. Query WITHOUT a currency filter to surface the token → USDT off-ramp. Page back through history with cursor: pass the Cursor value of the LAST row of a page to get the next one — unlike before_time it never skips rows that share a timestamp. To identify counterparties, pass the returned addresses to labels_for_addresses. Each row carries the token Contract — a symbol alone can match look-alike clones, so pin the real token with the contract param. Amount is in TOKEN UNITS; amounts of different tokens must never be added together. Each row also carries Price_Usd - the token's USD price at the time of the transfer - and Value_Usd = Amount x Price_Usd, with Price_Status: "ok"; "no_price" = no price is known for this token at that time, so Price_Usd and Value_Usd are empty (never read that as zero); "suspect" = the stored price is more than twice the price one day earlier AND one day later, or less than half of both - a likely data glitch - so Value_Usd is left empty - check the price with price_at. ETH and the major tokens are priced to 5 minutes, every other token has ONE price per day, so the value of a small token is approximate. There is no usd filter: min_amount / max_amount are in token units. For a ranking you can reason about, pin ONE token with contract, or bound the range with min_amount / max_amount. Amount_Raw is the exact amount as an integer in the token's smallest unit and Decimals its scale (Amount = Amount_Raw / 10^Decimals); Block and Tx_Index place the row in the chain. A transaction's own transfer is TOP-LEVEL, not internal, and is always included. Internal = 1 marks a transfer moved by contract code deeper inside a transaction; those are left out unless you pass include_internal=1.
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": {
"address": "<address>"
},
"name": "eth_transfers_out"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | "amount" = largest transfers first; "recent" (default) = newest first. Ranking by amount returns a TOP-N, not the head of a page-walk: such a page carries no Cursor, so start a walk with sort='recent'. | recent |
| limit | No | Max transfers (ordered by `sort`; default newest first). At most 10000. | |
| cursor | No | Exact paging cursor: pass the Cursor value of the LAST row of the previous page to get the next page. Prefer this over before_time, which skips any rows sharing the last row's timestamp (busy addresses often have hundreds in one second). When set, before_time is ignored and rows come back newest-first whatever sort says. Empty = first page. | |
| format | No | Shape of the returned data. "rows" (the default) returns one item per row. "columnar" returns a single item, {"columns":[...],"rows":[[value,...],...]}, naming the columns once and listing each row's values in that order; it is more compact for large results and carries the same values. | rows |
| address | Yes | Wallet/contract address, 0x-hex (case-insensitive). | |
| contract | No | Restrict to ONE exact token by its contract address (0x-hex, case-insensitive) — the reliable way to pin a token, since a currency symbol also matches clone tokens. Pass "native" for ETH itself only - a currency filter such as "ETH" also matches counterfeit tokens that print that symbol. Empty = no token filter. | |
| currency | No | Restrict to one currency symbol (e.g. "USDT"). A symbol is NOT an identifier here — clone tokens reuse it, and look-alike spellings in other alphabets render identically, so a symbol filter can sweep counterfeits in. Pin the real token with contract. Empty = all. No backslashes. | |
| after_time | No | Only transfers at/after this UTC time (e.g. "2026-06-01 00:00:00"). Empty = no lower bound. | |
| max_amount | No | Maximum transfer amount (token units). 0 (default) = no upper bound. Amounts are in each token's own units and are NOT comparable across tokens, so with sort="amount" a token with inflated or wrong decimals can report billions of units and push real transfers off the page - cap it here, or pin one token with contract. | |
| min_amount | No | Minimum transfer amount (token units). 0 = all. | |
| before_time | No | Only transfers strictly before this UTC time — a coarse upper bound, NOT a paging mechanism (it drops every row sharing the last row's timestamp). Page with cursor instead. Ignored when cursor is set. Empty = no upper bound. Format: YYYY-MM-DD, YYYY-MM-DD HH:MM[:SS], ISO-8601 like 2026-09-20T00:00:00Z (fraction or +02:00 offset allowed) or 10-digit unix seconds. | |
| include_internal | No | 0 (default) = top-level transfers only - the transfer a transaction makes itself, plus token transfers. 1 = also count ETH moved by contract code deeper inside a transaction (an internal transfer, for example through a batch sender or a withdrawal contract). Only 0 or 1. |