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.

  1. Sanctioned wallet
    3 hops upstream, OFAC SDN list
  2. Mixer
    2 hops upstream, obfuscation service
  3. 0x3f…9e12
    1 hop upstream, unlabeled wallet
  4. 0x8a…c21e
    Screened 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.

Fund-flow graph of the screened address: 14 matched paths from labeled counterparties into the screened wallet

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
TPsjfD…CyCH·Block · 100/100

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.

The rule editor of a cloned ruleset: code, name, category, risk, action and direction per rule, a ★ column with the highlighted count, and Edit, Copy and Delete on every row
The rule editor. ★ marks the rules surfaced first in results; Copy derives a variant without retyping.

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.

The scoring ruleset editor: the contribution formula, verdict bands from Accept to Block, inflow and outflow bases per hop band, and severity weights
The scoring ruleset editor, as shipped: bases per hop band, verdict thresholds at 20 / 50 / 80, severity weights 1 / 0.8 / 0.6 / 0.3.

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.

The screening page after a run: address, detected chain and type, ruleset picker, the score with its verdict and the triggered rules
The console. Paste an address, press Run, read the result; every run is saved as a snapshot.
Request
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 }'
Response
{
  "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.

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 manual

Run 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.