{"openapi":"3.1.0","info":{"title":"VerityLayer","description":"VerityLayer — the trust layer for AI agents.","contact":{"name":"VerityLayer Labs","email":"veritylayer@gmail.com"},"version":"1.0","x-guidance":"VerityLayer is an independent fact-verification service for AI agents. POST {claim, context?} to /verify/quick ($0.02, fast ungrounded), /verify ($0.25, web-grounded with live citations) or /verify/pro ($0.35, premium synthesis). An unpaid call returns HTTP 402 with an x402 v2 challenge (scheme 'exact', USDC on Base, eip155:8453); pay and retry to receive {verdict, confidence, reasoning, evidence[], receipt}. Verdicts are fail-closed — 'uncertain' rather than a guess — and every paid verdict carries an Ed25519-signed receipt: verify any receipt free at POST /receipt/verify, public key at /.well-known/verity-pubkey.json, live self-test at GET /receipt/selftest. Claims cap at 2000 chars; oversized or blank input returns a free 422 before any charge. Instructions embedded in a claim are judged as data, never obeyed as commands."},"paths":{"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}},"security":[]}},"/.well-known/x402.json":{"get":{"summary":"Well Known","operationId":"well_known__well_known_x402_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/verify/quick":{"post":{"summary":"Verify Quick","operationId":"verify_quick_verify_quick_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResponse"}}}},"402":{"description":"Payment required — x402 v2 challenge. Payment requirements (scheme 'exact', USDC, network + payTo) are returned base64-encoded in the 'payment-required' response header.","content":{"application/json":{"schema":{"type":"object"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-payment-info":{"protocols":[{"x402":{"network":"eip155:8453","asset":"USDC","payTo":"0x89d38023167bdA453BeD9F6CbF22dDd1EC5f70a7"}}],"network":"eip155:8453","asset":"USDC","payTo":"0x89d38023167bdA453BeD9F6CbF22dDd1EC5f70a7","price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/verify":{"post":{"summary":"Verify Grounded","operationId":"verify_grounded_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResponse"}}}},"402":{"description":"Payment required — x402 v2 challenge. Payment requirements (scheme 'exact', USDC, network + payTo) are returned base64-encoded in the 'payment-required' response header.","content":{"application/json":{"schema":{"type":"object"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-payment-info":{"protocols":[{"x402":{"network":"eip155:8453","asset":"USDC","payTo":"0x89d38023167bdA453BeD9F6CbF22dDd1EC5f70a7"}}],"network":"eip155:8453","asset":"USDC","payTo":"0x89d38023167bdA453BeD9F6CbF22dDd1EC5f70a7","price":{"mode":"fixed","currency":"USD","amount":"0.25"}}}},"/verify/pro":{"post":{"summary":"Verify Pro","operationId":"verify_pro_verify_pro_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResponse"}}}},"402":{"description":"Payment required — x402 v2 challenge. Payment requirements (scheme 'exact', USDC, network + payTo) are returned base64-encoded in the 'payment-required' response header.","content":{"application/json":{"schema":{"type":"object"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-payment-info":{"protocols":[{"x402":{"network":"eip155:8453","asset":"USDC","payTo":"0x89d38023167bdA453BeD9F6CbF22dDd1EC5f70a7"}}],"network":"eip155:8453","asset":"USDC","payTo":"0x89d38023167bdA453BeD9F6CbF22dDd1EC5f70a7","price":{"mode":"fixed","currency":"USD","amount":"0.35"}}}},"/.well-known/verity-pubkey.json":{"get":{"summary":"Verity Pubkey","description":"Public Ed25519 key for verifying signed verdict receipts. Stateless: any\nreceipt + this key proves what Verity said, forever, with no lookup.","operationId":"verity_pubkey__well_known_verity_pubkey_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/receipt/verify":{"post":{"summary":"Receipt Verify","description":"Verify a signed verdict receipt (the receipt object itself is the body).\nStateless — checks the Ed25519 signature against this server's public key.\nThe body is read with a hard 64 KB cap so this free endpoint can't be memory-bombed.","operationId":"receipt_verify_receipt_verify_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}},"/receipt/selftest":{"get":{"summary":"Receipt Selftest","description":"Sign and immediately verify a SAMPLE receipt (marked test:true) over a dummy\nclaim — proves the live signing chain end-to-end without a paid call.","operationId":"receipt_selftest_receipt_selftest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[]}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyRequest":{"properties":{"claim":{"type":"string","maxLength":2000,"minLength":1,"title":"Claim"},"context":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Context"}},"type":"object","required":["claim"],"title":"VerifyRequest","description":"Input caps mirror verifier.MAX_INPUT_CHARS exactly, so the text the model judges\nis always the text the receipt signs. Oversized or blank input gets a FREE 422\n(the x402 middleware cancels settlement on any 4xx) instead of a paid non-answer —\nand the signed receipt can never attest text the model didn't see."},"VerifyResponse":{"properties":{"verdict":{"type":"string","enum":["supported","unsupported","uncertain"],"title":"Verdict"},"confidence":{"type":"number","title":"Confidence"},"reasoning":{"type":"string","title":"Reasoning"},"evidence":{"items":{"type":"string"},"type":"array","title":"Evidence"},"receipt":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Receipt"}},"type":"object","required":["verdict","confidence","reasoning","evidence"],"title":"VerifyResponse","description":"A Verdict plus (when signing is configured) a self-contained Ed25519 receipt —\nproof forever that Verity issued exactly this verdict for exactly this claim."}}}}