API
POST /trace
Follow one transfer through a mixer or an exchange, and get the wallets on the other side that most likely belong to the same person.
Request
Describe the transfer to follow. Its values come from the connections[].transfers of an /analyze response.
| Field | Type | Meaning |
|---|---|---|
wallet | string | Required. The wallet whose transfer is traced. |
counterparty | string | Required. The mixer pool or exchange wallet on the other side. |
signature | string | Required. The transfer's transaction. |
direction | "in" | "out" | Required. out: the wallet deposited (traced forward). in: it withdrew (traced back). |
time | integer | Required. Unix seconds. |
sol | number | Required. SOL moved (0 if none). |
usd | number | Required. Stablecoins moved, in dollars (0 if none). |
window | integer | Seconds to search. Default 24 h for a mixer, 1 h for an exchange; at most 7 days. |
request.sh
1curl -X POST https://iriscan.app/api/trace \2 -H "Authorization: Bearer $IRIS_KEY" \3 -H "Content-Type: application/json" \4 -d '{5 "wallet": "21DnhyxUW2vJghLXXnXwEkmyHrV9vkAmGXvGqoTytzqF",6 "counterparty": "4AV2Qzp3N4c9RfzyEbNZs2wqWfW4EwKnnxFAZCndvfGh",7 "signature": "<deposit signature>",8 "direction": "out",9 "time": <unix seconds>,10 "sol": 254.0226,11 "usd": 012 }'Response
200 OK · response.json (abridged)
1{2 "entity": "Privacy Cash",3 "kind": "mixer",4 "direction": "forward",5 "anchor": { "signature": "…", "amount": 254.0226, "asset": "SOL", "time": … },6 "window": { "from": …, "to": …, "searched": ["4AV2…"], "transactions": 1840, "complete": true },7 "anonymity_set": 1,8 "candidates": [9 {10 "address": "EeTpxJBVuT6mUDFekexBbza79Ss2arkQ3C4tYgYcHxBF",11 "signature": "…",12 "amount": 253.1275,13 "time": …,14 "delta_seconds": …,15 "tier": "trivial",16 "confidence": 1,17 "via": null,18 "label": null,19 "same_wallet": false20 }21 ]22}| Field | Type | Meaning |
|---|---|---|
entity, kind | string | Who is in the middle, and whether it is a mixer or an exchange. |
direction | "forward" | "backward" | Forward from a deposit, back from a withdrawal. |
anchor | object | The transfer traced. |
window | object | What was searched. complete: false means a busy wallet was read in part. |
anonymity_set | number | How many transfers of the same amount were found. 1 means only one fits. |
candidates[] | Candidate | Best first: address, amount, delta_seconds, tier, confidence (0 to 1), via (an exchange deposit address it went through), same_wallet. |
Tiers go from trivial (within 5 minutes) through strong, likely, weak and loose to distant (more than a day). See Reading the results.
Specific errors
400“Not a mixer or an exchange Iris knows”: the counterparty can't be traced through.400“The transfer moved no SOL or stablecoin to trace”.400“direction must be "in" or "out"”.