Metadata-Version: 2.4
Name: ofac-sanctions-screening
Version: 0.7.0
Summary: OFAC, sanctions, PEP & KYB screening for Python — screen names, companies & crypto wallets against OFAC SDN, EU, UK, UN + 100+ watchlists; EU VAT (VIES) validation; EU consolidated (FSF) sanctions; OIG-LEIE exclusion + fuzzy SDN matching; GLEIF ownership & name→LEI; SEC EDGAR filings + XBRL company financials; FDA NDC directory + drug-recall enforcement; plus 24 KYB / reference validators (LEI, EIN, ABN, CNPJ, LATAM tax-IDs, BIC, ISIN, UK & EU VAT). Free demo, no key.
Author: GoCreative
License: MIT
Project-URL: Homepage, https://api.gocreativeai.com/p/compliance-screening
Project-URL: Documentation, https://api.gocreativeai.com/v1/docs
Project-URL: Free demo, https://api.gocreativeai.com/demo/sanctions/Vladimir%20Putin
Keywords: ofac,sanctions,sanctions-screening,aml,kyc,kyb,pep,compliance,watchlist,sdn,ofac-api,crypto-compliance,wallet-screening,opensanctions,lei,gleif,ein,abn,tax-id,rfc,cuit,identity-validation,bic,swift,gstin,pan,gtin,upc,ean,uk-vat,vat-validation,aba,routing-number,cnpj,cusip,isin,sedol,duns,cage,eori,gln,imei,issn,phone-validation,e164,securities,oig-leie,healthcare-exclusion,fuzzy-matching,beneficial-ownership,ubo,corporate-ownership,sec-edgar,fda-ndc,entity-resolution,eu-vat,vies,eu-sanctions,fsf,company-financials,xbrl,drug-recall,openfda,financial-data,recall-screening
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Financial and Insurance Industry
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Office/Business :: Financial
Classifier: Topic :: Security
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# ofac-sanctions-screening

**OFAC / sanctions / PEP / KYB screening for Python.** Screen any **person, company, or crypto wallet** against **OFAC SDN, EU, UK (OFSI), UN + 100+ global watchlists** (powered by OpenSanctions) and get a **PASS / WARN / BLOCK** verdict — in one call, with cited sources.

- ✅ **Free demo, no signup** — start screening in 10 seconds, no API key.
- 🪙 **Crypto-wallet OFAC screening** — screen BTC/ETH addresses against the OFAC SDN crypto list (most APIs only do names & companies).
- 🏢 **KYB-360** — sanctions + PEP + entity risk + registry in one call.
- ⚖️ **One PASS / WARN / BLOCK verdict** — no raw-list parsing.
- 🔌 **Zero dependencies**, Python 3.8+. Pay-per-call (card or USDC via x402) — no seat license, no enterprise contract.

## Install

```bash
pip install ofac-sanctions-screening
```

## Quickstart (free, no key)

```python
from ofac_sanctions_screening import Client

c = Client()  # free demo mode, rate-limited

# Sanctions / PEP screen a person or company
print(c.screen("Vladimir Putin"))
# {'result': {'flagged': True, 'match_count': 2, 'risk_topics': ['sanction', 'role.pep', ...], 'matches': [...]}}

# OFAC-screen a crypto wallet against the SDN crypto list
print(c.screen_wallet("1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"))

# KYB screen a company
print(c.kyb("Acme Inc"))
```

## Full access (paid)

Get an API key instantly with a card at **https://api.gocreativeai.com/credits/buy** (or pay-per-call in USDC via [x402](https://api.gocreativeai.com/no-api-key) — no key at all):

```python
c = Client(api_key="gck_...")

c.screen("Some Person")        # full sanctions & PEP coverage
c.screen_wallet("0xabc...")    # full OFAC wallet screen
c.kyb("Some Company Ltd")      # full KYB-360 dossier
c.verdict("Some Person")       # one PASS / WARN / BLOCK decision
c.risk("Some Company")         # entity risk score 0-100 + onboarding flag
```

## Compliance & registry lookups (paid)

Live watchlist + registry lookups that complement the sanctions screen — healthcare
exclusion, fuzzy SDN matching, corporate ownership, name→LEI resolution, SEC filings
and the FDA drug directory:

```python
c = Client(api_key="gck_...")

c.screen_oig_exclusion("John Smith")
# {'is_excluded': True, 'match_count': 3, 'risk': 'HIGH — HHS-OIG LEIE ...', 'matches': [...]}
#   the mandatory pre-billing check for Medicare/Medicaid providers

c.screen_fuzzy_name("Vladimir Putin")
# {'is_potential_match': True, 'top_score': 83, 'matches': [{'name': 'PUTIN, Vladimir ...', ...}]}
#   catches alias / transliteration / reordered-name SDN hits a strict match misses

c.lookup_gleif_entity("Apple Inc")           # company NAME -> LEI(s) (ranked matches)
c.lookup_gleif_ownership("5493006MHB84DD0ZWV18")  # LEI -> corporate-ownership tree (UBO)
c.lookup_sec_filings("AAPL")                 # SEC EDGAR recent-filings feed (free demo too)
c.lookup_fda_ndc("Trulicity")               # FDA National Drug Code directory lookup
```

