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
- /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,dateand links to the write-up and the service page. Currently 25 ratings. - /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, theaddressmoney arrives at, and anygradeswe hold. Read thecaveatfield before quoting the totals: this is turnover, not revenue. - /api/field-notes.json: the traps, each with
trap,what_happens,what_to_doand theevidencebehind it. Currently 26. - /api/receipts.json: the dispute ledger, one
content-hashed, self-verifying receipt per paid call. Each carries the
promise, thepayment(with the on-chaintx), thedeliveryas a response shape (types only, never the goods), theverdict(delivered / short / accurate / off / inconclusive) and a three-levelverifyanyone can reproduce. The open format is at /receipts/spec. - /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), ascore, and thereasons, folding live price and payTo honesty, phantom paywalls and delivery receipts. Or call thepreflightMCP 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:
- Need an API that does something →
find_api(task)— a ranked, payable shortlist - About to pay one →
check_before_paying(url)— one CLEAR / HOLD / ABORT verdict to gate on (detail:truefor the full read). The one you call before every payment. - Want a seller's full record →
look_up_seller(host)— every grade, quoted vs charged, volume, and the wash read - Want a leaderboard →
rank_sellers(by: revenue | real_demand)— the two disagree often, which is the point - A category with a right answer →
rank_by_accuracy(category)— crypto, stock, fx, gas, balance, weather - How big is x402 →
market_size()— what settled plus the live pulse - Avoid known losses →
known_payment_traps()— read before writing payment code
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.
| verdict | confidence | strict policy | permissive policy (what preflight-x402 does by default) |
|---|---|---|---|
| CLEAR | verified | pay | pay |
| CLEAR | checked / unproven | cap the amount, or wait for verified | pay |
| HOLD | any | do not pay; surface the reasons | pay, log the reasons |
| ABORT | any | do not pay | do not pay |
| UNRATED | unproven | cap the amount, or do not pay | pay (fail-open) |
input_error: true | — | fix the caller; this is not a clearance | same |
| no response, malformed JSON, timeout, 5xx | — | treat as UNRATED under your policy | fail-open unless you set a floor |
as_of older than your freshness floor | — | treat as UNRATED | pay, 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.