Metadata-Version: 2.4
Name: ofac-sanctions-screening
Version: 0.3.0
Summary: OFAC, sanctions, PEP & KYB screening for Python — screen names, companies & crypto wallets against OFAC SDN, EU, UK, UN + 100+ watchlists, plus 9 KYB identity validators (LEI/GLEIF, US EIN, Australian ABN, LATAM tax-IDs, SWIFT/BIC, India GSTIN & PAN, GTIN/UPC/EAN, UK 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
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
```

## 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 of the 9 validators:
c.verify("lei", "5493001KJTIIGC8Y1R12")
c.verify("latam-taxid", "GODE561231GR8", country="MX")
```

## 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 |
| `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(kind, value, country=…)` | — | dispatcher | any of the 9 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).

## 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)
