{
  "service": "continuity-receipt-verify",
  "implementation": "python-reference",
  "verifier_version": "0.3.3",
  "spec_versions": [
    "continuity-receipt/0.1",
    "continuity-receipt/0.2",
    "continuity-receipt/0.3"
  ],
  "verdicts": [
    "TRUSTED",
    "PROVISIONAL",
    "INSUFFICIENT_EVIDENCE",
    "UNTRUSTED"
  ],
  "endpoints": {
    "POST /verify": "bundle -> verdict (?require_anchor=1, ?receipt=1, ?cache=1; {\"bundles\": [...]} batch)",
    "POST /verify-receipt": "verification receipt -> validity (+ optional bundle digest check, optional revocations)",
    "POST /verify-anchor": "OpenTimestamps detached proof + digest + header(s) -> proof status",
    "POST /anchors": "store an OTS proof for a digest (keyed)",
    "POST /conformance": "grade a verifier submission over the pinned corpus -> signed conformance report",
    "GET /anchors/<digest>": "fetch a stored anchor proof (keyless)",
    "GET /revocations/<issuer>": "stored revocation document for an issuer (keyless)",
    "POST /mcp": "MCP surface: verify_bundle / verify_anchor / get_revocations",
    "GET /openapi.json": "OpenAPI 3.1 contract",
    "GET /info": "this document",
    "GET /health": "liveness"
  },
  "verification_receipt": {
    "kind": "continuity-receipt-verification",
    "version": 1,
    "requested_with": "?receipt=1 on POST /verify, or receipt: true on MCP verify_bundle",
    "digest_rule": "sha256 of the JCS-canonical bytes of the verified bundle object",
    "records": [
      "verdict",
      "error_codes",
      "errors",
      "provisional_reasons",
      "insufficient_reasons",
      "summary"
    ],
    "consistency": "error_codes equals the codes in errors; verdict equals the class implied by the errors/reasons",
    "verify_offline": "signature over JCS canonical bytes minus sig; verify with any continuity-receipt implementation (>= 0.3.3)",
    "docs": "https://github.com/lbailey94/continuity-receipt/blob/main/VERIFICATION_RECEIPTS.md",
    "kit": "https://github.com/lbailey94/continuity-receipt/blob/main/VERIFY_IN_5_MIN.md",
    "issuer": "did:key:z6MkmKSaKjTr2DPJEHG6aZVGmX6JkWsWiYtuD9c73ReRGdfW"
  },
  "conformance": {
    "endpoint": "POST /conformance",
    "kind": "continuity-receipt-conformance",
    "version": 1,
    "verdicts": [
      "CONFORMANT",
      "PARTIAL",
      "NONCONFORMANT"
    ],
    "submission": "implementation metadata + verifier outputs over the pinned corpus; build one with tools/conformance_submit.py",
    "corpus": {
      "bundles": {
        "vectors": 26,
        "manifest_digest": "sha256:9d6f726252ab84e83b51b7d296d41ef14150be883aafbb6588775d9da8e09914"
      },
      "verification_receipts": {
        "vectors": 20,
        "manifest_digest": "sha256:d7232b289a801c46ef711f3f9c8e30a1b974721b7f799f868499e3d200d31479"
      }
    }
  },
  "limits": {
    "max_body_bytes": 1048576,
    "max_batch": 50,
    "digest_cache": {
      "opt_in": "?cache=1 (single-bundle requests)",
      "ttl_s": 900,
      "max_entries": 256,
      "stores": "digest + verdict payload in memory only; never on disk"
    }
  },
  "privacy": "verification is stateless; bundles are never logged; storage exists only for revocation documents, hosted anchors, and the signing key; ?cache=1 opts into an in-memory digest->verdict cache and nothing is retained without it"
}