One key, one call, one object: score, band, decision, recommendation, confidence, exposure. A fast screen for the moment a transfer lands, the full screening when you need the reasons, bulk for a list, webhooks signed. Below: a real call on a real org, the log and a delivery, as the product shows them.
$ curl -X POST https://api.sanctuary.cv/api/v1/wallets/check \ -H "Authorization: Bearer sk_live_••••••••••••••••" \ -H "Content-Type: application/json" \ -d '{"address":"TBbkhZXuz8NBMf4djthALQ5nKeL7pZ4i11","chain":"tron"}'
{ "address": "TBbkhZ…4i11", "chain": "tron", "score": 55, "riskLevel": "medium", "verdict": "MEDIUM RISK", "decision": "REVIEW", "recommendation": "Be careful, keep an eye on it", "isSanctioned": false, "confidence": 33, "confidenceBand": "possible", "exposure": { "riskPct": 5, "cleanPct": 33 }, "sourcesCount": 10, "checkedAt": "2026-08-22T13:10:41Z"}
The fast screen sits in the deposit path; anything it cannot clear goes to the full call. One decision field your code can branch on.
Bearer key, JSON in, JSON out. The same band and recommendation the compliance desk sees in the workspace, so the two never disagree.
Request ids in the headers, a log per organisation, HMAC signatures on deliveries, replay from the log. The audit trail is written by the integration itself.
The API returns what the workspace shows: score, band, decision, recommendation, confidence and exposure, in one JSON object, with the request id in the headers. A fast yes/no for the moment a deposit lands, the full screening when you need the reasons, a batch when you have a list.
The fast screen answers from the intelligence already held, under 100 ms at P95 22 ms, for the deposit path where a full screening would be too slow. Anything it cannot clear goes to the full call.
{ "address": "0x…", "chain": "ethereum" }
→ 200 · 21 ms
{ "score": 0, "verdict": "CLEAN", "isSanctioned": false, "mode": "fast_screen" }The same result the workspace shows: score, band, decision, recommendation, confidence, exposure and the number of source families consulted. The signed PDF for the same check is one more call away.
{ "score": 55, "riskLevel": "medium", "decision": "REVIEW",
"confidence": 33, "exposure": { "riskPct": 5, "cleanPct": 33 },
"sourcesCount": 10, "checkedAt": "2026-08-22T13:10:41Z" }Bulk takes the file and returns one row per address with the same fields. Webhooks deliver alerts with an HMAC signature in the headers, one id per delivery, and a replay button in the log when your endpoint was down.
X-Sanctuary-Signature: sha256=… X-Sanctuary-Event: alert.created X-Sanctuary-Delivery: one id per delivery · 204 · 9 ms · replay
Professional: 1,000 checks a month, API keys, $0.20 per check after. Business: 5,000 a month, the bulk endpoint, webhooks for alerts and pre-transaction screening, SLA. Enterprise: volume contracts, dedicated support.