Anonymous credit tokens
An anonymous credit token is a bearer credential for metered access. A server issues you a token worth some number of credits. You spend from it in increments, and each spend carries a zero-knowledge proof that the token is genuine and the arithmetic is honest. The server can check all of that while learning nothing that links the spend to your issuance or to any of your other spends.
The trust runs both ways and both directions are cryptography, not policy. The issuer verifiably cannot connect your spends to each other or to you: the only value it ever sees twice is a one-time nullifier, and that only repeats if the same token is spent twice. You provably cannot spend more than you were issued: the balance is committed inside the token and a range proof rules out overdrafts. No account, no identifier, no cookie: the token is the entire relationship.
What runs here
This site operates two independent issuers over one shared nullifier store:
- A classical issuer at
/api/v1/act, built on the anonymous-credit-tokens library: Ristretto group arithmetic, BBS-style signatures, and sigma-protocol proofs. - A post-quantum issuer at
/api/v1/pq, built on the vole-act library: a MAYO trapdoor with VOLE-in-the-head proofs. Research-grade on purpose; see the post-quantum page for what that means.
Issuance is metered by proof of work rather than payment: request a challenge, mine it, and the issuer signs you a token worth up to 1024 credits. A companion terminal wallet, act-wallet, mines, holds tokens for both schemes, and journals every operation so a dropped connection never destroys value.
Status, plainly
Where to start
- How it works: issuance, spending with change, refunds, and double-spend prevention, with a worked example.
- When the connection dies: the retry and replay contract, which is the part of a token deployment that decides whether real value would survive.
- Why servers want this: metering, rate limiting, paywalls, and agent credits without tracking.
- API reference: the JSON endpoints, error codes, and curl examples.