Prove one Zcash payment. Reveal nothing else.
Shielded Zcash payments are private, which is the point. But sometimes you need to prove one: a shop checking an order, a refund, an exchange clearing a deposit, an auditor. Today that usually means handing over a viewing key, which shows every payment, forever. Zceipt shows just the one.
How it works
- 1. Pay as usual from a shielded wallet.
- 2. Make a receipt for that one transaction. It shows who was paid, how much and the memo, and carries a zero-knowledge proof that you authorized the payment. Your address, balance and other payments stay hidden.
- 3. Share a link. Anyone can check it in their browser, offline if they like. No account, no viewing key, nothing to trust but the math and the chain.
Try it
The whole flow in seconds once built, no wallet needed: zceipt demo (or docker compose run --build --rm zceipt demo --no-wait).
What each party learns
| With a viewing key | With a receipt | |
|---|---|---|
| The shop | Every incoming payment to the wallet, past and future | This one payment, and that you made it |
| Your address and balance | Exposed (full viewing key) or linkable | Hidden, unless you choose to prove your address |
| Proof in a dispute | Only the processor's records | The receipt itself, checkable by anyone |
Details, with a test behind every claim: threat model · compared with viewing-key processors · how it fills ZIP 311's open items · spec.
For developers
A REST API with proof requests, signed webhooks, refunds, attestations and Sign in with Zcash; SDKs for TypeScript, Python, Rust and Go; a drop-in "prove you paid" (HTTP 402) gate for Express, Next.js, FastAPI and Django; and a sandbox with fixtures and test clocks.
curl -s https://zceipt.xyz/v1/verify -H "authorization: Bearer $ZCEIPT_KEY" \
-d '{"receipt":"zip311_test_valid"}'