notary.forgemesh.io · Base mainnet · eip155:8453

Every AI output can carry a receipt.

x402 Notary issues signed, chain-anchored attestations for model inferences. $0.001 to notarize, paid by the calling agent in USDC — no account, no API key. Free for anyone to verify, forever.

receipts issued
last 24 hours
batches anchored on Base
CERTIFICATE OF NOTARIZATION
Nº att_b489a43065c0d5a86b1f6e97 · SPECIMEN
Model
claude-fable-5
Prompt
What is the capital of France?
Response
Paris.
Ran at
2026-07-03T05:45:00Z (claimed)
Notarized
2026-07-03T05:41:12.927Z UTC
sha256
3dfaa4f77cd7e6c06df99986a7832051d84997f86daf99b0d8d6a2d9476c1591
ed25519
vndk0FSaPX5YOD0T6eLINz99K73nVom+rxGEkbdXZg4QFRQKQ8qAcnz5Z9QAPaMpmnANrTJBtMM1RUQ7zfkWBA==
Anchor
checking…
The notary never stored this prompt or response — this page supplies them, the API recomputes the hash. Change one character and watch it fail.

How a receipt is made

Hash. Sign. Seal. Anchor.

Four steps, each one checkable without trusting us. The order matters — that's why they're numbered.

01 · HASH

Canonical digest

Your prompt, response, model id, and timestamp are canonicalized and hashed. The raw text is discarded immediately.

sha256(canonical_json(record))
02 · SIGN

Ed25519 attestation

The notary signs the hash and timestamps with its published key. Verifiable offline, by anyone, forever.

GET /api/pubkey
03 · SEAL

Merkle batch

Receipts batch into a Merkle tree every 10 minutes. Yours gets an inclusion proof against the batch root.

proof → merkle_root
04 · ANCHOR

Base calldata

Batch roots are written to Base as calldata — public, timestamped, immutable. The chain is the witness, not us.

0xe9c2ff37…e508cfe58e

Privacy, by construction

“We notarize the hash, not your secrets.”
Nothing to leakPrompts, responses, and metadata are hashed, signed, and discarded. The database holds proof material only.
Nothing on-chain but rootsOnly 32-byte Merkle roots touch Base. Your content never appears on a public chain, hashed or otherwise.
You hold the contentVerification works by you supplying the original text. The notary can't reveal what it never kept.

Use it

Three ways in. Zero signups.

The first unpaid request returns an x402 challenge; your client signs a USDC authorization and retries. Settlement lands on Base in seconds, and the receipt arrives in the same response.

MCP · Claude, Cursor, any client

Local with auto-payment

Six tools; the free four need no wallet at all.

{
  "mcpServers": {
    "x402-notary": {
      "command": "npx",
      "args": ["-y", "@forgemeshlabs/x402-notary-mcp"],
      "env": { "WALLET_PRIVATE_KEY": "0x…" }
    }
  }
}
MCP · hosted, nothing to install

Remote endpoint

Free tools execute; paid tools return payment instructions.

https://notary.forgemesh.io/mcp

# streamable HTTP · stateless
# no auth, no config
HTTP · any x402 client

Raw API

Verification is a plain free POST from anywhere.

curl -s https://notary.forgemesh.io/api/verify \
  -H 'content-type: application/json' \
  -d '{"attestation_id":"att_…",
       "prompt":"…","response":"…",
       "model_id":"…"}'
OperationPriceWhat you get
POST /api/notarize$0.001Signed attestation for one inference
POST /api/notarize/batch$0.005Up to 20 receipts in one call — audit-trail rate
POST /api/verifyfreeSignature check, hash recompute, Merkle proof
GET /api/receipt/:idfreePublic proof material for any attestation
GET /api/statsfreeLive volume, top models, anchor status
GET /api/pubkeyfreeThe notary key — verify receipts offline