{"openapi":"3.1.0","info":{"title":"OnChainDiligence x402 HTTP API","version":"1.0.0","description":"Paid compliance checks for autonomous agents, settled over x402 (USDC on Base) and returned inside an Ed25519 attestation envelope anyone can verify independently.\n\nThis document describes the standard HTTP x402 resources only. The separate Model Context Protocol server at POST /mcp exposes the same checks over JSON-RPC with its own payment transport and its own discovery via `tools/list`; it is deliberately not described here.\n\nPayment is non-custodial: a facilitator verifies and settles the payment to the recipient address before a paid handler runs. OnChainDiligence never holds funds.","contact":{"name":"OnChainDiligence","url":"https://onchaindiligence.com"},"license":{"name":"See https://onchaindiligence.com/terms"}},"servers":[{"url":"https://mcp.onchaindiligence.com"}],"paths":{"/x402/screen/{address}":{"get":{"operationId":"screenWallet","summary":"Sanctions-screen an EVM wallet address","description":"Sanctions-screen an EVM wallet address against the Chainalysis on-chain oracle (OFAC, EU, UN designated addresses). Returns a clear sanctioned / not-sanctioned result. For AML compliance, counterparty due diligence, and payment screening before sending funds.\n\nPAID RESOURCE. This endpoint requires payment over x402 (version 2). An unpaid request returns HTTP 402 with the payment requirements in the `Payment-Required` response header (base64 JSON containing `accepts`). Pay the quoted amount, then repeat the request with the resulting `X-PAYMENT` header. Price: $0.01 USDC on eip155:8453. Input is validated before any payment challenge is issued, so a malformed request returns 400 and is never charged.","parameters":[{"name":"address","in":"path","required":true,"description":"EVM wallet address (0x + 40 hex characters).","schema":{"type":"string"},"example":"0x0000000000000000000000000000000000000000"}],"responses":{"200":{"description":"Paid, verified result wrapped in a signed attestation envelope.","content":{"application/json":{"schema":{"type":"object","required":["data","attestation"],"properties":{"data":{"type":"object","description":"The check result. Shape varies per resource."},"attestation":{"type":"object","description":"Ed25519 attestation over the exact result, verifiable at https://onchaindiligence.com/verify against the published key registry. A valid signature proves the result came from OnChainDiligence unaltered; it does not make the underlying claim objectively true.","properties":{"signed":{"type":"boolean"},"key_id":{"type":"string"},"algorithm":{"type":"string","examples":["ed25519"]},"signature":{"type":"string"}}}}}}}},"400":{"description":"Invalid input. Returned before any payment challenge — the caller is not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required. The `Payment-Required` response header carries base64-encoded JSON with `x402Version`, `resource`, and an `accepts` array of payment requirements.","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements.","schema":{"type":"string"}}}},"404":{"description":"The requested record was not found at the upstream source."},"502":{"description":"An upstream data source was unavailable."},"503":{"description":"Signing readiness unavailable. No payment is requested; retry later."}},"x-onchaindiligence-x402":{"protocol":"x402","x402Version":2,"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","priceUsd":0.01,"payTo":"0x63c347d7e42b940e79AfEC3D172bFc2921b6c897"}}},"/x402/screen-name":{"get":{"operationId":"screenName","summary":"Screen a person or company name against the OFAC SDN list","description":"Screen a person or company NAME against the official US Treasury OFAC Specially Designated Nationals (SDN) list, matching primary names and strong aliases and returning scored candidate matches with the matched name, SDN type, and programme. A match is a candidate to investigate against secondary identifiers (date of birth, nationality, ID number), not a determination. Weak aliases are not screened, per OFAC guidance. This screens names, not wallet addresses.\n\nPAID RESOURCE. This endpoint requires payment over x402 (version 2). An unpaid request returns HTTP 402 with the payment requirements in the `Payment-Required` response header (base64 JSON containing `accepts`). Pay the quoted amount, then repeat the request with the resulting `X-PAYMENT` header. Price: $0.02 USDC on eip155:8453. Input is validated before any payment challenge is issued, so a malformed request returns 400 and is never charged.","parameters":[{"name":"name","in":"query","required":true,"description":"Person or company name to screen (2–255 characters).","schema":{"type":"string"},"example":"Example Name"},{"name":"threshold","in":"query","required":false,"description":"Optional match confidence cutoff between 0.5 and 1 (default 0.85). Lower returns more candidates and more false positives.","schema":{"type":"number","minimum":0.5,"maximum":1,"default":0.85}}],"responses":{"200":{"description":"Paid, verified result wrapped in a signed attestation envelope.","content":{"application/json":{"schema":{"type":"object","required":["data","attestation"],"properties":{"data":{"type":"object","description":"The check result. Shape varies per resource."},"attestation":{"type":"object","description":"Ed25519 attestation over the exact result, verifiable at https://onchaindiligence.com/verify against the published key registry. A valid signature proves the result came from OnChainDiligence unaltered; it does not make the underlying claim objectively true.","properties":{"signed":{"type":"boolean"},"key_id":{"type":"string"},"algorithm":{"type":"string","examples":["ed25519"]},"signature":{"type":"string"}}}}}}}},"400":{"description":"Invalid input. Returned before any payment challenge — the caller is not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required. The `Payment-Required` response header carries base64-encoded JSON with `x402Version`, `resource`, and an `accepts` array of payment requirements.","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements.","schema":{"type":"string"}}}},"404":{"description":"The requested record was not found at the upstream source."},"502":{"description":"An upstream data source was unavailable."},"503":{"description":"Signing readiness unavailable. No payment is requested; retry later."}},"x-onchaindiligence-x402":{"protocol":"x402","x402Version":2,"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","priceUsd":0.02,"payTo":"0x63c347d7e42b940e79AfEC3D172bFc2921b6c897"}}},"/x402/uk-company/{companyNumber}":{"get":{"operationId":"verifyUkCompany","summary":"Verify a UK company via Companies House","description":"Verify a UK company against the official Companies House register. Given a UK registration number, returns legal status (active / dissolved), company type, incorporation date, registered office address, and the people with significant control (PSC / beneficial owners). For KYB onboarding and supplier or counterparty due diligence on UK entities. Covers UK registered companies only.\n\nPAID RESOURCE. This endpoint requires payment over x402 (version 2). An unpaid request returns HTTP 402 with the payment requirements in the `Payment-Required` response header (base64 JSON containing `accepts`). Pay the quoted amount, then repeat the request with the resulting `X-PAYMENT` header. Price: $0.05 USDC on eip155:8453. Input is validated before any payment challenge is issued, so a malformed request returns 400 and is never charged.","parameters":[{"name":"companyNumber","in":"path","required":true,"description":"UK Companies House registration number.","schema":{"type":"string"},"example":"00000006"}],"responses":{"200":{"description":"Paid, verified result wrapped in a signed attestation envelope.","content":{"application/json":{"schema":{"type":"object","required":["data","attestation"],"properties":{"data":{"type":"object","description":"The check result. Shape varies per resource."},"attestation":{"type":"object","description":"Ed25519 attestation over the exact result, verifiable at https://onchaindiligence.com/verify against the published key registry. A valid signature proves the result came from OnChainDiligence unaltered; it does not make the underlying claim objectively true.","properties":{"signed":{"type":"boolean"},"key_id":{"type":"string"},"algorithm":{"type":"string","examples":["ed25519"]},"signature":{"type":"string"}}}}}}}},"400":{"description":"Invalid input. Returned before any payment challenge — the caller is not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required. The `Payment-Required` response header carries base64-encoded JSON with `x402Version`, `resource`, and an `accepts` array of payment requirements.","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements.","schema":{"type":"string"}}}},"404":{"description":"The requested record was not found at the upstream source."},"502":{"description":"An upstream data source was unavailable."},"503":{"description":"Signing readiness unavailable. No payment is requested; retry later."}},"x-onchaindiligence-x402":{"protocol":"x402","x402Version":2,"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","priceUsd":0.05,"payTo":"0x63c347d7e42b940e79AfEC3D172bFc2921b6c897"}}},"/x402/us-company":{"get":{"operationId":"verifyUsCompany","summary":"Verify a US public company via SEC EDGAR","description":"Verify a US public company against SEC EDGAR. Look up an SEC-registered issuer by ticker, CIK, or name and get its legal entity name, industry (SIC), state of incorporation, tickers/exchanges, and latest filing. For ambiguous names, returns candidates without selecting a company. For KYB, counterparty due diligence, and issuer verification.\n\nPAID RESOURCE. This endpoint requires payment over x402 (version 2). An unpaid request returns HTTP 402 with the payment requirements in the `Payment-Required` response header (base64 JSON containing `accepts`). Pay the quoted amount, then repeat the request with the resulting `X-PAYMENT` header. Price: $0.05 USDC on eip155:8453. Input is validated before any payment challenge is issued, so a malformed request returns 400 and is never charged.","parameters":[{"name":"q","in":"query","required":true,"description":"Ticker, SEC CIK, or company name.","schema":{"type":"string"},"example":"AAPL"}],"responses":{"200":{"description":"Paid, verified result wrapped in a signed attestation envelope.","content":{"application/json":{"schema":{"type":"object","required":["data","attestation"],"properties":{"data":{"type":"object","description":"The check result. Shape varies per resource."},"attestation":{"type":"object","description":"Ed25519 attestation over the exact result, verifiable at https://onchaindiligence.com/verify against the published key registry. A valid signature proves the result came from OnChainDiligence unaltered; it does not make the underlying claim objectively true.","properties":{"signed":{"type":"boolean"},"key_id":{"type":"string"},"algorithm":{"type":"string","examples":["ed25519"]},"signature":{"type":"string"}}}}}}}},"400":{"description":"Invalid input. Returned before any payment challenge — the caller is not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required. The `Payment-Required` response header carries base64-encoded JSON with `x402Version`, `resource`, and an `accepts` array of payment requirements.","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements.","schema":{"type":"string"}}}},"404":{"description":"The requested record was not found at the upstream source."},"502":{"description":"An upstream data source was unavailable."},"503":{"description":"Signing readiness unavailable. No payment is requested; retry later."}},"x-onchaindiligence-x402":{"protocol":"x402","x402Version":2,"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","priceUsd":0.05,"payTo":"0x63c347d7e42b940e79AfEC3D172bFc2921b6c897"}}},"/x402/diligence":{"get":{"operationId":"diligence","summary":"Combined wallet sanctions screen and UK company verification","description":"Combined counterparty due diligence in one paid call: sanctions-screens an EVM wallet against the Chainalysis on-chain oracle AND verifies a UK company against Companies House (status, type, PSC / beneficial owners), returning both independent results in one signed response. Two separate checks against separate sources — a result does NOT establish the wallet belongs to that company. For vetting a counterparty presenting both a wallet and a UK company number.\n\nPAID RESOURCE. This endpoint requires payment over x402 (version 2). An unpaid request returns HTTP 402 with the payment requirements in the `Payment-Required` response header (base64 JSON containing `accepts`). Pay the quoted amount, then repeat the request with the resulting `X-PAYMENT` header. Price: $0.05 USDC on eip155:8453. Input is validated before any payment challenge is issued, so a malformed request returns 400 and is never charged.","parameters":[{"name":"wallet","in":"query","required":true,"description":"EVM wallet address to sanctions-screen.","schema":{"type":"string"},"example":"0x0000000000000000000000000000000000000000"},{"name":"company","in":"query","required":true,"description":"UK Companies House registration number to verify.","schema":{"type":"string"},"example":"00000006"}],"responses":{"200":{"description":"Paid, verified result wrapped in a signed attestation envelope.","content":{"application/json":{"schema":{"type":"object","required":["data","attestation"],"properties":{"data":{"type":"object","description":"The check result. Shape varies per resource."},"attestation":{"type":"object","description":"Ed25519 attestation over the exact result, verifiable at https://onchaindiligence.com/verify against the published key registry. A valid signature proves the result came from OnChainDiligence unaltered; it does not make the underlying claim objectively true.","properties":{"signed":{"type":"boolean"},"key_id":{"type":"string"},"algorithm":{"type":"string","examples":["ed25519"]},"signature":{"type":"string"}}}}}}}},"400":{"description":"Invalid input. Returned before any payment challenge — the caller is not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required. The `Payment-Required` response header carries base64-encoded JSON with `x402Version`, `resource`, and an `accepts` array of payment requirements.","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements.","schema":{"type":"string"}}}},"404":{"description":"The requested record was not found at the upstream source."},"502":{"description":"An upstream data source was unavailable."},"503":{"description":"Signing readiness unavailable. No payment is requested; retry later."}},"x-onchaindiligence-x402":{"protocol":"x402","x402Version":2,"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","priceUsd":0.05,"payTo":"0x63c347d7e42b940e79AfEC3D172bFc2921b6c897"}}},"/x402/verdict/{address}":{"get":{"operationId":"verdict","summary":"Single PASS / WARN / BLOCK counterparty verdict","description":"Get a single signed counterparty verdict — PASS, WARN, or BLOCK — for an EVM wallet address, with reasons. BLOCK means the address itself is sanctioned; WARN means direct sanctioned-counterparty exposure was found or exposure could not be completely evaluated; PASS means neither was found within the reported bounded scope. For autonomous agents deciding whether to send funds.\n\nPAID RESOURCE. This endpoint requires payment over x402 (version 2). An unpaid request returns HTTP 402 with the payment requirements in the `Payment-Required` response header (base64 JSON containing `accepts`). Pay the quoted amount, then repeat the request with the resulting `X-PAYMENT` header. Price: $0.01 USDC on eip155:8453. Input is validated before any payment challenge is issued, so a malformed request returns 400 and is never charged.","parameters":[{"name":"address","in":"path","required":true,"description":"EVM wallet address or ENS name.","schema":{"type":"string"},"example":"0x0000000000000000000000000000000000000000"}],"responses":{"200":{"description":"Paid, verified result wrapped in a signed attestation envelope.","content":{"application/json":{"schema":{"type":"object","required":["data","attestation"],"properties":{"data":{"type":"object","description":"The check result. Shape varies per resource."},"attestation":{"type":"object","description":"Ed25519 attestation over the exact result, verifiable at https://onchaindiligence.com/verify against the published key registry. A valid signature proves the result came from OnChainDiligence unaltered; it does not make the underlying claim objectively true.","properties":{"signed":{"type":"boolean"},"key_id":{"type":"string"},"algorithm":{"type":"string","examples":["ed25519"]},"signature":{"type":"string"}}}}}}}},"400":{"description":"Invalid input. Returned before any payment challenge — the caller is not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required. The `Payment-Required` response header carries base64-encoded JSON with `x402Version`, `resource`, and an `accepts` array of payment requirements.","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements.","schema":{"type":"string"}}}},"404":{"description":"The requested record was not found at the upstream source."},"502":{"description":"An upstream data source was unavailable."},"503":{"description":"Signing readiness unavailable. No payment is requested; retry later."}},"x-onchaindiligence-x402":{"protocol":"x402","x402Version":2,"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","priceUsd":0.01,"payTo":"0x63c347d7e42b940e79AfEC3D172bFc2921b6c897"}}},"/x402/preflight-payment":{"post":{"operationId":"preflightPayment","summary":"Evaluate a proposed payment against structured policy before execution","description":"Evaluate a proposed payment against a structured, caller-supplied policy and optional recipient sanctions screening, before execution. Returns ALLOW, REQUIRE_APPROVAL, or BLOCK with reasons, plus a signed OCD PREFLIGHT receipt anyone can independently verify. Policy evaluation only: OCD never holds, moves, or authorizes funds. The wallet, PayBox, or x402 client independently authorizes execution afterward; an ALLOW here does not guarantee it will proceed.\n\nPAID RESOURCE. This endpoint requires payment over x402 (version 2). An unpaid request returns HTTP 402 with the payment requirements in the `Payment-Required` response header (base64 JSON containing `accepts`). Pay the quoted amount, then repeat the request with the resulting `X-PAYMENT` header. Price: $0.01 USDC on eip155:8453. Input is validated before any payment challenge is issued, so a malformed request returns 400 and is never charged.","requestBody":{"required":true,"description":"The proposed action, a structured deterministic policy, optional evaluation options, and optional references. Full field-by-field documentation: docs/PAYMENT_PREFLIGHT.md.","content":{"application/json":{"schema":{"type":"object","required":["action","policy"],"properties":{"action":{"type":"object","required":["kind","network","asset","amount","recipient"],"properties":{"kind":{"type":"string","enum":["PAYMENT"]},"resource":{"type":["string","null"]},"network":{"type":"string","description":"CAIP-2, e.g. \"eip155:8453\"."},"asset":{"type":"string","description":"Canonical ERC-20 contract address, not a ticker."},"amount":{"type":"string","description":"Canonical decimal string, e.g. \"1.00\". Never a float."},"sender":{"type":["string","null"]},"recipient":{"type":"string"}}},"policy":{"type":"object","properties":{"max_amount":{"type":["string","null"]},"allowed_networks":{"type":["array","null"],"items":{"type":"string"}},"allowed_assets":{"type":["array","null"],"items":{"type":"string"}},"expected_recipient":{"type":["string","null"]},"allowed_resource_origins":{"type":["array","null"],"items":{"type":"string"}}}},"options":{"type":"object","properties":{"screen_recipient_sanctions":{"type":"boolean"}}},"references":{"type":"object","properties":{"mandate_digest":{"type":["string","null"]}}}}},"example":{"action":{"kind":"PAYMENT","resource":"https://service.example/api","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"1.00","sender":null,"recipient":"0x000000000000000000000000000000000000dEaD"},"policy":{"max_amount":"5.00","allowed_networks":["eip155:8453"],"allowed_assets":["0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"],"expected_recipient":null,"allowed_resource_origins":["https://service.example"]},"options":{"screen_recipient_sanctions":true},"references":{"mandate_digest":null}}}}},"responses":{"200":{"description":"Paid, verified evaluation result including a complete signed receipt envelope.","content":{"application/json":{"schema":{"type":"object","required":["decision","checks","receipt"],"properties":{"decision":{"type":"object","required":["status","authorized","reasons"],"properties":{"status":{"type":"string","enum":["ALLOW","REQUIRE_APPROVAL","BLOCK","UNKNOWN"]},"authorized":{"type":["boolean","null"]},"reasons":{"type":"array","items":{"type":"string"}}}},"checks":{"type":"array"},"receipt":{"type":"object","description":"The complete signed onchaindiligence.public-action-receipt.v1 envelope (schema/receipt/proof). Independently verifiable; see https://onchaindiligence.com/receipt.","required":["schema","receipt","proof"]}}}}}},"400":{"description":"Invalid input. Returned before any payment challenge — the caller is not charged.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}},"402":{"description":"Payment required. The `Payment-Required` response header carries base64-encoded JSON with `x402Version`, `resource`, and an `accepts` array of payment requirements.","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements.","schema":{"type":"string"}}}},"404":{"description":"The requested record was not found at the upstream source."},"502":{"description":"An upstream data source was unavailable."},"503":{"description":"Signing readiness unavailable. No payment is requested; retry later."}},"x-onchaindiligence-x402":{"protocol":"x402","x402Version":2,"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","priceUsd":0.01,"payTo":"0x63c347d7e42b940e79AfEC3D172bFc2921b6c897"}}},"/inspect/payment":{"post":{"operationId":"inspectPayment","summary":"FREE deterministic payment policy inspection (no signing, no receipt)","description":"FREE. Pure deterministic inspection of a proposed payment against structured policy (amount/network/asset/recipient/resource) — no external evidence, no sanctions screening, no cryptographic signing, no receipt. Returns the same ALLOW / REQUIRE_APPROVAL / BLOCK decision semantics as POST /x402/preflight-payment for the deterministic checks alone, so a caller can sanity-check a proposal before deciding whether the paid preflight (adds optional sanctions evidence and a signed, independently-verifiable receipt, $0.01) is worth paying for. This result is NOT cryptographically attested and carries no receipt — receipt is always null.\n\nFREE RESOURCE. No payment, no x402 challenge, no Payment-Required header. Contrast with POST /x402/preflight-payment, which is $0.01 and returns a signed, independently-verifiable receipt.","requestBody":{"required":true,"description":"The proposed action and a structured deterministic policy only — no `options`, no `references`. `options.screen_recipient_sanctions: true` is rejected with 400 (sanctions screening is a paid-tier feature). Full documentation: docs/PAYMENT_PREFLIGHT.md.","content":{"application/json":{"schema":{"type":"object","required":["action","policy"],"properties":{"action":{"type":"object","required":["kind","network","asset","amount","recipient"],"properties":{"kind":{"type":"string","enum":["PAYMENT"]},"resource":{"type":["string","null"]},"network":{"type":"string","description":"CAIP-2, e.g. \"eip155:8453\"."},"asset":{"type":"string","description":"Canonical ERC-20 contract address, not a ticker."},"amount":{"type":"string","description":"Canonical decimal string, e.g. \"1.00\". Never a float."},"sender":{"type":["string","null"]},"recipient":{"type":"string"}}},"policy":{"type":"object","properties":{"max_amount":{"type":["string","null"]},"allowed_networks":{"type":["array","null"],"items":{"type":"string"}},"allowed_assets":{"type":["array","null"],"items":{"type":"string"}},"expected_recipient":{"type":["string","null"]},"allowed_resource_origins":{"type":["array","null"],"items":{"type":"string"}}}}}},"example":{"action":{"kind":"PAYMENT","resource":"https://service.example/api","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"1.00","sender":null,"recipient":"0x000000000000000000000000000000000000dEaD"},"policy":{"max_amount":"5.00","allowed_networks":["eip155:8453"],"allowed_assets":["0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"],"expected_recipient":null,"allowed_resource_origins":["https://service.example"]}}}}},"responses":{"200":{"description":"Free, unsigned deterministic inspection result.","content":{"application/json":{"schema":{"type":"object","required":["decision","checks","evidence","receipt"],"properties":{"decision":{"type":"object","required":["status","authorized","reasons"],"properties":{"status":{"type":"string","enum":["ALLOW","REQUIRE_APPROVAL","BLOCK","UNKNOWN"]},"authorized":{"type":["boolean","null"]},"reasons":{"type":"array","items":{"type":"string"}}}},"checks":{"type":"array"},"evidence":{"type":"object","required":["external_checks_performed"],"properties":{"external_checks_performed":{"type":"boolean","const":false}}},"receipt":{"type":"null","description":"Always null — the free endpoint signs nothing and issues no receipt."}}}}}},"400":{"description":"Invalid input, or options.screen_recipient_sanctions was requested (paid-tier only).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}},"/verify-receipt":{"post":{"operationId":"verifyReceipt","summary":"FREE structured receipt verification (VALID / INVALID / UNVERIFIABLE)","description":"Checks whether a receipt is cryptographically VALID, INVALID, or UNVERIFIABLE, with a reason code. FREE RESOURCE — no payment. Pass exactly one of receipt_id (looked up first; must be public) or envelope (a complete receipt envelope you already hold, verified directly). This is a convenient ONLINE check that trusts this server to have honestly fetched the real signing-key registry — running the same check yourself offline via the published @onchaindiligence/agent-evidence package is a strictly stronger trust position.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"receipt_id":{"type":"string","description":"Exact receipt id, e.g. \"OCD-RCP-EMG6-6KR4-PQSG-MZPQ\". Mutually exclusive with envelope."},"envelope":{"type":"object","description":"A complete receipt envelope ({schema, receipt, proof}) to verify directly. Mutually exclusive with receipt_id."}}},"example":{"receipt_id":"OCD-RCP-EMG6-6KR4-PQSG-MZPQ"}}}},"responses":{"200":{"description":"Structured verification result.","content":{"application/json":{"schema":{"type":"object","required":["state","code","message"],"properties":{"state":{"type":"string","enum":["VALID","INVALID","UNVERIFIABLE"]},"code":{"type":"string"},"message":{"type":"string"},"resolution_error":{"type":"string","enum":["malformed-id","not-found","unavailable"]}}}}}},"400":{"description":"Neither or both of receipt_id/envelope were supplied, or the body was not valid JSON.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}}}}}}}}}}