$0.10 — per-source labels + Aegis consensus risk score
x402 Endpoints (USDC pay-per-call)
GET /screen/{chain}/{address}
Per-source labels + Aegis consensus risk score in one call.
GET
$0.10 — per-source labels + Aegis consensus risk score
Tier: $0.10 · Asset: USDC · Network: Base
sdn_match— direct lookup against OFAC SDN, UK OFSI, and EU sanctions lists. If the address is sanctioned, this is populated andrisk.risk_levelis forced to"sanctioned".labels[]— every per-source claim we have for the address across all 44 ingest sources (Tether blacklist, GraphSense tagpacks, exchange Proof-of-Reserves, etc.).risk— the Aegis consensus row (Tier 1+2, no graph traversal, no external providers). Aggregated risk level, score, categories, and source count.
Path parameters
| Name | Type | Description |
|---|---|---|
chain | string | Network slug — see networks. e.g. eth, tron, bsc, polygon, base |
address | string | Address. EVM addresses are lowercased server-side; TRON / BTC / SOL kept as-is (case-sensitive) |
Request
Response — 200
sdn_match populated; risk.risk_level is always
"sanctioned" when this is non-null):
Top level
| Field | Type | Notes |
|---|---|---|
schema_version | int | Currently 1 |
address | string | The address as you sent it (modulo case-normalisation per chain) |
chain | string | Echo of the path param (uppercased — ETH, TRON, …) |
labels[] | array | Per-source label rows. [] if no source has labelled the address |
risk | object | Aegis consensus verdict. See below |
sdn_match | object | null | OFAC / OFSI / EU sanctions hit. null when the address is not sanctioned. When non-null, risk.risk_level is always "sanctioned" |
sdn_match object (when non-null)
| Field | Type | Notes |
|---|---|---|
id | string | Internal SDN address row ID |
address | string | Canonical address as stored in the sanctions list |
asset_type | string | null | E.g. "Digital Currency Address" |
entity_name | string | null | Sanctioned entity name ("TORNADO CASH", "GARANTEX", …) |
programs | string[] | Sanctions programs, e.g. ["CYBER2"] |
sanctions_types | string[] | E.g. ["Block"] |
listing_date | string | null | ISO 8601 date when added to the list |
labels[] rows
| Field | Type | Notes |
|---|---|---|
source | string | Slug — stable identifier of the ingest source (e.g. provider_a-verdicts, ofac-sdn, tether-blacklist) |
source_name | string | Human-readable source name |
label | string | null | The text label this source attached ("Binance.com", "Suspected mixer counterparty", …) |
category | string | null | Source-specific category slug |
confidence | int 0..100 | null | Per-source confidence in this claim |
source_url | string | null | URL where this claim originated, if available |
first_seen_at | ISO 8601 | null | When the source first observed this label |
last_seen_at | ISO 8601 | null | When the source last confirmed this label |
last_seen_at first.
risk object
| Field | Type | Notes |
|---|---|---|
risk_level | enum | null | none / low / medium / high / critical / sanctioned |
risk_score | int 0..100 | null | Consensus risk score |
is_risky | bool | True for medium and above |
risk_categories | string[] | Slugs only — see risk categories |
source_count | int | How many sources contributed to the consensus |
confidence | int 0..100 | null | Confidence-weighted across sources |
primary_source_slug | string | null | Highest-trust source contributing to the verdict |
label | string | null | Best human-readable label across sources |
consensus_found | bool | false → no consensus row exists; all other risk fields are null/0/[] |
labels: [] and
risk.consensus_found: false. Same paid-for-lookup contract: you
paid for the lookup, not for a guarantee of a hit.
Response — 402
See Authentication for the quote schema.When to use this vs other tiers
- Use Check Address ($1.00) when you need 1-hop counterparty inheritance or BFS multi-hop exposure. This tier reads the consensus row only — it doesn’t traverse the transaction graph.
- Use Check Transfer ($0.50) to screen an inbound transaction rather than a single address.

