Every transfer has a history.See it before you accept the funds.
DART follows the funds up to five hops back through labeled counterparties, matches every path against your rules, and returns a 0–100 score with the exact rules behind it.
Built for exchanges, payment firms and licensed VASPs. Available as a dashboard and as an API.
- Sanctioned wallet3 hops upstream, OFAC SDN list
- Mixer2 hops upstream, obfuscation service
- 0x3f…9e121 hop upstream, unlabeled wallet
- 0x8a…c21eScreened address, inbound deposit
01 · Address screening
Type in an address. Watch where its money came from.
One screening, replayed exactly as the console runs it: the address is recognised, its funds are traced upstream, every path is matched against the ruleset, and the verdict comes back with the evidence behind it.
02 · Fund-flow graph
Every hop has an amount. Every transfer can be traced.
The same screening, drawn: every matched path from the labeled counterparties on the left into the screened address on the right. Drag, zoom, hover, filter.

The interactive graph — drag, zoom, filter — is on the desktop site.
- paths matched
- 14
- hops traced upstream
- 3
- distinct transfers, amounts on every one
- 22
03 · Rulesets and scoring
72 rules in plain sight. One matrix gives the score.
Every verdict traces back to a rule you can read and a matrix you can edit. Clone a built-in ruleset, change a threshold, copy a rule into a variant, mark the ones you care about with a ★ — the engine runs exactly what the editor shows.


One rule, as stored
{
"rule_code": "KYA_SANCTION_EXPOSURE_H2",
"name": "Exposure to sanctioned address (2 hops)",
"category": "Sanctions",
"risk_level": "critical",
"action": "block",
"min_hops": 2,
"max_hops": 2,
"conditions": [
{ "parameter": "primary_category",
"operator": "==", "value": "Sanctions" },
{ "parameter": "amount",
"operator": ">", "value": 10, "unit": "USD" },
{ "parameter": "risk_rate",
"operator": ">=", "value": 5 }
],
"reference": "MAS PSN02; FATF R.16"
}Three conditions, all of which must hold. amount is the smallest edge on the path — the funds that could actually traverse it — and risk_rate divides that by what the screened address received. The hop band is exact: this rule speaks only for 2-hop paths; its siblings cover 1 and 3 to 5.
Then the score
contribution = base × severity weight × fund ratio
Every hit adds one cell of the matrix — its base for direction and hop band, scaled by the rule’s severity and by the share of the address’s flow the risky money represents. The cells sum to a 0–100 score, and the bands turn it into a decision: Accept, Review, EDD, Block. An address that itself carries a sanctions label scores 100 outright.
Clone the scoring ruleset to move a threshold or reweight a band; the console shows the derivation of every score it gives.


04 · Two ways in
Click Run in the console, or send one curl.
The console and the API run the same engine on the same rulesets and return the same result. Analysts work in the console; systems call the API — one request, one JSON, Chainalysis-compatible with our extensions. Batches go in as a CSV.


curl -X POST https://api.trustin.bond/api/v3/screen/kya \
-H "X-Api-Key: $DART_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "chain_name": "Tron", "address": "TZCL2K…3ULr", "inflow_hops": 3 }'{
"risk": "critical",
"riskReason": "Critical: Exposure to sanctioned address (2 hops)",
"score": { "score": 24.1, "verdict": "review", "hitPaths": 7 },
"exposures": [
{ "category": "Sanctions",
"direction": "inflow", "value": 139609 },
{ "category": "Public Freezing Action",
"direction": "inflow", "value": 32197.5 }
],
"highlightSummary": { "rulesChecked": 5, "rulesHit": 0 },
"hits": [ … 7 paths: rule, hops, amounts, nodes … ]
}Sync by default; async returns a job id to poll. Same account, same quota, same snapshots as the console. Read the API docs →
05 · Questions
Six things people ask before they start.
Where does the data come from, and which chains?
Labels and fund flows come from our own on-chain data layer, which attributes addresses to sanctioned entities, exchanges, mixers and other categories and traces transfers hop by hop. The chains and assets a screening accepts are read live from that layer — the console shows the current list.
Read more in the manualHow many hops, and how long does a screening take?
Inflow and outflow depth are set per screening, up to 5 hops each way; the graph grows with every hop, so daily screening usually runs 3 hops in and 1 out. Most screenings return within a minute; deep traces of very active addresses take longer and can run asynchronously.
Read more in the manualCan I change the rules?
Built-in rulesets are read-only. Clone one and the copy is yours: edit any rule, copy a rule into a variant, add your own, mark the ones you care about with a ★ — the engine runs exactly what the editor shows.
Read more in the manualHow does a score turn into a verdict?
Each hit contributes base × severity weight × fund ratio; the sum, capped at 100, falls into a band — Accept, Review, EDD or Block. An address that itself carries a sanctions label scores 100 outright.
Read more in the manualWhat is kept for audit?
Every screening is saved as a snapshot with its request parameters and the complete result — score, verdict, every hit and path. Snapshots are immutable and can be reopened from the console or the API at any time.
Read more in the manualHow do we get access?
Accounts are provisioned by our team for exchanges, payment firms and licensed VASPs. Book a demo and we will set one up; the same account works in the console and against the API.
Read more in the manualLabels and fund flows come from our own on-chain data layer, which attributes addresses to sanctioned entities, exchanges, mixers and other categories and traces transfers hop by hop. The chains and assets a screening accepts are read live from that layer — the console shows the current list.
Read more in the manualRun your next address through it.
A console and an API, for exchanges, payment firms and licensed VASPs. Accounts are provisioned by our team — book a demo and we will set one up.