Response fields
Every answer starts with _meta (see Reading results). Rows that name an address carry the label fields.
Tron trace
Section titled “Tron trace”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. |
Ethereum trace
Section titled “Ethereum trace”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).
Bitcoin trace
Section titled “Bitcoin trace”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. |
Zcash trace
Section titled “Zcash trace”The fields of Bitcoin trace, holding ZEC: seed_btc, taint_btc and accounting_btc keep their names, and edge taint is in zatoshi.
Batch envelope
Section titled “Batch envelope”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.
Large answers
Section titled “Large answers”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:
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_stopsOver MCP, large answers come back as a digest with a result_id; read parts with get_result.
© 2026 Hansung Onchain Data LabTermsPrivacyGet access