Arc Transfers In
arc_transfers_inINCOMING Arc (arc, ARC, Arc Network, Circle Arc) transfers to an address — where this wallet
received funds from.
NOT the opposite direction → use arc_transfers_out.
NOT totals per sender → use arc_address_flow_summary.
Returns up to limit transfers (default 20, at most 10000), newest first by default; page back with the
last row's Cursor.
Use to trace the
source of funds backwards. For an address with many transfers set min_amount or
sort='amount', else large sources hide behind recent dust. Query WITHOUT a currency
filter to see where the bulk of funds originated. 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. A token has ONE price per day, so its value is approximate. USDC ON ARC IS
NOT PRICED HERE: the native coin and the ERC-20 at
0x3600000000000000000000000000000000000000 always read no_price - it is USDC, so
price it as USDC on Ethereum with price_at. 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.
Every row carries Native (1 = the native coin) next to Contract, and Internal = 1 marks
a transfer moved by contract code inside a transaction.
On Arc most USDC moves through contract code, so internal transfers are counted by default;
pass include_internal=0 for top-level transfers only. A transaction's own transfer is
top-level, not internal.
USDC ON ARC IS ONE ASSET WITH TWO INTERFACES that share a single balance: the NATIVE coin
that pays for gas (Native = 1, no contract, 18 decimals) and the ERC-20 token at
0x3600000000000000000000000000000000000000 (6 decimals). Each movement is listed once,
under the interface that carried it, so the two together are the address's USDC flow -
asset_type="usdc" selects both at once, and Contract tells you which interface a row used.
Over a thousand OTHER contracts on this chain print the symbol USDC too and they are
unrelated tokens: never identify an asset by its symbol, use Contract and Native.
System rows that only repeat a USDC movement already listed here are left out, so nothing
is counted twice.
Symbol_NonAscii = 1 flags a symbol that is not plain ASCII: normal for CJK / emoji names, also how a look-alike imitates a major token.
Each row: Time, Sender, Currency, Symbol_NonAscii, Contract, Native, Amount, Internal, Tx, Cursor, Amount_Raw, Decimals, Block, Tx_Index, Price_Status, Price_Usd, Value_Usd.
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": "arc_transfers_in"
}
}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 the native USDC coin only (the 18-decimal interface; asset_type=usdc selects both interfaces of USDC). Empty = no token filter. | |
| currency | No | Restrict to one currency symbol. NOT an identifier — several tokens can share a symbol, so this alone may match a counterfeit; pin the real one with contract. Empty = all. No backslashes. On Arc the symbol "USDC" also matches over a thousand unrelated contracts, so it is not an asset filter - pass asset_type=usdc for the gas asset itself (both of its interfaces), or pin one contract. | |
| after_time | No | Only transfers at/after this UTC time. Empty = no lower 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. | |
| asset_type | No | Restrict to one kind of asset. all (default) = tokens and the native USDC coin; native = only the native USDC coin (18 decimals); token = only tokens, the 6-decimal ERC-20 USDC included; usdc = the gas asset through BOTH of its interfaces at once - the native coin and the ERC-20 at 0x3600000000000000000000000000000000000000 - which is the whole USDC flow of an address. | all |
| 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 | 1 (default) = also count USDC moved by contract code deeper inside a transaction (an internal transfer, for example through a batch sender or a withdrawal contract); 0 = top-level transfers only - the transfer a transaction makes itself, plus token transfers. On Arc most USDC moves through contract code, so internal transfers are counted by default. Only 0 or 1. |