{"openapi":"3.1.0","info":{"title":"VerifyProof API","version":"0.2.0","description":"Check a Proof Protocol proof (PP-SPEC-077 v0.8.x Unit of Proof). Every check cites the spec section it enforces. The same checks are available to agents over MCP at https://verifyproof.org/mcp.\n\nAuthor: Craig Ellrod, Nebulonium, Inc. Originator of the Proof Economy.","license":{"name":"Proof Protocol License 1.0","url":"https://verifyproof.org/license"},"contact":{"email":"craig@hackerverse.ai"}},"servers":[{"url":"https://verifyproof.org"}],"paths":{"/api/v1/check":{"post":{"operationId":"checkProof","summary":"Check a proof","tags":["Verify"],"description":"Verify a Unit of Proof: schema, Record ID, issuer and witness signatures, signer trust, Merkle inclusion, commitment opening, consistency, registration and revocation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"record":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"The Unit of Proof JSON record"},"merkle_proof":{"description":"Inclusion path from the commitment to merkle_root, leaf-up. Omit promoted levels.","type":"array","items":{"type":"object","properties":{"side":{"type":"string","enum":["left","right"]},"hash":{"type":"string"}},"required":["side","hash"],"additionalProperties":false}},"commitments":{"description":"All c_i of the run in leaf order; R is recomputed (9.5). Use instead of merkle_proof.","type":"array","items":{"type":"string"}},"reveal":{"description":"Public reveal for this canary (9.4.1); opens the commitment.","type":"object","properties":{"d":{"type":"string","description":"Content digest d_i (hex)"},"color":{"type":"string"},"path":{},"expected_effect":{},"flags":{},"nonce":{"type":"string","description":"nonce_i (hex)"}},"required":["d","color","path","expected_effect","flags","nonce"],"additionalProperties":false},"content_reveal":{"description":"Holder-only content reveal (9.4.2); checks d_i.","type":"object","properties":{"canary_content":{"type":"string"},"content_salt":{"type":"string","description":"hex"},"content_encoding":{"type":"string","enum":["utf8","hex","base64"]}},"required":["canary_content","content_salt"],"additionalProperties":false},"trusted_keys":{"description":"Pinned Ed25519 public keys per role (hex, base64, multibase z..., or PEM).","type":"object","properties":{"issuer":{"type":"array","items":{"type":"string"}},"witness":{"type":"array","items":{"type":"string"}},"holder":{"type":"array","items":{"type":"string"}},"registry":{"type":"array","items":{"type":"string"}},"endorser":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"check_registry":{"description":"Fetch proofregister_uri and the revocation endpoint.","type":"boolean"}},"required":["record"],"additionalProperties":false},"example":{"record":{"spec":"PP-SPEC-077","run_id":"dcp-2026-11-07-0001","technique":"T1190","variant":"mutated","color":"red","path":{"ingress":"edge-gw-01","effect_token":"7f3a9c21e0b4","route":["waf-a"],"effect_point":"db-audit-01","target":{"level":"cut","id":"rule-942100"},"cadence":"full","clutch":null},"claim":null,"attribution_level":"cut","sut":"acme-prod-web","dut":"ExampleWAF 9.2","cut":"rule-942100","dut_fingerprint":"eff51f128ffee7a1ab6bcde2e7976fe41dd6620fbaab390f409e48c473020083","cut_fingerprint":"26347b197b5bdd3752d4924302749047da4525b24a23e70533b2e8b9bf09b297","fingerprint_status":"current","effect_point":"db-audit-01","outcome":"stopped","detected":true,"commitment":"1907c1a1c5da41a5269591743bf5e7ae17f0fd8c58a590f3ea69acde409244da","merkle_root":"04bc0137ee2dbcc6a424ce21b0cae043ecbeb0a5b14f56f7d1e67118f9813d11","time_anchor_commit":"drand:quicknet:12345678","ingress_record":"7811cf6b0989edab7d8307fb525258576ed44f9ce2779c60c5bc7011f4187926","witness_record":"f56e216bc2bd426a1d3d62e83aa1bd16e2f1316b5e863a5d61d7d73bbba6f451","witness_operator":"Independent Witness LLC","witness_coverage_map":"61ef3d97481ccbcfd6afd3004802a275a9b8cf0a283aafa6f25c618d5c445cc4","holder":{"id":"acme-ciso","public_key":"6846a9a1d00ba997bfd511b1706a47c1aedbe5f1882c8ced53de4bfbc336755e"},"disclosure":"public","valid_through":null,"disclosed_interests":[],"proofregister_uri":"https://proofregister.com/record/PR-2026-00001","registry_receipt":"15f327357bdd6965dc8458d5b7db5cda044e839f7bcc01cdb124a3d733cac241","uop_id":"3b7140ba23aa11eab64fae158b4dfd7e62b7e754cc597604aa3d702354917416","signatures":[{"role":"issuer","key":"b7cbb79d6755f5add8947797f9c22d026cda727d86e430782cc255f97179f67e","sig":"39ce0cf0765eed72aadb9de8f42a43423d2d5d8a1cb97bfa82da67e966cb660ed013c1796399f7071becf713accf33035f4366fdf8e38fe02b8167d1460a0c09"},{"role":"witness","key":"5e475dc32d6e2f6bdb3948ba6c4c0989f19a302eb82ffa6a64e559d0ed1c8447","sig":"cf4ab74be5837c9e85a77b6f09f204b7b1bdb2db9b86a2bdb731cb867ff36704dff156c93a918219eb429ed901c457b73df8618b165433d816f27100a07d150b"}]}}}}},"responses":{"200":{"description":"Verification report. HTTP 200 whatever the verdict; read `verdict`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/check-uri":{"post":{"operationId":"checkProofByUri","summary":"Fetch a proof from a Registry and check it","tags":["Verify"],"description":"Fetch the record at `uri` (e.g. proofregister.com) and check it, including the registry lookup.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"uri":{"type":"string","format":"uri","description":"Registry URI of the record"},"merkle_proof":{"description":"Inclusion path from the commitment to merkle_root, leaf-up. Omit promoted levels.","type":"array","items":{"type":"object","properties":{"side":{"type":"string","enum":["left","right"]},"hash":{"type":"string"}},"required":["side","hash"],"additionalProperties":false}},"commitments":{"description":"All c_i of the run in leaf order; R is recomputed (9.5). Use instead of merkle_proof.","type":"array","items":{"type":"string"}},"reveal":{"description":"Public reveal for this canary (9.4.1); opens the commitment.","type":"object","properties":{"d":{"type":"string","description":"Content digest d_i (hex)"},"color":{"type":"string"},"path":{},"expected_effect":{},"flags":{},"nonce":{"type":"string","description":"nonce_i (hex)"}},"required":["d","color","path","expected_effect","flags","nonce"],"additionalProperties":false},"content_reveal":{"description":"Holder-only content reveal (9.4.2); checks d_i.","type":"object","properties":{"canary_content":{"type":"string"},"content_salt":{"type":"string","description":"hex"},"content_encoding":{"type":"string","enum":["utf8","hex","base64"]}},"required":["canary_content","content_salt"],"additionalProperties":false},"trusted_keys":{"description":"Pinned Ed25519 public keys per role (hex, base64, multibase z..., or PEM).","type":"object","properties":{"issuer":{"type":"array","items":{"type":"string"}},"witness":{"type":"array","items":{"type":"string"}},"holder":{"type":"array","items":{"type":"string"}},"registry":{"type":"array","items":{"type":"string"}},"endorser":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"check_registry":{"description":"Fetch proofregister_uri and the revocation endpoint.","type":"boolean"}},"required":["uri"],"additionalProperties":false},"example":{"uri":"https://proofregister.com/record/PR-2026-00001"}}}},"responses":{"200":{"description":"Verification report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Registry unreachable or returned non-JSON"}}}},"/api/v1/record-id":{"post":{"operationId":"computeRecordId","summary":"Compute a Record ID","tags":["Tools"],"description":"SHA-256(\"DCP-1:record\" || RFC 8785 canonical form), registration fields and uop_id removed (SPEC 21.1).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"record":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"The Unit of Proof JSON record"}},"required":["record"],"additionalProperties":false}}}},"responses":{"200":{"description":"Record ID","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordId"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/merkle/verify":{"post":{"operationId":"verifyMerkleInclusion","summary":"Verify Merkle inclusion","tags":["Tools"],"description":"Check that commitment c_i is in root R (SPEC 9.2: leaf 0x43, node 0x45, odd node promoted). Give an inclusion path or the full commitment list.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"commitment":{"type":"string"},"merkle_root":{"type":"string"},"merkle_proof":{"type":"array","items":{"type":"object","properties":{"side":{"type":"string","enum":["left","right"]},"hash":{"type":"string"}},"required":["side","hash"],"additionalProperties":false}},"commitments":{"type":"array","items":{"type":"string"}}},"required":["commitment","merkle_root"],"additionalProperties":false}}}},"responses":{"200":{"description":"Inclusion result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerkleResult"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/schemas/uop":{"get":{"operationId":"getUopSchema","summary":"PP-SPEC-077 Unit of Proof JSON Schema","tags":["Reference"],"security":[],"responses":{"200":{"description":"JSON Schema 2020-12","content":{"application/schema+json":{}}}}}},"/healthz":{"get":{"operationId":"health","summary":"Health","tags":["Reference"],"security":[],"responses":{"200":{"description":"Service is up"}}}}},"components":{"schemas":{"Report":{"type":"object","required":["verdict","summary","record_id","checks","gaps","evidence","verifier"],"properties":{"verdict":{"enum":["valid","invalid","incomplete"],"description":"valid: every check passed. invalid: a check failed. incomplete: nothing failed, but a required check could not run; not proof until closed."},"summary":{"type":"string"},"record_id":{"type":["string","null"]},"checks":{"type":"array","items":{"$ref":"#/components/schemas/Check"}},"gaps":{"type":"array","items":{"type":"string"},"description":"Required checks that could not run, and why"},"evidence":{"type":"object","description":"What the proof claims: technique, outcome, attribution, signer roles. Facts, not a score."},"verifier":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"spec":{"type":"string"}}}}},"Check":{"type":"object","required":["id","ref","status","detail"],"properties":{"id":{"type":"string","example":"record_id"},"ref":{"type":"string","description":"PP-SPEC-077 section","example":"21.1.1"},"status":{"enum":["pass","fail","warn","skip"]},"detail":{"type":"string"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"issues":{"type":"array","items":{"type":"object"}}}},"RecordId":{"type":"object","properties":{"record_id":{"type":"string"},"matches_uop_id":{"type":"boolean"}}},"MerkleResult":{"type":"object","properties":{"included":{"type":"boolean"},"computed_root":{"type":"string"}}}}}}