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

# Chainalysis sanctions screening

The io.b3os/chainalysis-sanctions pack: 1 actions with call snippets, fixture outputs, connection setup and error codes, generated from version 1.0.0.

`io.b3os/chainalysis-sanctions` 1.0.0 · `compliance`, `crypto`, `security` · MIT

Screen a blockchain address against the sanctions lists Chainalysis tracks (OFAC SDN and others) with your own free Chainalysis sanctions API key. Chain-agnostic: EVM, Bitcoin, Solana and other address formats. Returns whether the address is listed, the categories and every listing with its source URL. A clean result means no listing at the time of the call, not a compliance determination.

Every call's result carries `upstream_status` and `timing`: `validate_ms`, `inject_ms`, `render_ms`, `upstream_ms`, `map_ms` and `total_ms`. `upstream` is the service's time; the others are B3OS's own ([call actions](/actions/call)). The snippets below show no timing values, because a fixture records none.

## Connection

`chainalysis`, type `api_key`: Chainalysis sanctions API key.

Your key for the Chainalysis sanctions screening API (free registration), sent as the X-API-Key header to public.chainalysis.com only.

How to get one: [auth-developers.chainalysis.com](https://auth-developers.chainalysis.com/sanctions-screening/api-reference/api-overview).

The credential is sent only to `public.chainalysis.com`.

Store the credential once as a [vault connection](/vault) for this pack and key, then name its id in a call's `connections`. Leave the key out and B3OS uses the project's newest connection for the pack and key without a `subject` ([connections](/actions/call#connections)).

Hosts it reaches: `public.chainalysis.com`.

## Actions

| Action | Effect | MCP tool | Title |
|---|---|---|---|
| [`check-address`](/actions/catalog/chainalysis-sanctions#chainalysis-sanctions-check-address) | read | `chainalysis-sanctions__check-address` | Screen Address for Sanctions |

check-address

**Screen Address for Sanctions.** Check whether a blockchain address is on any sanctions list tracked by Chainalysis (OFAC SDN, EU, UN, etc.). Returns a boolean sanctioned flag, unique categories, and the full identifications list with source URLs. Chain-agnostic (EVM, BTC, Solana). Ideal for: compliance workflows, pre-transaction screening, counterparty risk checks, AML monitoring, audit trails.

Ref `io.b3os/chainalysis-sanctions/check-address@1.0.0` · effect `read` · connection `chainalysis` · MCP tool `chainalysis-sanctions__check-address`

**curl**

```bash
    curl -s https://beta-api.b3os.org/v1/actions/call \
      -H "Authorization: Bearer $B3OS_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
          "ref": "io.b3os/chainalysis-sanctions/check-address@1",
          "input": {"address": "0x1111111111111111111111111111111111111111"},
          "connections": {"chainalysis": "conn_01m5t6cbgdjs1ketgcqwa2sne8"}
        }'
    ```
  **TypeScript**

```ts
    import { B3OS } from "@b3os/sdk";

    const b3os = new B3OS();
    const result = await b3os.actions.call({
      ref: "io.b3os/chainalysis-sanctions/check-address@1",
      input: { address: "0x1111111111111111111111111111111111111111" },
      connections: { chainalysis: "conn_01m5t6cbgdjs1ketgcqwa2sne8" },
    });
    console.log(result.output);
    ```
  **Python**

```python
    from b3os import B3OS

    b3os = B3OS()
    result = b3os.actions.call({
        "ref": "io.b3os/chainalysis-sanctions/check-address@1",
        "input": {"address": "0x1111111111111111111111111111111111111111"},
        "connections": {"chainalysis": "conn_01m5t6cbgdjs1ketgcqwa2sne8"},
    })
    print(result["output"])
    ```
  **MCP**

```json
    {
      "method": "tools/call",
      "params": {
        "name": "chainalysis-sanctions__check-address",
        "arguments": {"address": "0x1111111111111111111111111111111111111111"}
      }
    }
    ```

    Expose the pack as tools with `--packs chainalysis-sanctions` on the local server or `?packs=chainalysis-sanctions` on the remote URL, and the agent calls `chainalysis-sanctions__check-address` with the action's input. The tool uses your newest connection for each key without a `subject`. Without exposing the pack, `actions_call` takes the same input with `ref`.

Output, labeled `fixture`: Screen Address for Sanctions (documented response shape, example values). From the bundle's `fixtures/check-address-sanctioned.json`, not a live call.

```json
{
  "address": "0x1111111111111111111111111111111111111111",
  "isSanctioned": true,
  "identificationsCount": 2,
  "categories": ["sanctions"],
  "identifications": [
    {
      "category": "sanctions",
      "name": "SANCTIONS: OFAC SDN Example Entity 2026-01-01 1111111111111111111111111111111111111111",
      "description": "Example listing description in the documented shape.",
      "url": "https://home.treasury.gov/policy-issues/financial-sanctions/recent-actions"
    },
    {
      "category": "sanctions",
      "name": "SANCTIONS: OFAC SDN Example Alias 2026-01-01 1111111111111111111111111111111111111111",
      "description": "Second listing for the same address.",
      "url": "https://home.treasury.gov/policy-issues/financial-sanctions/recent-actions"
    }
  ]
}
```

When the service answers with an error, the call fails with [`upstream_error`](/errors#upstream_error) and `pack_error.code` is one of:

| `pack_error.code` | Service status | Retryable | Message |
|---|---|---|---|
| `connection_unauthorized` | 401 | no | Chainalysis rejected the API key; check the connection. |
| `forbidden` | 403 | no | Chainalysis rejected the API key; check the connection. |
| `rate_limited` | 429 | yes | Chainalysis rate limit reached for this key; retry shortly. |
| `invalid_request` | 400, 422 | no | Chainalysis rejected the address. |