Verify a proof
Verifies a Groth16 proof off-chain against the proof’s stored verification key. With onchain: true, also calls verifyProof on the proof’s deployed verifier contract (allow-listed chains only). Enforces the proof’s policies: value rules, a nonce signal (kind: "nonce") that must equal the supplied nonce, and a nullifier signal (kind: "nullifier") that can only be accepted once per proof. Attestation circuits also declare kind: "project_ref" (must equal the stored value) and kind: "registry_nonce" (enforced by the on-chain registry). A malformed policy fails closed (policy: "invalid_policy", valid: false). Returns a signed receipt (compact JWS, EdDSA) that you can verify with the keys from the JWKS endpoint. Only the owning project’s secret key can verify its proofs.
Authorizations
Your project secret key: sk_test_... (testnet) or sk_live_... (mainnet). Use it only on your server.
Path Parameters
ZK proof ID from the Warp Platform.
Body
Proof object as produced by snarkjs groth16.fullProve.
Public signals as decimal strings. The count must match the circuit and each value must be below the BN254 scalar field modulus.
Decimal nonce from the create-nonce endpoint. Required when the proof declares a nonce signal; it must equal that public signal. Otherwise optional: it is consumed but reported as unbound, because the proof itself does not commit to it.
^[0-9]{1,78}$Also call verifyProof on the deployed verifier contract.
Response
Verification result
Compact JWS (EdDSA, Ed25519, typ: warp-verify-receipt+jws) over a ZkReceiptClaims payload. Verify the signature with the JWKS endpoint, then check aud, exp, nonce and nonce_bound, and remember jti if you need single-use receipts.