GET /api/demo/trust-receipts/tr_example/evidence. The signature below verifies via the “Verify it yourself” block. Production receipts come from POST /api/v1/trust-receipts.vendor_bank_account_change
What happened
On April 15, 2026 at 22:14 UTC, the vendor self-service portal received a request to change the deposit account of record for Acme Industrial LLC (vendor VEND-9821). EMILIA flagged four risk signals (new destination, after-hours, no change in 30 days, unusual submitter ASN). Policy required two independent named humans to approve before the change could be applied. With $248,750 in vendor payments scheduled to that account, no payment was released until both approvals were on record.
Two named humans approved. Change applied. Cryptographic record below.
Risk signals fired
EMILIA's Eye layer matched these signals against the policy and required signoff before consume.
The action
Accountable signoff
Policy: two_party_independent_approval. Each approver assumes named, cryptographically bound responsibility for this exact action.
Execution
Timeline
Verify it yourself
This receipt's signature is verifiable offline by anyone — zero EP infrastructure required. Install the package, fetch the evidence packet, run verify:
npm install @emilia-protocol/verify@^1.0.1
import { verifyReceipt } from '@emilia-protocol/verify';
// Public unauthenticated endpoint — only serves the demo receipt:
const { document, public_key } = await fetch(
'https://emiliaprotocol.ai/api/demo/trust-receipts/tr_example/evidence'
).then(r => r.json());
const result = verifyReceipt(document, public_key);
// → { valid: true, checks: { version: true, signature: true, anchor: null } }
//
// The deeply-nested claim.context.change.after_bank_hash and every
// risk_signal are bound by the recursive canonical signature.Demo public key (stable, hardcoded in lib/demo-receipt.js): MCowBQYDK2VwAyEAElZsl_xk08JOnjfQXhZCy7H1us1TrV8l…
Production receipts use operator keys held in EP_OPERATOR_KEYS (env, never in source).
Want a receipt like this for every high-risk action your team takes?