DEV Community

Elijah
Elijah

Posted on Edited on Originally published at lumierepaycheck.org AI-assisted

We paid x402 endpoints 45,152 times. Here's what we found.

Originally published on lumierepaycheck.org.

x402 lets an AI agent pay for an API call the way a browser loads a page: the endpoint answers 402 Payment Required with a price, the agent pays in USDC, and the endpoint returns the data. No account, no API key, no invoice.

That's the promise. We wanted to know how it holds up when you actually pay. So for six weeks, from September 27 to November 7, 2026, Lumière PayCheck called every x402 endpoint it could find, paid the listed price, and checked what came back.

The short version: once an x402 endpoint takes your money, it almost always delivers. Getting the payment to go through in the first place is the hard part.

The numbers at a glance

Metric Result
Test attempts 126,291
Endpoints tested 37,812
Sellers (domains) 2,307
Payments that settled 45,152
Total paid to endpoints (including seller-funded tests) $394.44
Average price per call 0.87¢
Endpoints that delivered on their latest graded test 95.1%
Payment attempts that never went through 49.1%

How we tested

For every endpoint in the x402 Bazaar and every one we found outside it, PayCheck:

  1. Requested it without paying and read the 402 quote: price, network, token, payout wallet.
  2. Paid that exact quote from a test wallet, on Base or Solana.
  3. Compared the response with what the endpoint's own listing promised: the fields, the shape and, where we could check them, the values.
  4. Re-tested any first failure before counting it, so one bad minute doesn't sink a grade.

Every paid test since November 7 also gets a signed receipt anyone can verify, so these numbers aren't just our word.

Results we can't blame on the seller, like our own network errors or a quote that changed between the check and the payment, are recorded as neutral and never count against an endpoint.

Finding 1: once paid, 95% of endpoints deliver

This is the number that matters most to an agent: if you pay this endpoint, do you get what you paid for?

Looking at each endpoint's latest graded paid test (31,546 endpoints):

Result Endpoints Share
Delivered what the listing promised 29,990 95.1%
Bad response (confirmed on re-test) 1,331 4.2%
The listing's example didn't exist 144 0.5%
Needed a login after payment 55 0.2%
Needed input we didn't have 26 0.1%

That's a better record than most people expect from a protocol this young. But 4.2% of a catalog with tens of thousands of endpoints is still well over a thousand endpoints where paying gets you nothing usable. An agent that pays blindly will hit them.

Finding 2: half of all payment attempts never went through

Of 126,291 test attempts, 61,982 (49.1%) ended before any data came back, because the payment itself didn't complete.

Why the payment didn't complete Attempts Share
The endpoint asked for payment again after we paid 53,340 86.1%
Our tester picked a quote option that breaks the x402 spec 7,527 12.1%
Other errors building the payment 92 0.1%
Other 1,023 1.7%

One caveat: these are attempts, not endpoints. An endpoint that kept refusing payment was retried and counted each time.

A correction. When we first published this, we called the second row "quote formats our payer didn't support yet". Looking closer, 7,527 of those attempts hit a payment option that breaks the x402 spec, so the official x402 client fails on it exactly as ours did. But it's a small corner of the catalog: 194 endpoints from 13 sellers, out of more than 127,000 we monitor. Retries made it look big; one seller's Solana option alone accounted for 4,678 attempts.

