{"openapi":"3.1.0","info":{"title":"ScreenSeal","version":"1.0.0","description":"Sanctions-screening signal for AI agents: check a person or organization against OFAC SDN, OFAC Consolidated Non-SDN, and EU FSF lists. Returns potential matches with confidence scores plus a cryptographic attestation seal.\n\nInformational screening signal only — not a legal determination, compliance certification, clearance, or legal advice.\n\nAccess: machine-payable x402 API at $0.02 USDC per call on Base — no accounts, API keys, or subscriptions required. Unpaid requests receive HTTP 402 with machine-readable payment requirements; pay and retry. Free during launch via the MCP and Apify channels.","contact":{"name":"ScreenSeal (Agent Tollbooth)","url":"https://apify.com/wthall05/screenseal-screen"}},"servers":[{"url":"https://api-1-screening.agent-tollbooth.workers.dev","description":"Production — Base mainnet"}],"paths":{"/screen":{"post":{"summary":"Screen a person or organization against sanctions lists","description":"Screens one name against the sanctions index. Pipeline: rate limit → strict validation (fail-closed, runs BEFORE payment — invalid queries are rejected with 400 and never billed) → x402 payment gate → screening → EIP-712 attestation → response.\n\nTo call: POST your JSON body. If you receive HTTP 402, complete the USDC payment per the requirements object and retry with the payment proof (the 'accepted' object must deep-equal the requirement field-for-field).","operationId":"screenName","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenRequest"}}}},"responses":{"200":{"description":"Screening completed. Includes potential matches, full dataset provenance, the informational-signal disclaimer, and the EIP-712 attestation envelope.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenResponse"}}}},"400":{"description":"Invalid request (fail-closed validation). Error names the rule and never echoes request input. Returned BEFORE the payment gate — invalid queries are never billed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. 0.02 USDC on Base (eip155:8453), 'exact' (EIP-3009) scheme. Verification is free; settlement is onchain. NOTE: the x402 v2 middleware returns the payment requirements in the PAYMENT-REQUIRED response header (base64-encoded PaymentRequired JSON), not in the body — the body is an empty object. Decode the header to get the machine-readable requirements.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded PaymentRequired JSON: {x402Version, error?, resource, accepts[], extensions?}. The 'accepted' object in your payment payload must deep-equal one entry of accepts field-for-field.","schema":{"type":"string","format":"byte"},"example":{"x402Version":2,"resource":{"url":"https://api-1-screening.agent-tollbooth.workers.dev/screen","description":"ScreenSeal — sanctions screening: a name checked against the OFAC SDN and EU FSF lists. Informational signal, not legal advice.","mimeType":"application/json","serviceName":"ScreenSeal"},"accepts":[{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"20000","payTo":"0x14a202ef40c07727b551426b863ecfc21b74a6fe","maxTimeoutSeconds":300,"extra":{"name":"USD Coin","version":"2"}}],"extensions":{"bazaar":"CDP Bazaar discovery metadata (input schema + illustrative example)"}}}},"content":{"application/json":{"schema":{"type":"object","description":"Empty object — the payment requirements travel in the PAYMENT-REQUIRED header.","additionalProperties":false}}}},"413":{"description":"Payload exceeds 4096 bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error (e.g. attestation signing failure).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Sanctions index temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"ScreenRequest":{"type":"object","properties":{"name":{"type":"string","description":"Person or organization name. Required, 2–200 characters, NFC-normalized. Fail-closed validation runs BEFORE the payment gate, so rejected queries are never billed: control/invisible characters and letters outside Latin/Cyrillic/Greek/Arabic/Hebrew/Hangul scripts are rejected with 400.","example":"Jane Doe","minLength":2,"maxLength":200},"entity_type":{"type":"string","description":"Type of entity being screened. Optional; when omitted the attestation binds it as null.","enum":["individual","entity","vessel","aircraft"]},"dob":{"type":"string","description":"Date of birth. Strict YYYY-MM-DD, must be a real calendar date and not in the future.","example":"1970-01-01","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"nationality":{"type":"string","description":"ISO 3166-1 alpha-2 country code. Case-insensitive on input, normalized to uppercase; must be a valid code.","example":"US","pattern":"^[A-Za-z]{2}$"}},"required":["name"],"additionalProperties":false},"ScreenResponse":{"type":"object","properties":{"matches":{"type":"array","description":"Potential matches, up to 5, ordered by confidence. Empty array means no potential matches found.","items":{"$ref":"#/components/schemas/Match"}},"dataset":{"$ref":"#/components/schemas/DatasetInfo"},"disclaimer":{"type":"string","description":"Informational screening signal only — not a legal determination, compliance certification, or clearance. Independently verify any match before acting on it.","example":"Informational screening signal only — not a legal determination, compliance certification, or clearance. Independently verify any match before acting on it."},"timestamp":{"type":"string","format":"date-time","example":"2026-09-30T12:00:00.000Z"},"signature":{"$ref":"#/components/schemas/AttestationEnvelope"}},"required":["matches","dataset","disclaimer","timestamp","signature"]},"Match":{"type":"object","properties":{"list":{"type":"string","description":"Source sanctions list, e.g. ofac-sdn, ofac-consolidated, eu-fsf.","example":"ofac-sdn"},"matched_name":{"type":"string","description":"Name as it appears on the public sanctions list.","example":"…"},"confidence":{"type":"number","description":"Match confidence score. Screening threshold is 0.60.","example":0.87},"record_id":{"type":"string","description":"Stable identifier of the record in the source list.","example":"…"},"name_similarity":{"type":"number","example":0.92},"dob_match":{"type":["boolean","null"],"description":"Date-of-birth comparison. null when not comparable.","example":true},"nationality_match":{"type":["boolean","null"],"description":"Nationality comparison. null when not comparable.","example":null}},"required":["list","matched_name","confidence","record_id","name_similarity","dob_match","nationality_match"]},"DatasetInfo":{"type":"object","properties":{"version":{"type":"string","example":"ofac-sdn-2026-09-29+ofac-cons-2026-09-29+eu-2026-09-29"},"generated_at":{"type":"string","format":"date-time","example":"2026-09-29T16:27:24.340Z"},"engine_version":{"type":"string","example":"1.1.0"},"lists":{"type":"array","items":{"$ref":"#/components/schemas/ListProvenance"}}},"required":["version","generated_at","engine_version","lists"]},"ListProvenance":{"type":"object","description":"Per-list provenance: exactly which source files produced this screening.","properties":{"list":{"type":"string","example":"ofac-sdn"},"version":{"type":"string","example":"2026-09-29"},"count":{"type":"integer","example":15000},"source_url":{"type":"string","example":"https://sanctionssearch.ofac.treas.gov/…"},"sha256":{"type":"string","example":"…"},"downloaded_at":{"type":"string","format":"date-time"}},"required":["list","version","count","source_url","sha256","downloaded_at"]},"AttestationEnvelope":{"type":"object","description":"EIP-712 attestation. Proves this response was produced by ScreenSeal at a given time, untampered. Attests to provenance, not legal truth. The envelope contains only hashes of the query — raw PII never enters the attestation. Verifiers recover the signer address and compare it to the published service address, then recompute the hashes.","properties":{"domain":{"type":"object","properties":{"name":{"type":"string","example":"ScreenSeal"},"version":{"type":"string","example":"1"},"chainId":{"type":"integer","example":8453},"verifyingContract":{"type":"string","description":"Payout address (payTo).","example":"0x14a202ef40c07727b551426b863ecfc21b74a6fe"}},"required":["name","version","chainId","verifyingContract"]},"types":{"type":"object","description":"EIP-712 type definitions. ScreenAttestation: queryHash bytes32, responseHash bytes32, timestamp uint256, listsVersion string, payTo address."},"primaryType":{"type":"string","example":"ScreenAttestation"},"message":{"type":"object","properties":{"queryHash":{"type":"string","description":"keccak256 of the canonical JSON (recursively sorted keys) of the validated query {name, entity_type, dob, nationality}, with absent optionals as null. Binds the attestation to the exact request without revealing it.","example":"0x…"},"responseHash":{"type":"string","description":"keccak256 of the canonicalized response core. Any tampering invalidates the signature.","example":"0x…"},"timestamp":{"type":"string","description":"Unix seconds, decimal string (JSON-safe).","example":"1759212345"},"listsVersion":{"type":"string","example":"ofac-sdn-2026-09-29+ofac-cons-2026-09-29+eu-2026-09-29"},"payTo":{"type":"string","example":"0x14a202ef40c07727b551426b863ecfc21b74a6fe"}},"required":["queryHash","responseHash","timestamp","listsVersion","payTo"]},"signature":{"type":"string","description":"EIP-712 signature over the typed data, produced by the service signing key.","example":"0x…"}},"required":["domain","types","primaryType","message","signature"]},"PaymentRequired":{"type":"object","description":"x402 v2 payment requirements (unpaid requests receive HTTP 402 with this JSON base64-encoded in the PAYMENT-REQUIRED response header). Pay the exact amount in the named asset on the named network via the 'exact' (EIP-3009) scheme, then retry the request carrying a payment payload whose 'accepted' object deep-equals the requirement field-for-field.","properties":{"x402Version":{"type":"integer","example":2},"resource":{"type":"object","properties":{"url":{"type":"string","example":"https://api-1-screening.agent-tollbooth.workers.dev/screen"},"description":{"type":"string"},"mimeType":{"type":"string","example":"application/json"}},"required":["url"]},"accepts":{"type":"array","items":{"$ref":"#/components/schemas/PaymentRequirement"}}},"required":["x402Version","resource","accepts"]},"PaymentRequirement":{"type":"object","properties":{"scheme":{"type":"string","example":"exact"},"network":{"type":"string","description":"CAIP-2 network id.","example":"eip155:8453"},"asset":{"type":"string","description":"ERC-20 asset contract.","example":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"},"amount":{"type":"string","description":"Atomic units of the asset (USDC has 6 decimals: 0.02 USDC = 20000).","example":"20000"},"payTo":{"type":"string","example":"0x14a202ef40c07727b551426b863ecfc21b74a6fe"},"maxTimeoutSeconds":{"type":"integer","example":300},"extra":{"type":"object","description":"Facilitator hints."}},"required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds"]},"Error":{"type":"object","properties":{"error":{"type":"string","example":"invalid_request"},"detail":{"type":"string","description":"Names the violated rule. Never echoes request input (privacy).","example":"name is required and must be a string"}},"required":["error"]}}}}