## KYB identity / tax-ID validation (paid)

Reject malformed business identifiers *before* an expensive registry call — deterministic
check-digit + reference-data validators for onboarding and vendor due diligence:

```python
c = Client(api_key="gck_...")

c.verify_lei("529900T8BM49AURSDO55")
# {'verdict': 'VALID_ACTIVE', 'checksum_valid': True,
#  'entity': {'legal_name': 'Ubisecure Oy', 'legal_jurisdiction': 'FI', 'entity_status': 'ACTIVE', ...},
#  'registration': {'lei_status': 'ISSUED', ...}}   # ← live GLEIF Level-1 record

c.verify_ein("12-3456789")           # {'verdict': 'VALID_FORMAT', 'issuing_campus': 'Andover', ...}
c.verify_abn("51824753556")          # {'verdict': 'VALID', 'abn_formatted': '51 824 753 556', ...}
c.verify_latam_taxid("MX", "GODE561231GR8")
# {'verdict': 'VALID', 'country': 'MX', 'tax_id_scheme': 'RFC (Registro Federal de Contribuyentes)', ...}
# also handles AR CUIT, PE RUC, CO NIT, CL RUT

c.verify_bic("DEUTDEFF")
# {'verdict': 'VALID', 'structure': {'institution_code': 'DEUT', 'country_code': 'DE', ...},
#  'entity': {'legal_name': 'DEUTSCHE BANK AKTIENGESELLSCHAFT', 'lei': '7LTWFZYICNSX8D621K86', ...}}  # ← GLEIF BIC-to-LEI

c.verify_gstin("27AAPFU0939F1ZV")   # India GSTIN — mod-36 checksum + state + embedded PAN
c.verify_pan("AAPFU0939F")          # India PAN — structure + holder type
c.verify_gtin("4006381333931")      # GTIN/UPC/EAN — GS1 mod-10 check digit + region
c.verify_uk_vat("GB434031494")      # UK VAT — HMRC modulus-97 (9755)

# Or use the dispatcher for any validator:
c.verify("lei", "5493001KJTIIGC8Y1R12")
c.verify("latam-taxid", "GODE561231GR8", country="MX")
```

## Reference-data / identifier validators (paid)

Deterministic check-digit + structural validators for finance, trade, securities and
telecom identifiers — same keyless-algorithm pattern, one line each:

```python
c = Client(api_key="gck_...")

# Finance / banking
c.verify_aba("021000021")          # US bank routing / ABA / MICR (Fed mod-10) + district
c.verify_cnpj("11222333000181")    # Brazil CNPJ checksum + Receita Federal company lookup
c.verify_cnpj_alpha("12ABC34501DE35")  # Brazil CNPJ incl. new 2026 alphanumeric format

# Securities
c.verify_isin("US0378331005")      # ISIN (ISO 6166) + security resolve
c.verify_cusip("037833100")        # CUSIP (North-American securities, mod-10)
c.verify_sedol("2046251")          # SEDOL (UK/Ireland, LSE weighted mod-10)

# Trade / supply chain / government
c.verify_duns("150483782")         # D&B D-U-N-S number format
c.verify_cage("1U2A3")             # US CAGE / NATO NCAGE (defense-supplier onboarding)
c.verify_eori("GB123456789000")    # EU/UK EORI (customs / trade compliance)
c.verify_gln("0614141000012")      # GS1 GLN (mod-10) + region

# Telecom / media
c.verify_phone("+14155552671")     # phone number (ITU-T E.164) + country decode
c.verify_imei("490154203237518")   # IMEI (GSMA Luhn) + TAC (manufacturer/model) decode
c.verify_issn("2049-3630")         # ISSN (ISO 3297, mod-11)
c.verify_media_type("application/json")  # IANA media type / MIME (RFC 6838)
```

## Methods

