I probed 442 x402 endpoints across 85 sellers. The code is fine; the market isn't.
I run a paid x402 endpoint. Like everyone else selling machine data right now, my real problem was not code — it was whether anyone with a wallet ever arrives. So I stopped guessing and measured the market: 85 sellers, 4
I run a paid x402 endpoint. Like everyone else selling machine data right now, my real problem was not code — it was whether anyone with a wallet ever arrives. So I stopped guessing and measured the market: 85 sellers, 442 endpoints, one request each.
The raw data is public and free at akari-x402.puzzling-marten.workers.dev/scoreboard.json. Here is what it says.
The method, and one thing I deliberately did not do
I took every paid URL published in the 402index directory — the exact URLs sellers advertise — and requested each one once. Then I graded the payment handshake the way a machine buyer experiences it:
- does the endpoint answer 402 at all?
- does the
payment-requiredheader base64-decode into a real requirements object? - does that object carry a positive amount, a CAIP-2 network, an asset, and a payTo?
- does the body show a price a human reading a log can see?
- is there an MCP surface (
initialize+tools/list)? - how fast does it answer?
The one thing I refused to do: call a 200 a broken paywall. Some listed URLs are free routes, some are docs pages, some are landing pages. If a listed URL answers 200, the honest label is free-or-mislisted, not "this seller's paywall is broken." Grading 200s as failures would have produced a much more dramatic article and a false one.
What the numbers actually show
Of 442 endpoints:
- 258 (58%) answered 402 — a real paywall facing the buyer
- 78 (18%) answered 200 — free, or the directory entry is not the paid route
- 106 (24%) were dead: 4xx, 5xx, or timeout
And here is the result that surprised me. Of those 258 live paywalls, only 8 (3%) failed to produce a parseable challenge. 246 carried a price. 250 named a network.
The plumbing is fine. Nearly everyone who sells x402 data has implemented the handshake correctly.
Where it does break, ranked by how many sellers it hits:
- Dead listings — 24% of endpoints. The directory entry 404s or times out. A buyer that finds you there and gets a 404 does not try again, and you never learn it happened.
-
45% of sellers expose no MCP surface. Agents increasingly look for
/mcpbefore they read an endpoint list. Noinitialize, notools/list, no sale from that audience. -
~25% of 402 bodies contain no human-readable price. The header is machine-perfect; the body says
{"error":"payment_required"}and nothing else. When a buyer's log shows a wall of identical 402s, yours is indistinguishable from a broken one. -
13% have no
/llms.txt. That is the shortest path an LLM agent has to learn how to pay you.
Grade distribution across the 85 sellers: A 16 · B 8 · C 6 · D 12 · F 43.
The uncomfortable part: code quality is not the bottleneck
I also looked at my own traffic. On a live paid endpoint, over 15,000 recorded requests:
- Agent402 crawler: ~7,900
- a monitoring service: ~2,100
- x402 liveness probes: ~360
- a ranking probe: ~220
- a registration bot: ~90
Real referrers across the entire period: 6 hits from one directory, 3 from Google.
Almost everything that arrives at an x402 endpoint is a crawler indexing you, not an agent buying from you. That is why the sellers I graded mostly have working paywalls and mostly have no revenue: the supply side is polished, the demand side is not there yet. Fixing your payment-required header is table stakes; it will not create a buyer.
If you sell an x402 endpoint, the cheap fixes
In the order they pay back:
-
Make the 402 body state the price. One line:
{"error":"payment_required","price_usd":"0.02","pay_to":"0x…","network":"eip155:8453"}. Cost: ten minutes. It is the single most common gap. - Ask to be re-crawled, and check your own directory entries. A quarter of listed endpoints were dead when I probed them. Being unreachable where buyers look is worse than ranking low.
-
Publish
/llms.txt. Write down the price, the network, thepayTo, and one workedcurlexample. -
Add
/mcp.initializeandtools/listare cheap; publishing each tool's price in_meta.x402.price_usdmakes you visible to the agent frameworks that read the MCP registry. - Sell a pass, not just calls. $0.02/call cannot pay anyone's bills, and an agent polling hourly already spends $14.40/month at that rate. Bundle 30 days of everything for $5 and your ticket size moves 250×.
The scoreboard is free and machine-readable at /scoreboard.json, with the per-seller grades and the exact finding codes. If you want the full per-route report for your own origin — every listed URL, every challenge decoded, latency, and a fix list — that is what my endpoint audit does.
I would rather publish the real numbers, including the ones that show the market is supply-heavy and buyer-light, than tell a nicer story. If you are selling into this market, you are not fighting bad code. You are fighting for attention with everyone else who already got the code right.
Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.