> ## Documentation Index
> Fetch the complete documentation index at: https://docs.credprotocol.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Sanctions Exposure

> Screen an EVM address and everything it has transacted with against the OFAC lists

## Overview

[Screen Address](https://docs.credprotocol.com/api-reference/sanctions/screen.md) 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.

> [!NOTE]
>
> 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

**address** `string` *required*

Ethereum address or ENS name

## Query Parameters

**chains** `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

**sanctioned** `boolean`

`true` if the address itself is on a list. `matches` holds the direct list entries.

**funding\_source** `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.

**exposure** `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.

**risk** `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.

**coverage** `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.

```bash cURL theme={null}
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.credprotocol.com/api/v2/sanctions/exposure/0xab5801a7d398351b8be11c439e05c5b3259aec9b?chains=1,8453"
```

```python Python theme={null}
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":
    ...
```

```json 200 theme={null}
{
  "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"
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.