| Method | Free demo | Paid endpoint | Returns |
|---|---|---|---|
| `screen(name)` | ✅ | `/v1/verdict/screen` | sanctions & PEP matches across OFAC/EU/UK/UN + 100+ lists |
| `screen_wallet(address)` | ✅ | `/v1/verdict/wallet` | OFAC SDN crypto-wallet match |
| `kyb(name)` | ✅ | `/v1/verdict/kyb` | KYB-360 dossier |
| `verdict(name)` | — | `/v1/verdict/check` | PASS / WARN / BLOCK |
| `risk(name)` | — | `/v1/risk/entity-score` | risk score 0-100 |
| `screen_oig_exclusion(name)` | — | `/v1/screen/oig-exclusion` | HHS-OIG LEIE healthcare-exclusion screen |
| `screen_fuzzy_name(name)` | — | `/v1/screen/fuzzy-name` | fuzzy OFAC SDN match (alias/transliteration) |
| `lookup_gleif_ownership(lei)` | — | `/v1/lookup/gleif-ownership` | GLEIF corporate-ownership tree (UBO) |
| `lookup_gleif_entity(name)` | — | `/v1/lookup/gleif-entity` | company name → LEI resolver |
| `lookup_sec_filings(ticker_or_cik)` | ✅ | `/v1/lookup/sec-filings` | SEC EDGAR recent-filings feed |
| `lookup_fda_ndc(ndc_or_name)` | — | `/v1/lookup/fda-ndc` | FDA NDC drug-directory lookup |
| `verify_lei(lei)` | — | `/v1/verify/lei` | ISO 17442 checksum + GLEIF legal-entity record |
| `verify_ein(ein)` | — | `/v1/verify/ein` | US EIN format + IRS issuing campus |
| `verify_abn(abn)` | — | `/v1/verify/abn` | Australian ABN (ATO modulus-89) |
| `verify_latam_taxid(country, tax_id)` | — | `/v1/verify/latam-taxid` | MX RFC / AR CUIT / PE RUC / CO NIT / CL RUT |
| `verify_bic(bic)` | — | `/v1/verify/bic` | SWIFT/BIC (ISO 9362) + GLEIF legal entity |
| `verify_gstin(gstin)` | — | `/v1/verify/gstin` | India GSTIN (mod-36) + state / embedded PAN |
| `verify_pan(pan)` | — | `/v1/verify/pan` | India PAN structure + holder type |
| `verify_gtin(gtin)` | — | `/v1/verify/gtin` | GTIN/UPC/EAN (GS1 mod-10) + region |
| `verify_uk_vat(vat)` | — | `/v1/verify/uk-vat` | UK VAT (HMRC modulus-97) |
| `verify_aba(routing_number)` | — | `/v1/verify/aba` | US bank routing / ABA / MICR (Fed mod-10) + district |
| `verify_cnpj(cnpj)` | — | `/v1/verify/cnpj` | Brazil CNPJ checksum + Receita Federal lookup |
| `verify_cnpj_alpha(cnpj)` | — | `/v1/verify/cnpj-alpha` | Brazil CNPJ incl. 2026 alphanumeric format |
| `verify_isin(isin)` | — | `/v1/verify/isin` | ISIN (ISO 6166) + security resolve |
| `verify_cusip(cusip)` | — | `/v1/verify/cusip` | CUSIP (North-American securities) |
| `verify_sedol(sedol)` | — | `/v1/verify/sedol` | SEDOL (UK/Ireland securities) |
| `verify_duns(duns)` | — | `/v1/verify/duns` | D&B D-U-N-S number format |
| `verify_cage(code)` | — | `/v1/verify/cage` | US CAGE / NATO NCAGE code |
| `verify_eori(eori)` | — | `/v1/verify/eori` | EU/UK EORI (customs / trade) |
| `verify_gln(gln)` | — | `/v1/verify/gln` | GS1 GLN (mod-10) + region |
| `verify_phone(phone)` | — | `/v1/verify/phone` | phone number (ITU-T E.164) |
| `verify_imei(imei)` | — | `/v1/verify/imei` | IMEI (GSMA Luhn) + TAC decode |
| `verify_issn(issn)` | — | `/v1/verify/issn` | ISSN (ISO 3297, mod-11) |
| `verify_media_type(media_type)` | — | `/v1/verify/media-type` | IANA media type / MIME (RFC 6838) |
| `verify(kind, value, country=…)` | — | dispatcher | any of the 23 validators by kind |

All methods return parsed JSON (`dict`). Errors raise `ComplianceError` with a clear message (402 → how to get a key, 429 → demo quota reached).

## Get a free key (2 minutes)

The `screen`, `screen_wallet`, `kyb`, `screening_report`, `wallet_report` and `batch_screen`
methods work **with no key** (rate-limited demo). To unlock full coverage and all 23
validators, grab a `gck_` key:

1. Go to **https://api.gocreativeai.com/start** — the guided key wizard.
2. Buy credits with a card (instant) at **https://api.gocreativeai.com/credits/buy**, or pay
   per call in USDC via [x402](https://api.gocreativeai.com/no-api-key) with **no key at all**.
3. `Client(api_key="gck_...")` — done.

## Why this vs the incumbents

Same OpenSanctions data the serious vendors use, but **keyless and pay-per-call** — a fraction of the cost of Dataspike, ComplyAdvantage, or enterprise contracts, and it adds **crypto-wallet OFAC screening** most don't. See the comparisons: [vs Dataspike](https://api.gocreativeai.com/vs/dataspike) · [vs sanctions.io](https://api.gocreativeai.com/vs/sanctions-io) · [vs ComplyAdvantage](https://api.gocreativeai.com/vs/complyadvantage).

## Disclaimer

Screening results draw on public watchlist + sanctions data and are provided for compliance-screening support. Verify matches before acting; absence of a match is not a guarantee of clearance. Not legal advice.

## License

MIT © GoCreative · [Product page](https://api.gocreativeai.com/p/compliance-screening) · [Docs](https://api.gocreativeai.com/v1/docs)
