Fizzl Pass
A pass for the owner of an AI agent: better terms on Fizzl's own paid services, for your wallet and your agents' wallets together. Your agents keep paying with ordinary x402; the pass is what changes the terms.
What you get
on x402 Doctor, presign-guard, Ichimoku Signal and Fizzl Buy, counted per pass instead of per connection.
of every paid call to those four services, in your pass's vault. Your agents spend it there, without a new payment.
unlimited agents, 90 days of receipts and 10 watched endpoints.
Tiers
| Bronze | Silver | Gold | |
|---|---|---|---|
| Price | Comes with Agent Wallet Pro: $5 for 30 days | $20 for 90 days, Pro included | $60 for 180 days, Pro included |
| Free limits | 5 times | 10 times | 25 times |
| Credit back | 10% of each paid call | 20% | 30% |
| Credit lasts | 12 months after the last credit | 12 months after the last credit | No end |
Paid once on the dashboard, in USDC (Base, Solana, Algorand and more) or RLUSD on the XRP Ledger; not automatically. When Silver or Gold ends while Pro still runs, the pass is Bronze again.
Or let your agent buy it over x402
No account needed: your agent pays with any x402 client and the pass belongs to the wallet that paid (without Pro, which needs an account).
GET https://x402-doctor.fizzl.eu/api/v1/pass/bronze $5, 30 days GET https://x402-doctor.fizzl.eu/api/v1/pass/silver $20, 90 days GET https://x402-doctor.fizzl.eu/api/v1/pass/gold $60, 180 days
The answer has a claim_url. A few seconds after the payment settles it returns the signed proof for the X-Fizzl-Pass header. Keep it: it is the key to the pass's credit. Buying the same tier again adds its days. Most x402 clients cap a payment at $1 by default (in @x402/fetch: spendControls), so raise that for these prices.
The credit can only be spent at Fizzl's services, earns nothing and is never paid out. A pass covers your own wallet and your agents' wallets; an agent's wallet counts once it has signed a payment.
How your agent uses it
- With the Fizzl connector (ChatGPT, Claude, Grok): nothing to do. It sends your pass to Fizzl's services itself, and a call your vault can pay comes back right away, with nothing to sign.
- With the Fizzl MCP server (presign-guard-wallet-mcp): its free checks send the pass itself.
- Any other client: copy the signed proof from your dashboard (or have the agent fetch it with its key:
GET https://wallet.fizzl.eu/v1/pass) and send it as the headerX-Fizzl-Passto Fizzl's services. A paid call with that header and no payment is paid from the vault when it holds enough (the answer then hasx-fizzl-vault: paid). The balance:GET https://x402-doctor.fizzl.eu/api/v1/vaultwith the same header.
The proof works like a key to your vault: send it only to Fizzl's services (x402-doctor.fizzl.eu, presign-guard.fizzl.eu, ichimoku-signal.fizzl.eu, buy.fizzl.eu) and to partners you trust.
For sellers: give pass holders your own terms
Any x402 seller can recognise a pass and decide what it is worth: a lower price, a higher free limit, faster answers. Fizzl doesn't take a cut and doesn't need to be asked.
Check a wallet, free, from a server or a browser (CORS). It tells you the tier and the end date, never whose pass it is:
GET https://wallet.fizzl.eu/v1/pass/status?wallet=0x…
{ "wallet": "0x…", "pass": { "tier": "bronze", "name": "Fizzl Pass Bronze", "until": 1793000000000 } }
Or verify the proof offline, when an agent sends you its X-Fizzl-Pass header: fzp1.<claims>.<signature>, signed with Ed25519. The public key is at /.well-known/fizzl-pass.json (fetch it once, keep it a few hours). The claims: tier, until (ms), wallets (the owner's and the agents'), iss, iat and kid. In Node:
import { createPublicKey, verify } from "node:crypto";
const { keys } = await (await fetch("https://wallet.fizzl.eu/.well-known/fizzl-pass.json")).json();
// The claims of a valid, current pass; null otherwise.
function checkPass(token) {
const [v, body, sig] = String(token ?? "").split(".");
if (v !== "fzp1" || !body || !sig) return null;
const claims = JSON.parse(Buffer.from(body, "base64url"));
const jwk = keys.find((k) => k.kid === claims.kid);
if (!jwk) return null;
const key = createPublicKey({ key: { kty: "OKP", crv: "Ed25519", x: jwk.x }, format: "jwk" });
const ok = verify(null, Buffer.from(`${v}.${body}`), key, Buffer.from(sig, "base64url"));
return ok && claims.until > Date.now() ? claims : null;
}
To check that the proof belongs to the wallet that pays you, compare the payer with claims.wallets. Fizzl credit can't be spent at partners: what you give pass holders is yours.
Partners
No partners yet. Give pass holders something and tell us through the feedback link on the dashboard (or Fizzl13@protonmail.com): we list you here, with what you offer.
Privacy
The public check answers per wallet with the tier and the end date only. The proof lists your wallets: you decide where your agents send it. The vault is kept by Fizzl's services per wallet: a balance in millionths of a dollar, nothing else. Details in the privacy statement.