Why a sovereign variant
A facilitator abstracts gas, RPC, batching and refunds away from both sides of an x402 payment. That is real value, and for most builders the official USDC-through-facilitator flow is the correct choice. But it reintroduces the thing HTTP 402 promised to remove: a third party between the buyer and the seller. If the facilitator is down, rate-limits you, or sunsets, your paid API is down with it.
The x402 specification explicitly allows the resource server to verify payments locally instead of calling a facilitator. This gate takes that branch to its logical end: the payment asset is the chain's own coin, so there is no token contract, no EIP-3009 signature plumbing, and nothing to integrate except an RPC endpoint you already trust.
The monad-native-exact scheme
Four steps, all visible in an ordinary HTTP exchange:
1 GET /monad/x402/<resource>
-> 402 + PaymentRequired JSON (scheme, chainId, payTo, price, validity window)
2 client sends the exact amount of native MON to payTo
3 GET again with X-PAYMENT: base64({"txHash": "0x.."})
4 server verifies over RPC and serves:
recipient == payTo, value >= price, receipt status == success,
block timestamp inside the validity window, txHash never used before
-> 200 + data + X-PAYMENT-RESPONSE: base64({ok, txHash, block, scheme})
Verification keys on the transaction hash, not on matching a unique amount, so concurrent buyers never collide. A sqlite replay store burns each hash on delivery: one payment, one delivery. The freshness window (15 minutes) bounds both replay exposure and the store's growth.
The first real purchase
The transcript below is the demo client against the production gate, unedited:
step 1: GET -> 402
scheme: monad-native-exact | price: 10000000000000000 wei
step 2: paying from 0x9E66867adfDC613891A96d82a53988829cD39004
tx sent: 0x372385ee8c03c6b93744cfa9a458dec45880ae653e0f60fb447f9bd65962ad3a
confirmed
step 3: retry with X-PAYMENT -> 200
settlement: {"ok": true, "block": 51476148, "scheme": "monad-native-exact"}
Retrying the same hash returns 402 payment rejected: payment already used.
The transaction is on the Monad testnet chain for anyone to check.
Trade-offs, honestly
- The client pays gas and waits for inclusion. The facilitator flow is gasless via signed authorizations; ours is a real transaction. On Monad this costs sub-second finality per purchase, which is tolerable for data calls and wrong for high-frequency microstreams.
- No refunds, no batching, no metering. One payment, one delivery. PayGate's escrow design (see below) does per-byte metering and automatic refunds; that requires contracts. We chose not to need them.
- You trust your own RPC view. No third party confirms the payment, which is the point, and also the responsibility.
- Custom scheme. Standard x402 clients will not pay this endpoint out of the box; the 402 body carries human- and agent-readable instructions. Adding the official USDC scheme alongside ours is the planned interop step.
What is actually for sale
The endpoint sells a computed network-concentration report for both Monad networks: stake HHI by provider ASN, country and continent, top-N provider shares, the minimum number of providers controlling 33% and 50% of stake, and an epoch history tail. Computed live from the same pipeline that powers our free geo-latency maps; aggregates only. The free tier stays free; the paid slice is the analysis layer.
Related work on Monad
The Monad x402 scene is already busy, which is good news for everyone in it: the official guide with the molandak facilitator (USDC, EIP-3009 and Permit2 schemes), MetaMask's own Monad facilitator, PayGate with escrow-based native-MON paywalls, per-byte metering and SLA refunds, AxilProtocol's contract-based 402 splits, and state-channel experiments for off-chain per-call payments. Monad Foundation is a premier member of the x402 Foundation, so this direction has institutional weight behind it.
This gate occupies the corner none of them wanted: the least machinery that still pays. If that corner is yours too, the code is MIT.
Prooflines, August 2026.