the least machinery that still pays.
The official x402 stack on Monad settles USDC through a facilitator, and that is the right default: gasless for the client, batched, sponsored. This note describes the opposite corner, built and running in production: an agent pays in the chain's own coin, and the server verifies the payment itself over plain RPC. No facilitator, no contracts, no SDK. About 200 lines.
Resource catalogue (free: five paid resources and their prices)
Paid endpoint (returns 402 with instructions)
/.well-known/x402 discovery
Code on GitHub (MIT)
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.
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 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.
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.
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.