Get screening in 5 minutes

Screen a crypto wallet address against OFAC, EU, UN, and UK sanctions lists with a single API call.

1Sign up and create an API key

  1. 1. Create an account — free, no credit card required.
  2. 2. Subscribe to a paid plan (Starter+) from the pricing page — API access requires a paid plan.
  3. 3. Go to Dashboard → API Keys and click Create key.
  4. 4. Copy the key. It is shown once — save it somewhere safe.
Keys starting with sk_test_ are test keys. Keys starting with sk_live_ are live keys. Both work against the same data; test keys are flagged separately in usage logs.

2Make your first request

Choose your preferred method — cURL, the Python SDK, or the Node.js SDK:

export SCREENING_API_KEY=sk_live_...

cURL

curl https://screeningapi.io/api/v1/screen \
  -H "Authorization: Bearer $SCREENING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"address":"0x8589427373D6D84E98730D7795D8f6f8731FDA16","chain":"ethereum"}'

Python SDK

pip install chainscreen

from chainscreen import Client
client = Client(api_key="sk_live_...")
result = client.screen("0x8589427373d6d84e98730d7795d8f6f8731fda16", "ethereum")
print(result.level, result.score)  # CRITICAL 100

Node.js SDK

npm install @chainscreen/sdk

import { Client } from '@chainscreen/sdk'
const client = new Client({ apiKey: 'sk_live_...' })
const result = await client.screen('0x8589427373d6d84e98730d7795d8f6f8731fda16', 'ethereum')
console.log(result.level, result.score)  // CRITICAL 100

The address above is the Tornado Cash router — an OFAC-sanctioned address, useful for testing. See Python SDK docs and Node.js SDK docs for full API.

3Read the response

{
  "address": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
  "chain": "ethereum",
  "score": 100,
  "level": "CRITICAL",
  "labels": [
    {
      "label": "sanctions",
      "source": "OFAC_SDN",
      "source_ref": "TORNADO_CASH",
      "added_at": "2022-08-08T00:00:00.000Z"
    }
  ],
  "data_freshness": {
    "OFAC_SDN": {
      "last_updated": "2026-05-26T04:07:00.000Z",
      "age_seconds": 127
    }
  },
  "scoring_version": "v1.0",
  "_disclaimer": "Screening results are informational only..."
}
FieldMeaning
levelCLEAN_NO_MATCH LOW MEDIUM HIGH CRITICAL — take action if HIGH or CRITICAL
score0–100 numeric risk score. Higher is riskier.
labelsRisk signals from each data source. Empty array means no match.
data_freshnessWhen each source was last successfully ingested.

4Next steps