{"name":"VerityLayer","description":"Independent, fail-closed verification for AI agents. Fact-check a claim, screen untrusted text for prompt-injection, or gate an action — allow / review / block. Pay-per-call over x402 (USDC on Base), no accounts.","endpoints":{"verify":{"quick":"POST /verify/quick","grounded":"POST /verify","pro":"POST /verify/pro"},"free":["GET /health","GET /receipt/selftest","POST /receipt/verify"],"free_verdict_no_wallet":{"url":"https://verity-scan.onrender.com/scan","method":"POST","price":"0","wallet_required":false,"signup_required":false,"description":"Free trial verdict — no wallet, no account, no key. Send a whole answer your model produced; it extracts the factual claims and checks each against the live web, same engine as the paid routes. Use this to evaluate quality BEFORE paying.","differs_from_paid":["Takes `text` (a whole answer, up to 4000 chars — longer is truncated, under 20 is rejected), NOT `claim`. POST /verify takes one claim.","Returns a multi-claim report, not a single verdict. Up to 8 claims per call; `truncated: true` means there were more.","Verdicts are UNSIGNED. There is no Ed25519 receipt, so nothing here is provable to a third party later. The paid routes are what you use when you need proof."],"rate_limit":{"per_client_per_hour":6,"global_per_hour":150,"on_exceeded":"429","note":"A shared free tier has a hard global ceiling so no one caller can exhaust it. A 429 here is the limit working, not an outage — the paid routes are unaffected by it."},"input_schema":{"type":"object","properties":{"text":{"type":"string","minLength":20,"maxLength":8000}},"required":["text"]},"output_schema":{"type":"object","properties":{"claims_checked":{"type":"integer"},"hallucinations":{"type":"integer"},"unverified":{"type":"integer"},"verified":{"type":"integer"},"headline":{"type":"string"},"truncated":{"type":"boolean"},"findings":{"type":"array","items":{"type":"object","properties":{"claim":{"type":"string"},"verdict":{"type":"string","enum":["supported","unsupported","uncertain","error"]},"label":{"type":"string","enum":["VERIFIED","UNVERIFIED","HALLUCINATION","ERROR"]},"confidence":{"type":"number"},"reasoning":{"type":"string"},"evidence":{"type":"array","items":{"type":"string"}}}}}}},"then":"For a signed, provable verdict on a single claim: POST https://api.veritylayer.dev/verify"},"free_contradiction_check":{"url":"https://verity-scan.onrender.com/consistency","method":"POST","price":"0","wallet_required":false,"signup_required":false,"description":"Free contradiction check between two pages of the SAME site. Give it two URLs and it reports where they disagree, with the exact sentence from each page and a shell command that reproduces the finding. It does not judge which page is correct — only that both cannot be.","differs_from_paid":["Takes `urls` (exactly 2 on the free tier), not `claim` or `text`. It fetches those pages itself.","Answers a different question from /verify. /verify checks a claim against the world; this checks a site against itself.","Verdicts are UNSIGNED. No Ed25519 receipt, so nothing here is provable to a third party later."],"refuses":["Non-public addresses. Loopback, RFC1918, link-local and cloud metadata (169.254.169.254) are refused, on the original URL and on every redirect hop.","Schemes other than http and https."],"rate_limit":{"per_client_per_hour":3,"on_exceeded":"429","note":"Tighter than the scan trial because one call fetches and analyses two whole pages. Shares the same global hourly ceiling as the scanner."},"input_schema":{"type":"object","properties":{"urls":{"type":"array","items":{"type":"string","format":"uri"},"minItems":2,"maxItems":2},"focus":{"type":"string","description":"optional hint, e.g. 'pricing' or 'rate limits'"}},"required":["urls"]},"output_schema":{"type":"object","properties":{"sources":{"type":"array","description":"every URL with its status, byte count, sha256 and any error. A source that failed is REPORTED, so 'no contradictions' can never mean 'we could not read it'."},"contradictions":{"type":"array","description":"each with both verbatim quotes, both URLs, whether each quote is in rendered text, and a reproduce command where one is possible"},"checked":{"type":"integer","description":"distinct claims compared"},"unsigned":{"type":"boolean","description":"always true on this tier"}}}},"free_x402_payability_check":{"url":"https://verity-scan.onrender.com/payable","method":"POST","price":"0","wallet_required":false,"signup_required":false,"description":"Free x402 conformance check on a paid endpoint. Give it a URL and it reads the 402 the way a spec-current buyer would, then reports whether that buyer could construct a signable payment and exactly what is missing if not. Also diffs the host's /.well-known/x402.json against the live challenge, because a manifest that disagrees with the wire is unpayable for anything that catalogues before it spends. No model is in the path, so every finding ships the curl command that reproduces it.","differs_from_paid":["Takes `url` (one paid endpoint), not `claim`, `text` or `urls`.","Answers a protocol question, not a truth question. The other tools check claims against the world; this checks an endpoint against the x402 spec.","A `payable` verdict describes the shape of the challenge, NOT that a settlement would clear. Nothing is spent to find out, by us or by you.","Verdicts are UNSIGNED. No Ed25519 receipt, so nothing here is provable to a third party later."],"refuses":["Non-public addresses. Loopback, RFC1918, link-local and cloud metadata (169.254.169.254) are refused, on the original URL and on every redirect hop.","Schemes other than http and https."],"rate_limit":{"per_client_per_hour":10,"on_exceeded":"429","note":"Looser than the other free tools because no model runs: one call is two unpaid HTTP requests. The limit is here so this cannot become a scanner aimed at someone else's infrastructure, not to protect a spend budget."},"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","maxLength":2048}},"required":["url"]},"output_schema":{"type":"object","properties":{"verdict":{"type":"string","enum":["payable","v1-only","unreadable","not-gated","unreachable","refused"]},"challenge_found_in":{"type":"string","enum":["header","body"],"description":"body means a v2-only buyer reads nothing"},"offer":{"type":"object","description":"network, asset, amount, payTo and whether they are signable as given"},"manifest":{"type":"object","description":"whether the published manifest agrees with the live challenge"},"findings":{"type":"array","description":"blocking and advisory, each with why it costs money"},"reproduce":{"type":"string","description":"the curl that shows the same"}}}}},"discovery":{"manifest":"/.well-known/x402.json","openapi":"/openapi.json","llms":"/llms.txt"},"receipts":{"pubkey":"/.well-known/verity-pubkey.json","did":"/.well-known/did.json","verify":"POST /receipt/verify","selftest":"GET /receipt/selftest"},"site":"https://veritylayer.dev"}