Drop-in paywall with verified delivery: an HTTP 402 x402 v2 challenge naming your own wallet, settlement through a keyless facilitator, and the bytes released only after the payment is confirmed. A second route verifies a plain USDC transfer on-chain. No payment processor, no payout account, no KYC to sell: the money lands in the seller's wallet.
Paid on Base (eip155:8453) to 0x8b8543A9566b7C75e5484Ce4385D76879EDA2068. Delivered the moment payment settles.
GET https://penny-paywall-base.penny-mcamp.workers.dev/buy
You get a 402 with accepts[] + a bazaar declaration. Send the signed
authorization back in PAYMENT-SIGNATURE; the store verifies and settles it, then returns the tarball
with a PAYMENT-RESPONSE header.
Send 19.00 USDC on Base to0x8b8543A9566b7C75e5484Ce4385D76879EDA2068
then claim with the transaction hash — the store reads the Base receipt itself.
Refusals are explicit: amount_below_price, no_usdc_transfer_to_payto,
tx_not_successful, insufficient_confirmations.
worker/paywall.mjs — the engine running this page: 402 + bazaar challenge, verify-then-settle through
facilitator.payai.network, delivery gated on settlement, plus the /claim on-chain route.worker/entry.example.mjs, wrangler.toml.example — wire your own product and deploy.lib/verify-payment.mjs — Node verifier: receipt status, USDC Transfer log to your payTo,
atomic amount, sender, confirmation depth. No keys, no custody.bin/402-doctor.mjs — audit any URL's x402 readiness (challenge shape, price, payTo, EIP-712 domain, bazaar declaration).FIELD-NOTES.md — the non-obvious parts: which discovery gates are real, the domain trap, and how to attribute
a paid call whose response was lost (EIP-3009 nonce → tx → from/to/amount).GET /verify?tx=0x…&payTo=0x…&minAtomic=… returns a machine-readable
receipt for one Base USDC payment — same verifier the store uses on its own buyers.
Read the free sample of the field notes — including the EIP-712 domain trap and the settlement-attribution method — before paying anything.
Indexes and agents: /.well-known/x402 · /openapi.json · /health. Crawlers and unpaid probes are never charged.