Verifiable Agent-Call Receipts

x402 moves the money. IronBridge proves the call.

Every agent-payment rail can prove a payment happened. Almost none ties that payment, on-chain and trustlessly, to the exact result the paid call returned — and lets the customer re-verify it in their own browser, trusting no one.

An IronBridge receipt is a small object describing one paid agent call:

{ lane, tool, request, response_sha256, pay_tx, payer, amount, chain }

It is reduced to one 32-byte digest (sorted-key canonical sha256, addresses lowercased). The response itself is never published — only its hash. The digest is sealed keyless into the public LAW-25 chain (hashcash proof-of-work, no wallet, no key), and the epoch root is later attested on Base mainnet via EAS #1603.

Verify one yourself — no IronBridge trust

  1. Recompute sha256(response) → must equal response_sha256.
  2. Recompute the canonical receipt digest.
  3. Recompute leaf = sha256("receipt|" + digest).
  4. Fetch the public chain row by seq → its leaf must equal yours.
  5. Once the epoch root is attested on Base, confirm Merkle inclusion + non-revoked.

If any step fails, reject the receipt. Every green check on a receipt page is one of these steps, run in your browser.

Issue a receipt

POST /api/receipt with the receipt fields + a proof-of-work nonce (GET /api/seal/challenge first). Returns the digest, the seal position, and a /receipt/<digest> URL anyone can re-walk.

No IronBridge key signs a receipt. The only on-chain signature is the operator’s EAS epoch-root attestation, itself publicly auditable. No liveness theater — the “Anchored” rung stays pending until the root is actually on-chain.