curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.credprotocol.com/api/v2/sanctions/exposure/0xab5801a7d398351b8be11c439e05c5b3259aec9b?chains=1,8453"
import httpx
response = httpx.get(
"https://api.credprotocol.com/api/v2/sanctions/exposure/0xab5801a7d398351b8be11c439e05c5b3259aec9b",
params={"chains": "1,8453"},
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
exposure = response.json()
if exposure["risk"] != "none":
...
{
"address": "0xab5801a7d398351b8be11c439e05c5b3259aec9b",
"timestamp": "2026-11-02T10:04:11+00:00",
"chains_checked": [1, 8453],
"unavailable_chains": [],
"coverage": "complete",
"lists_checked": ["ofac_sdn", "ofac_consolidated"],
"sanctioned": false,
"matches": [],
"funding_source": {
"address": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"chain_id": 1,
"timestamp": "2022-03-14T09:22:51+00:00",
"transaction_hash": "0x4c2e...",
"certain": true,
"sanctioned": true,
"matches": [
{
"source": "ofac_sdn",
"entity_name": "TORNADO CASH",
"entity_type": "Entity",
"programs": "CYBER2",
"symbol": "ETH",
"currency_name": "Ethereum",
"address": "0x8589427373D6D84E98730D7795D8f6f8731FDA16",
"source_url": "https://sanctionssearch.ofac.treas.gov/Details.aspx?id=39796",
"listed_at": "2026-08-21T06:24:24+00:00"
}
]
},
"exposure": {
"counterparties_checked": 412,
"sanctioned_counterparties": [
{
"address": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"chains": [1],
"direction": "both",
"transaction_count": 3,
"first_seen": "2022-03-14T09:22:51+00:00",
"last_seen": "2022-06-01T18:40:12+00:00",
"recent": false,
"matches": [{ "source": "ofac_sdn", "entity_name": "TORNADO CASH", "...": "..." }]
}
],
"recent": false
},
"risk": "funded_by_sanctioned"
}
Sanctions
Sanctions Exposure
Screen an EVM address and everything it has transacted with against the OFAC lists
GET
/
api
/
v2
/
sanctions
/
exposure
/
{address}
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.credprotocol.com/api/v2/sanctions/exposure/0xab5801a7d398351b8be11c439e05c5b3259aec9b?chains=1,8453"
import httpx
response = httpx.get(
"https://api.credprotocol.com/api/v2/sanctions/exposure/0xab5801a7d398351b8be11c439e05c5b3259aec9b",
params={"chains": "1,8453"},
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
exposure = response.json()
if exposure["risk"] != "none":
...
{
"address": "0xab5801a7d398351b8be11c439e05c5b3259aec9b",
"timestamp": "2026-11-02T10:04:11+00:00",
"chains_checked": [1, 8453],
"unavailable_chains": [],
"coverage": "complete",
"lists_checked": ["ofac_sdn", "ofac_consolidated"],
"sanctioned": false,
"matches": [],
"funding_source": {
"address": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"chain_id": 1,
"timestamp": "2022-03-14T09:22:51+00:00",
"transaction_hash": "0x4c2e...",
"certain": true,
"sanctioned": true,
"matches": [
{
"source": "ofac_sdn",
"entity_name": "TORNADO CASH",
"entity_type": "Entity",
"programs": "CYBER2",
"symbol": "ETH",
"currency_name": "Ethereum",
"address": "0x8589427373D6D84E98730D7795D8f6f8731FDA16",
"source_url": "https://sanctionssearch.ofac.treas.gov/Details.aspx?id=39796",
"listed_at": "2026-08-21T06:24:24+00:00"
}
]
},
"exposure": {
"counterparties_checked": 412,
"sanctioned_counterparties": [
{
"address": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"chains": [1],
"direction": "both",
"transaction_count": 3,
"first_seen": "2022-03-14T09:22:51+00:00",
"last_seen": "2022-06-01T18:40:12+00:00",
"recent": false,
"matches": [{ "source": "ofac_sdn", "entity_name": "TORNADO CASH", "...": "..." }]
}
],
"recent": false
},
"risk": "funded_by_sanctioned"
}
Overview
Screen Address says whether an address is on a list. This endpoint answers the next question a compliance check asks: has the wallet dealt with one? It screens the address itself, then goes one hop out. Every address it has ever transacted with (native, internal and ERC-20 transfers, in either direction) and the address that first sent it value are screened against the same lists, in one pass.A wallet funded by a Tornado Cash withdrawal shows the pool contract as its funding source: the withdrawal arrives as an internal transaction from the sanctioned contract. This is the case the funding-source check exists to catch.
Authentication
| Method | Header | Cost |
|---|---|---|
| API Token | Authorization: Bearer YOUR_API_KEY | 3 Cred Units |
| x402 Payment | X-PAYMENT: <signed_payment> | $0.03 USDC |
Path Parameters
string
required
Ethereum address or ENS name
Query Parameters
string
default:"1"
Comma-separated chain ids to read, at most 5 (e.g.
1,8453). OFAC lists one EVM address, so a listed address is listed on every chain; the chains only decide whose activity is read.Response
boolean
true if the address itself is on a list. matches holds the direct list entries.object
The address that first sent value to the wallet, with
chain_id, timestamp, transaction_hash, whether it is sanctioned and its matches. certain is false when the chain’s oldest rows could not all be read, so an earlier funding transaction may exist. null when nothing of value ever arrived.object
counterparties_checked is the number of distinct addresses screened. sanctioned_counterparties lists the listed ones, most recently seen first, each with chains, direction (in, out or both, relative to the screened address), transaction_count, first_seen, last_seen, recent (contact within the last 90 days) and matches. recent at the top is true when any listed counterparty is recent.string
sanctioned (the address is listed), funded_by_sanctioned (its first funds came from a listed address), exposed (it has transacted with a listed address) or none, in that order of precedence.string
complete when every chain’s full history was read. partial when a chain was unavailable (listed in unavailable_chains) or has more rows than one query returns: the newest 10,000 transfers of each kind are read, so the oldest activity of a very busy wallet may be missing. unavailable when no chain answered; the direct screening result still stands.Caching
A chain’s counterparty set is cached for 30 minutes. The list match itself runs on every request, so a new designation shows up within an hour of OFAC publishing it.curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.credprotocol.com/api/v2/sanctions/exposure/0xab5801a7d398351b8be11c439e05c5b3259aec9b?chains=1,8453"
import httpx
response = httpx.get(
"https://api.credprotocol.com/api/v2/sanctions/exposure/0xab5801a7d398351b8be11c439e05c5b3259aec9b",
params={"chains": "1,8453"},
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
exposure = response.json()
if exposure["risk"] != "none":
...
{
"address": "0xab5801a7d398351b8be11c439e05c5b3259aec9b",
"timestamp": "2026-11-02T10:04:11+00:00",
"chains_checked": [1, 8453],
"unavailable_chains": [],
"coverage": "complete",
"lists_checked": ["ofac_sdn", "ofac_consolidated"],
"sanctioned": false,
"matches": [],
"funding_source": {
"address": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"chain_id": 1,
"timestamp": "2022-03-14T09:22:51+00:00",
"transaction_hash": "0x4c2e...",
"certain": true,
"sanctioned": true,
"matches": [
{
"source": "ofac_sdn",
"entity_name": "TORNADO CASH",
"entity_type": "Entity",
"programs": "CYBER2",
"symbol": "ETH",
"currency_name": "Ethereum",
"address": "0x8589427373D6D84E98730D7795D8f6f8731FDA16",
"source_url": "https://sanctionssearch.ofac.treas.gov/Details.aspx?id=39796",
"listed_at": "2026-08-21T06:24:24+00:00"
}
]
},
"exposure": {
"counterparties_checked": 412,
"sanctioned_counterparties": [
{
"address": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"chains": [1],
"direction": "both",
"transaction_count": 3,
"first_seen": "2022-03-14T09:22:51+00:00",
"last_seen": "2022-06-01T18:40:12+00:00",
"recent": false,
"matches": [{ "source": "ofac_sdn", "entity_name": "TORNADO CASH", "...": "..." }]
}
],
"recent": false
},
"risk": "funded_by_sanctioned"
}