Sent from Agent / App → Identity / Proof API:
{
"template_id": "age_over_18",
"identity_id": "0xABC...",
"commitment": "0xID_COMMITMENT",
"verifier_id": "bank.pt",
"nonce": "random_32_bytes",
"context": {
"jurisdiction": "PT",
"intended_use": "kyc_onboarding"
},
"signature": "agent_signs_request"
}
The template_id defines what will be proved.
commitment ties the proof to a specific Identity State.
From Proof Engine → Verifier App:
{
"template_id": "age_over_18",
"statement": "user_is_over_18",
"commitment": "0xID_COMMITMENT",
"public_inputs": { "...": "..." },
"proof": "zk_or_gc_proof_blob",
"nonce": "same_as_request",
"issued_at": 1731900000,
"expires_at": 1731903600
}
Verifier uses:
template_idcommitmentpublic_inputsproofto check validity.