Most "Article 12 compliance" claims are bullet points. This is the actual artifact — a Merkle-rooted, Ed25519-signed JSON bundle from a real charter run, with a verifier that runs entirely in your browser. Hand it to your compliance team and let them check the math.
The shipped bundle covers a single charter run: a EU pilot card-on-file checkout agent that fires a charge, a settle, and a refund on the Stripe sandbox rail — bookended by mission.start and mission.complete. Five events. One Merkle root. Six signatures. ~3 KB.
// version 2 of the MnemoPay Article 12 bundle schema
{
"version": 2,
"built_at": "2026-05-17T09:14:34.000Z",
"meta": {
"agent": {
"did": "did:mp:4ef34eb9fa22942827a2e3eeb4db12e9",
"publicKeySpkiDerHex": "302a300506032b65700321...",
"label": "MnemoPay Article 12 Demo Key — NOT a production issuer key"
},
"charter": {
"name": "checkout-bot-eu-pilot",
"budgetMaxUsd": 100.0,
"hash": "sha256:..."
},
"retention": { "months": 6, "legalBasis": "EU AI Act Article 12" }
},
"events": [
{ "kind": "mission.start", "signature": "<ed25519>" },
{ "kind": "payment.hold", "payload": { "rail": "stripe-sandbox", "amountUsd": 24.99 } },
{ "kind": "payment.settle", "parent_id": "<hold uuid>" },
{ "kind": "payment.refund", "payload": { "reason": "customer.dispute.withdrawn" } },
{ "kind": "mission.complete", "payload": { "status": "ok" } }
],
"merkle_root": "deda17d936e7105ba66f9dc1904f779b...",
"signature": {
"alg": "Ed25519",
"over": "canonicalize({meta, merkle_root, built_at})",
"by": "did:mp:4ef34eb9...",
"value": "<base64>"
}
}
You're sizing up August 2026. You need to know whether MnemoPay's Article 12 claim is real or a slide deck. Download the file. Hand it to your auditor. The same bundle that ships in production lands in their inbox — only the trust anchor (issuer key) changes.
Most AI vendors will hand you an SOC 2 PDF and a Trust Center page. This is a different artifact: a single signed object containing every agent action, recomputable to the byte. Add it to your RFP checklist as "vendor produces a Merkle-rooted event bundle verifiable without their cooperation."
The bundle shape is what your charter runs already emit. Pipe the JSON into your own pipeline, your own retention store, your own SIEM. The verifier here is ~10 KB of vanilla JS — copy it, fork it, ship your own.
Save article12-demo.json locally. ~3 KB. It's a plain signed JSON file — no zip, no envelope.
The verifier page is pure HTML + ~10 KB of vanilla JS. WebCrypto does the SHA-256 and Ed25519 work; nothing leaves your browser.
Open verifierDrop the file. Watch six checks light up: parse, version, Merkle root recompute, DID self-cert, per-event signatures, bundle signature. Green = VALID.
A Merkle root + Ed25519 signature prove one thing: whoever held the private key vouches for this exact event stream. Verification is mechanical; trust is a separate question.
For this public demo, the issuer is a known demo key whose private key is published in the generator script. Anyone can produce a forged "VALID" bundle with it — that's intentional. The demo proves the mechanism. Trust in production comes from the customer's own wallet, anchored in their own key-management process (KMS, HSM, or self-managed).
The mapping in production:
Wallet. Public key registered out-of-band (DID document, signed PDF, customer trust page). Verifier checks both math and issuer.did:mp:*. Customer gets bundles signed under that anchor.The bundle is byte-deterministic. The generator script is open. Clone, run, diff. If your re-generated file doesn't match ours, that's a bug we want to know about.
# Build the SDK once
git clone https://github.com/mnemopay/mnemopay-sdk && cd mnemopay-sdk
npm install && npm run build
# Run the deterministic generator
cd ../mnemopay-site
node scripts/generate-article12-demo.mjs
# Compare byte-for-byte against the shipped file
diff proof/article12-demo.json <(curl -s https://mnemopay.com/proof/article12-demo.json)
# → no output means identical
Article 12 bundles are built into the Apache-licensed SDK. Pro tier adds managed retention, signed-by-MnemoPay HSM anchoring, and the bundle export endpoint. Audit-as-a-Service runs the whole chain on your behalf.