What was wrong with the option (as of November 8; an endpoint can have more than one) Endpoints Sellers
Solana option missing extra.feePayer, which x402 on Solana requires 43 1
Network named solana:mainnet instead of solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp 142 4
x402 version 2 quote using version 1 network names like base (this count can also include networks we simply don't pay on) 42 9
EVM option missing the token's EIP-712 name and version 1 1

Almost all of those endpoints also quote another network, so buyers aren't stuck with the broken option; our tests now pay the other one. When no option in a quote can be paid, PayCheck grades the endpoint D (caution) and shows the seller the exact fix, because an agent can't tell an "almost right" quote from a broken one: its payment just fails.

The big one, though, is the first row. The endpoint quotes a price, we pay exactly that, and it answers 402 again. For an agent, that's a dead end: no data, and often no clear reason. In our data it's the single most common way an x402 call fails, by a wide margin.

Finding 3: when a paid call fails, it's usually the wrong data, not no data

When an endpoint did accept payment and still failed, the most common problem by far was a response missing the fields its own listing promised (7,879 cases). It answered, it looked like success, and the data wasn't there.

Smaller groups: server errors after payment (1,564), timeouts after payment (1,239), responses that weren't valid JSON (661), a list where the listing promised a single item or the other way round (391), 404 after payment (227) and empty responses (93).

This is why a status code alone tells an agent very little. A 200 with the wrong body is still money spent on nothing.

Finding 4: failed calls usually still cost money, and refunds are rare

Of the 5,123 paid tests we confirmed as bad responses, 3,151 (61.5%) still charged us. Sellers refunded 87 of those: 2.8%.

That isn't necessarily bad faith. Most x402 sellers settle the payment before they run the request, and few have any refund flow at all. But it means the cost of a bad call lands on the buyer, which is the agent's wallet.

Finding 5: re-tests almost always confirm the first failure

Every first failure gets a second paid test before it counts. Over a 30-day window of 4,937 decided re-tests, 94% confirmed the failure and 6% passed the second time.

So most failures aren't flukes. When an x402 endpoint breaks, it tends to stay broken until someone fixes it.

Finding 6: x402 is a market of sub-cent calls on Base

Price per call Payments Share
Up to $0.001 3,866 8.6%
$0.001 to $0.01 38,366 85.0%
$0.01 to $0.05 2,896 6.4%
Over $0.05 24 0.1%

85% of payments were between a tenth of a cent and a cent. By network, 84.6% settled on Base and 5.7% on Solana. The remaining 9.8% settled without the endpoint sending a transaction reference back, which leaves the buyer without an easy receipt for what it paid.

What this means if you're building an agent that pays

  • Check before you pay. One request to the endpoint's grade costs nothing and skips the 4% that won't deliver. That's what Lumière PayCheck is for: a free grade for every x402 endpoint, and an allow-or-deny check your agent can call with the exact quote before it signs anything.
  • Treat "402 after payment" as a hard failure. Don't retry it in a loop; stop and record it.
  • Validate the body, not just the status. Check for the fields you need before you trust the result.
  • Report outcomes. Every result an agent reports makes the grades better for the next one.

What this means if you sell an x402 endpoint

  • Make sure a standard client can pay your quote. On Solana, include extra.feePayer and the full network id solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp. On EVM, include the token's name and version in extra. Don't mix versions: x402 version 2 uses CAIP-2 networks (eip155:8453); version 1 uses short names (base).
  • Make your listing match your response. Most paid failures were missing or mismatched fields. If your output schema says it returns an object with price, return that.
  • Confirm your endpoint accepts its own quote. Pay it once yourself, from a wallet that isn't yours, on each network you list.
  • Return the settlement header. Buyers want proof of what they paid.
  • See your grade, and prove it. Every seller's endpoints are graded in the open on the Sellers page. If you've fixed something, you can fund a test and the result updates right away.

Frequently asked questions

What is x402?
An open payment protocol that uses the HTTP 402 Payment Required status. An endpoint quotes a price, the client pays in a stablecoin like USDC (most often on Base), and the endpoint returns the response. It's built for AI agents paying for APIs per call.

How reliable are x402 endpoints?
In our tests, 95.1% of endpoints that accepted payment delivered what their listing promised on their latest graded test. But 49% of all payment attempts didn't complete, mostly because the endpoint asked for payment again after being paid.

How much does an x402 API call cost?
Usually less than a cent. 85% of the payments we made were between $0.001 and $0.01, and the average was 0.87¢.

Do x402 sellers refund failed calls?
Rarely. Of 3,151 bad responses that charged us, 87 were refunded (2.8%).

How can I check an x402 endpoint before paying it?
Look it up on lumierepaycheck.org, or have your agent call the free check_payment tool (API or MCP) with the quote. It returns allow or deny, with the reason.

The data

Every endpoint's grade and test history is public on lumierepaycheck.org, the catalog is browsable by seller on the Sellers page, and new paid tests come with signed receipts. Live totals are on the stats page.

If you're a seller and think a result is wrong, tell us at the address on the site. We'd rather fix a grade than defend a mistake.

Top comments (2)

Collapse
 
book0feli profile image
Elijah •

Good read. On the point that x402 endpoints mostly deliver after payment but many payments fail or return wrong data: of the 120,000+ endpoints we monitor, most haven't had delivery confirmed by a paid test yet, so a listing on its own says little about whether an endpoint works.

(I work on Lumière PayCheck, which checks x402 endpoints before agents pay them.)

Collapse
 
wieedze profile image
Maxime Saint-joannis •

61.5% of confirmed bad responses still charged, and 2.8% refunded, is the gap that stays with me. The refund path exists on paper, but nobody downstream learns that the call failed, so the next buyer pays for the same thing.

Did you see failures repeat on the same endpoints across your test wallets, or were they spread out? If they cluster, a short public record of "paid, got nothing" per endpoint would warn the next agent before it pays. I wrote about that idea here: dev.to/wieedze/why-does-no-agent-r...