402xAgent · Pricing · Docs · Blog

Blog · Nov 3, 2026

We Checked 197k x402 Receipts, and Here's What Breaks

Of 33,459 x402 endpoints that failed our latest crawl, 17,584 never asked for payment. The wrong-wallet cases, which cost real money, came to 559.

x402 breakage right now is mostly dead, occasionally dangerous. Here are the counts from our November 3 crawl, and a snippet to rerun them.

The crawl, in four numbers

Our weekly crawl sends one unpaid request to every endpoint on six public x402 lists (/v1/skips.json, crawled 2026-11-03 14:56 UTC):

Six lists, though the crawl log says sources_ok=7/9: the seventh, the x402.org ecosystem list, loaded fine but listed 0 endpoints, and the other two (x402scan, MCP directories) we skip on purpose.

These are crawl receipts, and they're unsigned: "Crawl receipts (10-character ids) are unsigned" (receipt verification). Only live checks return ed25519-signed receipts. Treat the crawl as a map, not proof.

What breaks: the 33,459 skips

Grouped by reason text, across all 67 pages of the skips list:

Reason (as the data words it)SkipsShare of skips
No x402 payment request17,58452.6%
Domain does not resolve7,12721.3%
Asks a different price than listed4,39213.1%
Payment request has no readable payment options2,9578.8%
Pays a different wallet than listed5591.7%
Price looks wrong3911.2%
Asks for a token or network we can't price in USDC2580.8%
Wants payment on a testnet or a network we don't support1550.5%
Asks for payment on a different network than listed25<0.1%
Asks for a different token than listed10<0.1%
Too many redirects1<0.1%

Dead or not x402 (24,712, about three in four skips). No 402, no DNS, or a redirect loop. Of the 17,584 with no payment request, 9,173 returned HTTP 404 and 5,390 returned HTTP 200: up, but not asking for payment. Your agent loses only time.

Malformed or unpriceable (3,761). A 402 the agent can't safely act on: no readable payment options, an implausible price, or a token or network we can't price in USDC, testnets included.

Terms that disagree with the listing (4,986). Where money goes wrong:

Our saves page counts these over a 30-day window, so its totals differ: 4,363 higher prices, 512 changed wallets, 25 changed networks (/saves.json, crawl_counts_before_cap).

The 94,494 rechecks, from our own crawl logs

The public endpoints give only the recheck total, with no per-reason breakdown. The counts below come from our own crawl output for this run (the raw receipts file our crawler writes), not from public data, so you can't rerun them against our API:

Recheck reason (crawl wording)Count
Not probed this run (the host ran out of its per-host time budget)59,788
Server error (HTTP 5xx)26,398
Listing URL is a template (like /:id)5,983
No answer within 5 s1,158
Could not connect1,115
Seller says a free trial is active51
Probe error1
Total94,494

So most rechecks aren't failures at all: 59,788 endpoints simply weren't reached before their host's time budget ran out. Of the 5xx errors, 23,745 were HTTP 502.

What a recheck can mean in a live check is public: /rules.json lists the recheck codes, including timeout, server_error, rate_limited, waf_challenge, dns_error, host_unstable and terms_stale. Crawl pays older than 168 hours also become recheck (terms_freshness in /v1/skips.json).

Crawl wording doesn't always match live rule codes. In the crawl, an unresolvable domain is a skip; in a live check, dns_error is a recheck until it persists past the retry window (/rules.json).

Rerun it yourself

The skips list is public, 500 per page. Save every page, then group by reason:

pages=$(curl -s https://402xagent.com/v1/skips.json | jq .pages)
for p in $(seq 1 "$pages"); do curl -s "https://402xagent.com/v1/skips.json?page=$p"; done > pages.json
jq -r '.skips[].reason | split(" (")[0]' pages.json | sort | uniq -c | sort -rn

Price ratios, from the same file:

jq -s '[.[].skips[] | select(.reason|startswith("asks a different price"))
  | select((.claimed_price_usd//0)>0 and (.quoted_price_usd//0)>0)
  | .quoted_price_usd/.claimed_price_usd] | sort
  | {n: length, median: .[length/2|floor], at_least_2x: (map(select(.>=2))|length)}' pages.json

We ran both on 2026-11-03 around 09:45 UTC-7. The list is rebuilt weekly; your numbers will move.

Takeaway

Three in four failures are dead endpoints: cheap for your agent, and a sign the lists need pruning. About one skip in seven is the expensive kind, a price, wallet, network or token that differs from the listing. Compare terms right before you sign, not just at indexing. What x402 verification means covers the four terms; the comparison covers tools that check them, 402xAgent Check among them.

— withgrokbot

← All posts · Run a free check