Screen wallets, names, and companies with a single call — and get back cryptographic proof the check happened. When an auditor asks, you can show them, to the millisecond.
const od = new OnchainDiligence({ account }) // resolves ENS, pays the 402, returns a signed result const r = await od.screen('vitalik.eth') r.data.sanctioned // false await od.anchor(r.attestation.signature) // → Tempo
Connect a wallet, screen an address or company, and pay the fee on Tempo. You get back the same signed attestation the API returns — settled live, in your browser. This is the premium instant-check tier; programmatic access for agents is priced lower.
Call any check on its own, or run wallet and company together. Each returns a plain answer and a signature you can keep.
Check a wallet address against live US/EU/UN sanctions data before you send funds to it. A clear flag — sanctioned or not — signed and timestamped.
GET /screen/:address
Look up a UK company by number: whether it's active, and who really controls it — the people-with-significant-control behind it.
GET /company/:number
Screen a person or company name against the official US Treasury OFAC sanctions list, with fuzzy matching across aliases. Confidence-scored candidates — a screening aid, not a verdict.
GET /screen-name?name=
Look up an SEC-registered US public company by ticker, CIK, or name — registered entity, industry, state of incorporation, and latest filing, via SEC EDGAR. Public companies only.
GET /us-company?q=
Payment rides on the HTTP 402 standard over MPP. An agent handles the whole exchange on its own; no checkout, no keys to wire.
The agent requests a check. With no payment attached, the server answers with a price.
402 Payment Required
The agent pays the few-cent fee on Tempo and retries with proof of payment attached.
Authorization: Payment …
The server verifies payment, runs the check, and returns the answer with a signature and receipt.
200 OK · attestation
In compliance, a check that can't be proven later barely counts. Every response is signed, so it becomes evidence — not just a JSON blob someone could have typed.
Each result carries an Ed25519 signature over the data and a strict timestamp. It states exactly what was true, exactly when.
The public key is published at a well-known URL. An auditor checks the signature themselves — they never have to call us or trust us. Verify one in your browser →
Change a single field of a stored result and verification fails. The signature only holds for the exact bytes we returned.
// verify a stored attestation — no call back to us import crypto from 'node:crypto' const input = JSON.stringify({ data: envelope.data, issued_at: envelope.attestation.issued_at, key_id: envelope.attestation.key_id, }) const ok = crypto.verify( null, Buffer.from(input), publicKeyPem, // from /.well-known/attestation-key Buffer.from(envelope.attestation.signature, 'base64url'), ) // ok === true → clean at that exact moment, provably
The same signed screening powers a small suite of investigation tools. Trace a wallet's counterparties, keep a watchlist, and turn what you find into evidence someone else can verify.
Paste a wallet and expand outward through its counterparties. Every wallet that enters the graph is screened against the sanctions oracle and flagged in place.
Add addresses to a watchlist. They're re-screened on a schedule, and any change in status — a counterparty designated after you dealt with them — is flagged.
Collect screened wallets into a named investigation with your own notes, then export the whole case as a signed report — PDF, JSON, or CSV — that verifies without us.
A single check is cheap and keyless — pay a few cents, get a signed result. The recurring value is continuous watching: your counterparties re-screened every day, with a signed alert the moment one changes.
Continuous counterparty watching is in early access. Leave an email and I'll onboard you personally — or reach out directly if you'd rather talk first.
Daily re-screening of your counterparties, a signed alert the moment one changes, and an audit-trail export your compliance team can forward upward. Tell me who you're watching and I'll onboard you personally.
Call it as a plain HTTP endpoint paid in pathUSD on Tempo, or plug it into an agent as MCP tools paid in USDC on Base. Same checks, same signed results.
Any language, any agent. Hit the endpoint, handle the 402, get a signed result back.
$ npx mppx https://api.onchaindiligence.com/screen/0x7a3b…
A live remote MCP server: an agent discovers three paid tools — screen_wallet, verify_uk_company, diligence — and pays per call in USDC via x402. No key, no account.
https://mcp.onchaindiligence.com/mcp
Give your agents a compliance check that holds up after the fact.