What Agents Buy.

Independent reviews of the x402 APIs behind agentic commerce. I give an AI agent a real wallet, buy things with it, and publish every receipt.

Written by Neil·nothing here is sponsored·new? start here·how we grade

25bought and graded
30agent calls this week

I pay for these APIs with my own wallet and publish what happened. The volume this market gets quoted by is mostly wallets paying themselves, so I read the payments off the chain myself. I check whether the answer that comes back is actually right, against a source that cannot be the seller. And the verdict an agent gates on is backed by money that moved. Every weight and threshold behind that is published at how we grade. The sweep covers every USDC payment agents make on Base and Solana, every day. Free MCP server for your agent →

Why this differs from the x402 dashboard total

This headline counts USDC received at the seller wallets we track, on Base and Solana, over the last complete UTC day. Of it, $40,850 settled on Base and $64,431 on Solana (Solana is mostly Bitrefill and Laso). The /x402 dashboard sweeps Base only, so it shows roughly the Base portion; a rolling-24h window there also differs from a calendar day by a few percent. Every figure on this site carries its scope for exactly this reason.

The data, for machines

Every rating, the settlement tape and all the field notes are published as JSON. No key, no signup, no rate limit. They are static files on a CDN, so call them as often as you like. Rebuilt whenever the site is, which is at least daily.

Endpoints

  1. /api/ratings.json: every grade, best to worst. Each entry carries service, grade, graded_on (the behaviour the grade is of), verdict, quoted, charged, delivered, free_to_call, date and links to the write-up and the service page. Currently 25 ratings.
  2. /api/leaderboard.json: who actually receives USDC, swept daily from Base. Each row carries rank, host, usdc_received, settlements, paying_wallets, avg_ticket, top_buyer_share, organic_demand_score, the address money arrives at, and any grades we hold. Read the caveat field before quoting the totals: this is turnover, not revenue.
  3. /api/field-notes.json: the traps, each with trap, what_happens, what_to_do and the evidence behind it. Currently 26.
  4. /api/receipts.json: the dispute ledger, one content-hashed, self-verifying receipt per paid call. Each carries the promise, the payment (with the on-chain tx), the delivery as a response shape (types only, never the goods), the verdict (delivered / short / accurate / off / inconclusive) and a three-level verify anyone can reproduce. The open format is at /receipts/spec.
  5. /api/preflight.json: Preflight, one pre-payment verdict per seller, the check an agent runs before the x402 402. Each host carries a light (green / yellow / red = CLEAR / HOLD / ABORT), a score, and the reasons, folding live price and payTo honesty, phantom paywalls and delivery receipts. Or call the preflight MCP tool with a URL. See /preflight.

MCP server

If your agent speaks MCP, it can query all of this as tools instead of fetching and joining files. Remote server, nothing to install, no key and no payment:

claude mcp add --transport http whatagentsbuy https://whatagentsbuy.com/mcp

7 tools. Which one for which job:

Renamed for clarity in Aug 2026; the old names (preflight, get_service, top_services, most_accurate, is_organic, list_traps, market_summary, market_pulse, search_services) still work. Every term is defined in the glossary.

The decision contract

verdict is the machine field. It is one of CLEAR, HOLD, ABORT, UNRATED. light carries the same decision as a colour (green / yellow / red / gray) for display; never compare light to ABORT. Until 2026-09-09 the prompt below said "gate on the light", which produced guards that could never fire. If you copied it, switch the comparison to verdict. Every response also carries confidence and as_of; a complete policy uses all three.

verdictconfidencestrict policypermissive policy (what preflight-x402 does by default)
CLEARverifiedpaypay
CLEARchecked / unprovencap the amount, or wait for verifiedpay
HOLDanydo not pay; surface the reasonspay, log the reasons
ABORTanydo not paydo not pay
UNRATEDunprovencap the amount, or do not paypay (fail-open)
input_error: true—fix the caller; this is not a clearancesame
no response, malformed JSON, timeout, 5xx—treat as UNRATED under your policyfail-open unless you set a floor
as_of older than your freshness floor—treat as UNRATEDpay, log the age

The permissive column is the out-of-the-box behaviour of preflight-x402: it blocks only ABORT and fails open on everything else. The strict column is what to configure when the payment matters (minConfidence: "verified", and treat HOLD as a stop). Whichever you pick, read the payTo and amount out of the live 402 and sign against those. Invalid arguments (a string where a number belongs, an unknown ranking mode, a non-string URL) now return an error instead of a silently unconstrained result.

Wire it into your agent in one line. Put this in your system prompt:

Before paying any x402 / HTTP 402 API, call check_before_paying(url) on the whatagentsbuy MCP and gate on the verdict field (CLEAR / HOLD / ABORT / UNRATED); light is the same verdict as a colour, for display only. Always read the payTo and amount out of the live 402 and sign against those, never a listing.

Full recipe, including the find_api → preflight → pay loop: llms-install.md.

The agent-facing surface is free on purpose. This site argues that measurements should be checkable by anyone, and putting a paywall in front of the machines would contradict it.

Also machine-readable

/llms.txt is the whole site as one page, and /llms-full.txt is everything including every bullet of every post. /feed.xml is RSS. Every page carries schema.org structured data: Review on ratings, TechArticle on field notes, WebAPI on service pages.

Try it

# the worst grades we have handed out
curl -s https://whatagentsbuy.com/api/ratings.json \
  | jq '[.ratings[] | select(.grade | test("^[DF]"))] | .[] | {service, grade, graded_on}'

# services taking real money that nobody has bought from yet
curl -s https://whatagentsbuy.com/api/leaderboard.json \
  | jq '[.rows[] | select(.grades == [] and .paying_wallets > 10)]
        | .[] | {host, usdc_received, paying_wallets}'

# every trap, as a checklist
curl -s https://whatagentsbuy.com/api/field-notes.json | jq -r '.notes[] | "- \(.trap)"'

Terms

CC BY 4.0. Use it, quote it, build on it, with attribution to What Agents Buy and the as-of date in the payload. Every file carries generated, source and a method line describing how the numbers were produced. Figures change daily, so read them rather than caching them. If you find something wrong, tell me on LinkedIn.

Built from the same data as the ratings and top paid services. How the measuring works is in about.