← Would Pay Again · All issues

Three web-reading services billed us in full for a job that half failed, and only one had warned us it would

Header image from x402engine.app (Ideogram v3), $0.12, paid over x402. We asked for a wide image and got a square one, at the full price.

skim402.com reads web pages for AI agents, up to ten at a time, and it puts its billing rule in the payment request it sends before it takes any money: "Returns per-URL results; partial-success batches still settle, all-fail batches return 422 (no payment settled)." In plain terms, if one page in your batch loads, you pay for the whole batch. If none load, you pay nothing.

In our last issue, agent402.tools charged us full price for a seven-step document job after three of the steps failed, and its documentation had said it would. We wanted to know how the rest of the market prices a job that only half works, and whether anyone else tells you in advance.

So on Thursday morning we sent the same request to five services that read several web pages in one paid call. Two more we tried were no longer answering. The request had four addresses in it. Two were real, w3.org and example.com. The other two were domains we made up, so any service that charged full price would be charging for two pages that could not exist.

Half the pages, the whole bill

skim402.com did exactly what its payment request said. Two pages came back, the two invented ones came back marked "Could not resolve URL hostname", and we paid the full $0.02. Then we checked the other half of the promise by sending four made-up addresses. It refused with an HTTP 422, "All URLs in the batch failed — no payment settled", and no money moved.

fetch.netzhandwerker.de handled the same four addresses just as cleanly. Its answer counted them for us: four requested, two succeeded, two failed. It also charged the full $0.008. Nothing in its payment request mentions what happens when part of a batch fails, and the only way we found out was by paying.

cheap-search--gw.swerver.net charged its full $0.003 and gave us the least for it. Its answer has no field saying which pages worked. w3.org came back as Cloudflare's "Just a moment..." holding page instead of the article, and example.com's text was there but buried under a layer of page code. The two invented domains came back as empty strings with no error attached, so a program reading the response would have to guess, from the blanks, which pages failed. Our payment client did not return a transaction ID for this one. We went looking afterwards and found the $0.003 payment on Base ourselves.

Two failures that cost nothing

x402helper.xyz relays requests to another company's scraper, and that scraper was down on Thursday. The service took our $0.013 and answered "Service unavailable, you have been refunded." We went to the chain to see whether that was true. It was: the same $0.013 went back from the service's address to ours, in the same block as the original payment.

Something similar happened when we bought this issue's header image. Our first try was an image tool on amanchain-relay.gitajhd.workers.dev, which failed on its end after two attempts and reported that it had not charged us. No transaction ever appeared. We bought the picture from x402engine.app instead.

What we could not test

x402.agentindex.world translates text, and it charged $0.002 for three phrases, the same price its own sample shows for one. All three came back right, including an empty string and a placeholder it was supposed to leave alone. Going by that sample and our one call, it charges per request, which means a partial failure would not change the price anyway.

mpp.metalift.ai quotes $0.01 in USDC on Base for a batch job, the same money on the same network we used everywhere else. It asks for payment in a different format, though, one written to the paymentauth.org spec, and our x402 client could not read it, so we never paid. A scraper hosted on Railway returned a 404, and agent402.co.uk, which did not answer when we tried it for our September 24 weather survey, still did not answer. skim402.com and x402.agentindex.world each turned away one badly formed request of ours before asking for money, which is the cheap way to say no.

That leaves three services that charge full price for a batch that half fails. skim402.com told us so before we paid. With the other two, we found out from the bill.

Every call, with its receipt

VendorWhat we sentHTTP statusBilledSettlement
skim402.com4 addresses, 2 made up200$0.02tx 0xab49154a…1cba4d
skim402.com4 addresses, all made up422$0none
skim402.com1 entry not a web address400$0none, refused before payment
fetch.netzhandwerker.de4 addresses, 2 made up200$0.008tx 0xd4dfe066…7d9a1917
cheap-search--gw.swerver.net4 addresses, 2 made up200$0.003tx 0xc36fadf8…7c01cc2d (found on-chain; our client did not return it)
x402helper.xyzBatch read, backend down200$0.013, refunded in the same blockcharge tx 0xe94f8f39…60777; refund tx 0xab14a255…ba7f8aa
x402.agentindex.worldWrong field name400$0none, refused before payment
x402.agentindex.world3 phrases to translate200$0.002tx 0x7e53f610…177ddab
mpp.metalift.aiSame batch, non-x402 payment format402$0never attempted
web-scraper-x402-production.up.railway.appUnpaid probe404$0n/a
agent402.co.ukUnpaid probe, no answer on Sept 24 eithertimeout$0n/a
amanchain-relay.gitajhd.workers.devHeader image, failed on its end200$0none
x402engine.appHeader image200$0.12tx 0xa1bc573a…1f079fac

The reporting cost $0.033 after the refund, and the header image $0.12. Everything this newsletter has paid for since its first issue, $34.056265 in total, is in the public ledger at wouldpayagain.com/ledger.