---
title: "OFAC SDN screening attestation (API key — free tier included)"
method: GET
path: "/api/screen/ofac"
tags: ["Screening"]
---

# OFAC SDN screening attestation (API key — free tier included)

`GET /api/screen/ofac`

## Request

- Base URL: `https://www.xrplhub.io`
- URL: `https://www.xrplhub.io/api/screen/ofac`
- Auth: none declared

Compare one XRPL address against a vintage-pinned OFAC SDN snapshot (exact address-string match only) and get a factual, Merkle-anchored receipt: which list, its published version, the file SHA-256, and whether the address appeared on it. A 'no match' means the address was not on that list version — NOT that it is clean or unsanctioned. This attests to PROCESS, not ground truth: it does not say any address or person is sanctioned or risky, gives no legal or compliance advice, and does not discharge your own screening obligations. Every receipt (match or no-match) is anchored on-ledger daily; verify at GET /api/attest/verify?queryId=. Auth: Authorization: Bearer <API key> (a free key works). Terms: /legal/screening.

## Query parameters

- `address` string, required

## Response `200`

The screening receipt.

- object
  - `attestation` object, required
    - `queryId` string: UUID. GET /api/attest/verify?queryId= for the Merkle inclusion proof once anchored.
    - `canonVersion` 'sanctions-screen-v2'
    - `engineVersion` 'sanction-screen-v2': Immutable per receipt — the exact match algorithm.
    - `leafHash` string: 64-hex SHA-256(0x00 || canonical leaf).
    - `verify` string
  - `subject` string, required
  - `subjectChain` 'xrpl' | 'evm' | 'btc' | 'tron'
  - `screenedAt` string, date-time, required
  - `method` 'exact-match', required
  - `ledgerIndex` integer: Validated XRPL ledger pinned as a time anchor; 0 if unavailable.
  - `lists` object[], required
    - `name` 'OFAC-SDN' | 'EU-FSF' | 'UK-SL'
    - `vintage` string: The list's published version (ISO date) that was screened against.
    - `sha256` string: Hash of the canonical archive of that exact list snapshot — makes the snapshot reproducible.
    - `chainAddressCount` integer: How many addresses this list snapshot names on the subject's chain. 0 is meaningful (e.g. the EU list names no XRP Ledger address).
  - `result` object, required
    - `listed` boolean, required: true = the address string is on at least one of the named list versions. false = it did not appear. false is NOT a statement that the address is clean, safe, or unsanctioned.
    - `matches` object[]
      - `list` string
      - `entryId` string: The list's own entry id (OFAC SDN uid, EU reference, UK Unique ID).
      - `entryName` string: The entry's own listed name (the publisher's fact).
      - `addressField` string: Where the list names the address, e.g. 'Digital Currency Address - XRP', or the free-text element for EU/UK.
  - `statement` string, required: The one factual paragraph: compared X against list L at vintage V (names N addresses on this chain), and did / did not appear.
  - `canonicalLeaf` string: The exact JSON that was leaf-hashed.
  - `retention` string: The retention commitment in force at screening time (see /legal/screening).
  - `disclaimer` string, required

## Other responses

- `401`: Missing or invalid API key.
- `402`: API key term ended (error "key_expired") — buy a new key.
- `503`: No OFAC SDN snapshot ingested yet.

---

[API](https://skmtc.dev/xrplhub/apis/xrplhub-xrplscore-and-prebuilt-xrpl-transactions.md) · [All operations](https://skmtc.dev/xrplhub/apis/xrplhub-xrplscore-and-prebuilt-xrpl-transactions/llms.txt) · [OpenAPI document](https://skmtc.dev/xrplhub/apis/xrplhub-xrplscore-and-prebuilt-xrpl-transactions/revisions/a5d4e13aff32?raw)
