VerifyProof API

v0.2.0 · checks PP-SPEC-077 v0.8.x Units of Proof · Author: Craig Ellrod, Nebulonium, Inc., originator of the Proof Economy

Send a proof, get a verdict. Every check names the Proof Protocol section it enforces, so anyone can repeat it. People use this API; agents use the same checks over MCP. Both get the same answer.

Quick start

curl -X POST https://verifyproof.org/api/v1/check \
  -H "Content-Type: application/json" \
  -d @proof.json

Where proof.json is {"record": { ...Unit of Proof... }}. The response is HTTP 200 whatever the verdict; read verdict. No key needed. Machine-readable spec: /openapi.json (OpenAPI 3.1).

Verdicts

validEvery check passed, including signer trust, Merkle inclusion, registration and revocation.
invalidAt least one check failed. Not proof.
incompleteNothing failed, but a required check could not run. Not proof until the gaps listed in gaps are closed: send commitments or merkle_proof, trusted_keys, and check_registry: true.

Try it

Paste a request body for /api/v1/check. The sample is a correctly signed demo record; it comes back incomplete because nothing pins its keys or confirms its registration.

Endpoints

POST /api/v1/check

Check a proof. Verify a Unit of Proof: schema, Record ID, issuer and witness signatures, signer trust, Merkle inclusion, commitment opening, consistency, registration and revocation.

FieldMeaning
record requiredThe Unit of Proof JSON record
merkle_proofInclusion path from the commitment to merkle_root, leaf-up. Omit promoted levels.
commitmentsAll c_i of the run in leaf order; R is recomputed (9.5). Use instead of merkle_proof.
revealPublic reveal for this canary (9.4.1); opens the commitment.
content_revealHolder-only content reveal (9.4.2); checks d_i.
trusted_keysPinned Ed25519 public keys per role (hex, base64, multibase z..., or PEM).
check_registryFetch proofregister_uri and the revocation endpoint.
curl -X POST https://verifyproof.org/api/v1/check \
  -H "Content-Type: application/json" \
  -d '{"record":"<Unit of Proof JSON>"}'

POST /api/v1/check-uri

Fetch a proof from a Registry and check it. Fetch the record at `uri` (e.g. proofregister.com) and check it, including the registry lookup.

FieldMeaning
uri requiredRegistry URI of the record
merkle_proofInclusion path from the commitment to merkle_root, leaf-up. Omit promoted levels.
commitmentsAll c_i of the run in leaf order; R is recomputed (9.5). Use instead of merkle_proof.
revealPublic reveal for this canary (9.4.1); opens the commitment.
content_revealHolder-only content reveal (9.4.2); checks d_i.
trusted_keysPinned Ed25519 public keys per role (hex, base64, multibase z..., or PEM).
check_registryFetch proofregister_uri and the revocation endpoint.
curl -X POST https://verifyproof.org/api/v1/check-uri \
  -H "Content-Type: application/json" \
  -d '{"uri":"https://proofregister.com/record/PR-2026-00001"}'

POST /api/v1/record-id

Compute a Record ID. SHA-256("DCP-1:record" || RFC 8785 canonical form), registration fields and uop_id removed (SPEC 21.1).

FieldMeaning
record requiredThe Unit of Proof JSON record
curl -X POST https://verifyproof.org/api/v1/record-id \
  -H "Content-Type: application/json" \
  -d '{...}'

POST /api/v1/merkle/verify

Verify Merkle inclusion. 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.

FieldMeaning
commitment requiredstring
merkle_root requiredstring
merkle_proofarray
commitmentsarray
curl -X POST https://verifyproof.org/api/v1/merkle/verify \
  -H "Content-Type: application/json" \
  -d '{...}'

GET /api/v1/schemas/uop

PP-SPEC-077 Unit of Proof JSON Schema.

curl https://verifyproof.org/api/v1/schemas/uop

GET /healthz

Health.

curl https://verifyproof.org/healthz

Connect over MCP

Agents connect to https://verifyproof.org/mcp (Streamable HTTP). Tools: check_proof, check_proof_by_uri, compute_record_id, verify_merkle_inclusion.

claude mcp add --transport http verifyproof https://verifyproof.org/mcp

Proof Protocol License 1.0. Licensor: Nebulonium, Inc. Security reports: craig@hackerverse.ai.