Skip to content

Response fields

Every answer starts with _meta (see Reading results). Rows that name an address carry the label fields.

Top level: trace_semantics (2), source ({id, addr}), method, asset, initial_taint, min_taint, hops, the completeness fields (truncated, truncations, max_scan, scan_truncated, rolling_fallback_nodes), reexpansions, nodes, edges, taint_at_label_stops, accounting and labels.

Field Meaning
taint_at_label_stops {entity: taint}: how much reached each labelled stop.
accounting Where the traced amount ended up; buckets add up to initial_taint (see Tracing funds).
nodes[].id, addr The address.
nodes[].hop Length of the path that first reached it; 0 is the source.
nodes[].arrival_block Block of the earliest tainted arrival. Nothing before it carries taint.
nodes[].taint_in, taint_out All taint that flowed in and out. A cycle counts twice.
nodes[].expansions, expanded How often, and whether, the address was followed.
nodes[].stop label, hub_degree or no_outflow.
edges[].edge_id The transfer; pass it to annotate.
edges[].from, to Node ids.
edges[].hop, block, time When it first carried taint, and when it happened.
edges[].amount_f64, taint The whole transfer, and its tainted share.

The fields of Tron trace. asset is the token’s numeric id (0 for ETH), and initial_taint, min_taint, accounting, taint_at_label_stops, edges[].amount_f64 and edges[].taint are in the asset’s base units (wei for ETH).

Top level: chain, source ({addr_id, addr}), rule, hops, seed_btc, accounting_btc, n_addresses_reached, n_tx_visited, nodes, edges, attribution, truncated, labels, and min_purity when set.

Field Meaning
accounting_btc Where the traced BTC ended up; buckets add up to seed_btc.
nodes[] The top top nodes by taint. Totals in accounting_btc cover all of them.
address node id, addr_id, addr, taint_btc, first_hop, label fields, subject, is_stop, and pinned and cluster_id when pinned.
cluster node id (for drawing), cluster_id (the name to quote and pass as cluster:<address>), n_members, representative, taint_btc, first_hop, entity, category, subject, ingress, is_stop, n_labeled_members.
subject The kind of holder: the category, or for a deposit address the category of its entity (an exchange deposit address is cex).
ingress Member addresses the funds entered a cluster through, with their own labels.
edges[] hop, from, to, block, time, taint (sat), taint_btc, to_addr_id. For drawing; up to 200,000 rows.
attribution[] Labelled deposit addresses the funds reached, with entity, attributed_to and taint_btc.

The fields of Bitcoin trace, holding ZEC: seed_btc, taint_btc and accounting_btc keep their names, and edge taint is in zatoshi.

A targets request answers with:

{"_meta": {}, "batch": true, "n": 3, "n_errors": 1, "results": [
{"input": "<address 1>", "...": "the single-input answer"},
{"input": "<address 2>", "error": {"code": "invalid_address", "message": "..."}}
]}

Each row is the single-input answer plus input, or {"input", "error"}. A failed row does not fail the request: check n_errors and every error.

A trace or a wide page can run to megabytes. Save the body to a file and read only the parts you need. For an AI agent, read it in slices of at most about 25,000 characters, for example:

Terminal window
python -c "import json,sys; d=json.load(open(sys.argv[1],encoding='utf-8')); print(json.dumps({k: d.get(k) for k in sys.argv[2:]}, ensure_ascii=False)[:20000])" answer.json truncated truncations taint_at_label_stops

Over MCP, large answers come back as a digest with a result_id; read parts with get_result.

© 2026 Hansung Onchain Data LabTermsPrivacyGet access