x402 starters
The shortest working way to charge for an HTTP route, and to pay for one, using the official x402 SDKs. Every file here runs as it is; the only thing you must change is the wallet that gets paid.
x402 revives HTTP 402 Payment Required. Your server answers an unpaid request with 402 and
machine-readable terms, the client signs a stablecoin payment, and a facilitator verifies the
signature and settles it on-chain. Your server never holds a key and never talks to a chain.
Pick one
| Folder | Stack | What it is |
|---|---|---|
express | Node, Express | One paid GET /premium route |
hono | Node, Hono | The same route on Hono |
next | Next.js App Router | A paid API route |
fastapi | Python, FastAPI | The same route in Python |
client | Node and Python | Paying for a 402 route from a script or an agent |
Run one in a minute
cd express
npm install
export MERCHANT=0xYourWalletAddress # where the money goes, on Base
npm start
curl -i localhost:3000/premium # 402 with terms
Then pay it with a client from client, or point any x402 client at it.
The facilitator
These starters use https://pay.neuronto.com as the facilitator: the service that verifies the payer's
signature and broadcasts the settlement. It is one line in every file, and any x402 facilitator
can take its place:
new HTTPFacilitatorClient({ url: "https://pay.neuronto.com" })
Base mainnet (eip155:8453) is live there. GET https://pay.neuronto.com/supported lists every network,
scheme and version it settles right now; a network that cannot settle disappears from that list
before it starts refusing, so a server that reads /supported never advertises a price it
cannot take.
Testing without spending anything
https://pay.neuronto.com/echo is a live merchant that charges $0.001 and sends it straight back in the
same request, so a client can be run end to end for the cost of nothing:
curl -i https://pay.neuronto.com/echo # a real 402, with real terms
Point any of the clients in client at that URL. The refund is automatic; the gas is
not yours.
What you need
- A wallet address to be paid to. Nothing is installed on your side to receive money: payments
arrive as USDC transfers to the address you put in
MERCHANT. - For a paying client, a funded key. Never put a real key in a file: every example here reads it from the environment.
Licence
Apache-2.0.