More capacity, more assurance, more cover — never a smaller crowd. Privacy comes from everyone looking the same, so Plus deliberately does not sell a "more private lane". The wire is identical for paying and non-paying users. What you buy is everything around it:
| You get | What it is |
|---|---|
| Capacity | Sends and mailbox publications exempt from per-lane rate limits |
| Funded cover | Each pass can emit one extra cover row at an undisclosed time — raising the floor for every reader |
| Anchoring | A feed row included in a signed hourly Merkle root (on-chain posting when the operator enables it) with a verifiable proof |
| Erasure proof | Signed statements of what was purged, for everyone (/api/messages/v2/erasure) |
Paid in crypto, redeemed anonymously. Pay an invoice in ETH (Robinhood Chain, Ethereum, Arbitrum, Base), USDC (Base, Arbitrum) or BTC (via Chainflip). You then submit blinded tokens; we sign them without seeing them (RFC 9474 blind RSA). When a pass is later used we cannot tell which payment, wallet, or other pass it belongs to. A pass is not an account — there is nothing to log in to and nothing we could hand over.
Price: one bundle = 500 passes for $3 (quoted in the asset at invoice time); order up to 50 bundles per invoice. BTC has a Chainflip deposit minimum (~0.001 BTC ≈ 20+ bundles) — for small orders pay in ETH or USDC. /api/plus/info has the live mint key, assets and stats.
Passes now double as your anonymous API key: send one as x-anygas-pass (or body.pass) on any quota-limited call — exempt for that request, unlinkable to you. Reads ride the private relay; purchases go direct (and say so).
Passes are created and unblinded in this tab and kept encrypted in this browser (your passphrase). Paying uses your wallet; the passes you get back cannot be linked to that payment.
// npm i ethers @cloudflare/blindrsa-ts @noble/curves @noble/post-quantum
import * as plus from './plus-sdk.mjs'; // https://anygas.xyz/svc/plus-sdk.mjs
import * as msg2 from './msg2-sdk.mjs';
const inv = await plus.invoice({ asset: 'eth-8453' }); // or eth-4663 | eth-1 | eth-42161 | usdc-8453 | usdc-42161 | btc
const tx = await wallet.sendTransaction({ to: inv.payTo, value: BigInt(inv.amount) }); await tx.wait();
const passes = await plus.claim(inv.invoiceId, tx.hash); // 500 unlinkable bearer passes — store them like cash
await msg2.send('sphynx.robynchain.eth', 'gm', { wallet, pass: passes.pop() }); // rate-limit exempt, still unlinkable
await plus.fundCover(passes.pop()); // +1 cover row for everyone, some time in the next 24 h
const a = await plus.anchor(passes.pop(), rowId); // signed (optionally on-chain) Merkle inclusion
console.log(await plus.verifyAnchorProof(await plus.anchorProof(rowId)));
Raw API: POST /api/plus/invoice · GET /api/plus/invoice/{id} · POST /api/plus/claim · redeem inside POST /api/messages/v2/send {pass}, /mailbox {pass}, /plus/cover {pass}, /plus/anchor {pass,id}. MCP: robyn_plus_*. Full spec: docs.
What we learn: that some payer bought N passes at time T. What we do not learn: which requests those passes later authorised.