Receipts & proof
A successful paid call produces three artifacts: a signed receipt, an audit-chain entry, and a downloadable proof bundle the agent's principal can verify offline.
Signed receipts
Receipts are signed via a Signer port. The production signer loads an Ed25519 key from a secret manager (the envmode); ephemeral signers are refused in production without an explicit override. A KMS/HSM-backed signer is a follow-on (AWS KMS does not support Ed25519).
- Ed25519-signed receipts shipped
- Secret-manager Ed25519 signer in production (
envmode) shipped - Signing-key rotation with historical verify shipped
Receipt shape
{
"schemaVersion": "agenttrust.receipt.v1",
"receiptId": "rcp_<placeholder>",
"providerId": "prv_<placeholder>",
"requestSha256": "<sha256>",
"agentDid": "did:web:<placeholder>",
"principalId": "<placeholder>",
"paid": true,
"facilitator": "sandbox",
"signature": "<ed25519>",
"signingKeyId": "gw-ed25519-<id>"
}Proof bundles
A proof bundle is a downloadable artifact that contains the receipt, the per-provider audit-log hash-chain proof, and the verifier's manifest. Customers run pnpm proof:verify <bundle>to verify offline.
- Offline proof verifier (
pnpm proof:verify) shipped - Audit-log hash chain, per provider shipped
- Per-receipt hash chain (signed
prevReceiptHash), offline-verifiable shipped - Bundle signature over manifest shipped
$ pnpm proof:verify ./bundle-12af34.zip
{
"schemaVersion": "agenttrust.proof_bundle.v1",
"verdict": "valid",
"receiptCount": 2,
"hashChainContinuous": true,
"signaturesValid": true
}Hash chain
Receipts are Ed25519-signed and offline-verifiable. Each receipt also links to its provider's previous receipt: prevReceiptHashis part of the signed body, so the per-receipt chain is both tamper-evident and signature-protected. Walk it offline against the gateway's published public key via GET /v1/providers/{id}/receipt-chain.
Separately, the audit log is hash-chained per provider: every audit event commits to its predecessor's hash, so tampering breaks the chain. A proof bundle carries the signed receipt and the audit-chain proof. Verification is offline.
Boundaries
- The receipt body is sha256-hashed by default; raw bodies are not retained unless the merchant opts in.
- Public verification depends on the gateway's published Ed25519 public key. Key rotation preserves historical verify.
- Proof bundle is generated on demand; it is not pushed to a registry.