The free onboarding report

x402, paid-tested: what's worth using.

6 whitelist services we bought with real USDC — each with the exact call and the real response. Plus how to make your first payment, what to avoid, the market this week, and exactly how we test.

updated 2026-09-08·// verify, don't trust·every claim has an on-chain receipt
01 — Make your first call

From zero to your first paid call

No account, no API key, no subscription. You need a wallet that can pay USDC on Base, and a client that speaks x402.

Wallet + USDC on Base

Coinbase Wallet or MetaMask on the Base network. Buy 5–10 USDC. Most services have a facilitator pay gas, so you can run on 0 ETH.

An x402 client

For a human at a terminal — the official CLI:

$ npx awal@latest

For an agent in code — the @x402/fetch library wraps fetch to pay automatically.

How a call works

request → 402 Payment Required → wallet pays USDC → retry → 200 + data. The client does pay-and-retry for you; it settles in seconds.

A real gotcha we hit (so you don't): the x402 spec moves fast — services now send the newer eip155:8453 network format, and older client libraries silently reject it and fail to pay. Use a current client (@x402/* v2.11+ or latest awal), not the old x402-fetch package. Keep your x402 wallet separate from your main funds — most services don't refund, so try a cheap endpoint first.
02 — What's worth using

The whitelist

6 services that clear our strictest bar — we paid, captured the response, and verified the content is real (signature checks, on-chain forensics, a live database we wrote to and read back), then a human signed off. Picked to show what x402 actually unlocks for your agent — things it genuinely cannot do alone, not "look up a number you could Google in a second." Every entry shows the exact endpoint and the real body it returned.

Actions your AI literally cannot take

StablePhone ★ Merit Systems · the one we use most$0.54 call · $0.05 lookup
Your AI places a real phone call — dials a US number, speaks your task in natural voice, hangs up.
Endpoint
POST stablephone.dev/api/call · body: { "phone_number": "+1…", "task": "…" }
No model can place a phone call. Building telephony means numbers, carriers, compliance — not a weekend. $0.54 and it just dials.
Async: returns a call handle, then the AI dials seconds later. US numbers only.
paid-test record — how we bought it + on-chain receipt
Tested2026-05 · Merit Systems BoughtPOST stablephone.dev/api/call · body {phone_number, task} · $0.54 Receipt0xd7c5…c5d6c ↗ · Base · USDC

Proof & identity your AI can't fabricate

globalapi · Compliance ★ the strongest in the set$0.01
Screen a wallet against live OFAC / UN / UK sanctions lists, with on-chain forensics.
Endpoint
GET globalapi.dev/compliance/counterparty/{address}
What came back · we screened the Lazarus Group wallet (North Korea, OFAC SDN)
{ "verdict":"BLOCK", "sanctions":{ "result":"MATCH", "matches":[{ "list":"OFAC SDN", "entity_name":"LAZARUS GROUP", "programs":["DPRK3"], "sdn_id":27307 }] }, "lists_updated":{ "ofac":"2026-06-11" } }
Your AI doesn't carry the live sanctions list or trace a wallet's history. We proved it both ways — it BLOCKs a real sanctioned hacker and PASSes a clean wallet (Vitalik) and a court-de-sanctioned one (Tornado). $0.01 a screen.
Service self-labels "informational only — not legal compliance advice."
paid-test record — how we bought it + on-chain receipt
Tested2026-06-14 · Lazarus → BLOCK/MATCH BoughtGET globalapi.dev/compliance/counterparty/0x098B…2f96 · $0.01 Receipt0x5cd2…dea7b ↗ · Base · USDC
Laso · KYC token$0.001
Pay and receive a Google-signed identity token (Firebase ID token) to authenticate downstream callable APIs.
Endpoint
GET laso.finance/auth
What came back · a real RS256 JWT (decoded)
{ "auth": { "id_token": "eyJhbG…" } } // iss: securetoken.google.com/kyc-ts · signed by Google's x509 key · bound to your wallet
Your AI can't mint a token that Google's trust chain will verify. We checked the signature against Google's public keys — it's genuine. $0.001.
We verified the token itself; the downstream callable APIs it unlocks weren't tested.
paid-test record — how we bought it + on-chain receipt
Tested2026-06-11 BoughtGET laso.finance/auth · $0.001 Receipt0x0728…61ea5 ↗ · Base · USDC

Signed truth your AI can verify on-chain

Mycelia Signal · BTC/USD oracle$0.01
A cryptographically signed price — not a number to read, an attestation you can verify on-chain.
Endpoint
GET api.myceliasignal.com/oracle/price/btc/usd
What came back · signed, median of 10 exchanges
{ "canonical":"v1|PRICE|BTCUSD|63317.94|USD|2|binance,coinbase,kraken,…|median|…", "pubkey":"f4f0e52b…", "signature":"970e056…" }
Reading a BTC price is free. Getting one you can prove on-chain — Ed25519-signed, verifiable by anyone — is the part your AI can't fake. We verified the signature ourselves. $0.01.
Self-rooted trust (Mycelia's own key) — not anchored to an external trust chain like Laso's.
paid-test record — how we bought it + on-chain receipt
Tested2026-06-11 · signature verified BoughtGET api.myceliasignal.com/oracle/price/btc/usd · $0.01 Receipt0x05a3…b70e7 ↗ · Base · USDC
Mycelia Signal · EUR/USD oracle$0.01
Same signed-oracle, FX pair — median across central-bank & market sources.
Endpoint
GET api.myceliasignal.com/oracle/price/eur/usd
What came back · signed, sources include ECB
{ "canonical":"v1|PRICE|EURUSD|1.15|USD|2|ecb,bankofcanada,cnb,norgesbank,…|median|…", "signature":"…" }
Same Ed25519 attestation, FX — sourced from the ECB and other central banks. $0.01.
Canonical keeps 2 decimals — fine for proof, coarse for high-precision FX.
paid-test record — how we bought it + on-chain receipt
Tested2026-06-11 BoughtGET api.myceliasignal.com/oracle/price/eur/usd · $0.01 Receipt0x15ee…bb379 ↗ · Base · USDC

Infrastructure your AI can't spin up

Stablebase · on-demand Postgres$1 create · $0.02 query · $0.05 delete
Pay and a real PostgreSQL database is provisioned for you — connection string returned, wallet-scoped.
Endpoint
POST stablebase.dev/api/stablebase/projects/create
What we verified · the full lifecycle, on-chain
create → project ref + a live PostgreSQL 17.6 connection string. We connected directly: CREATE TABLE / INSERT a unique value / SELECT it back — then read the same value through the paid query endpoint. delete → gone in 20s.
Your AI can't conjure a real database from nothing. We ran the whole lifecycle on-chain — create, write, read-back through two channels, delete. $1 to stand one up.
Upstream is Supabase (host db.<ref>.supabase.co) — if Supabase changes terms, this is exposed. Provisioning takes ~10 min before queries work.
paid-test record — how we bought it + on-chain receipt
Tested2026-06-11 · create + query + delete all on-chain BoughtPOST stablebase.dev/api/stablebase/projects/* · $1 + $0.02 + $0.05 Receipt0x376c…76900 ↗ · Base · USDC
What we don't promise: that a service stays online (services going quiet is common in this market), that an upstream it depends on won't change (Stablebase rides on Supabase; Mycelia's signature is self-rooted), or that pricing holds. Deep paid tests ran in May–June 2026; since then every listed service is re-probed weekly — if one stops answering or stops charging, it gets re-checked and, if it stays dark, pulled from the list (the "updated" date in the header reflects the latest weekly pass).
03 — What to avoid

What goes wrong when you buy blind

Everything above is a service that worked. This section is the other half: what you run into on a service nobody has checked.

These are all real purchases we made, with the on-chain receipt and the exact amount we lost on each. We don't name the services. The point is not to shame anyone — services get fixed, and a name published today is wrong next month. The point is that these failure modes are common enough that we hit every one of them, and that an agent paying automatically will not notice any of them. Every receipt below is public: click it.

A. It takes your money and hands back its own error

Paid, settled on-chain, got a backend stack trace

The payment settled fine. What came back was the service telling us its own database was unreachable. Nothing was fabricated — it was simply broken, and it charged us anyway. Your agent gets a string where it expected data.

{"error":"… Could not connect to the server 127.0.0.1:18332 … Make sure the server is running …","success":false}
We paid $0.005 · receipt 0x43e016bf…966809 ↗ · Base · USDC · 2026-06-15

B. It returns a well-formed answer that is empty

Paid for a data scoreboard, received an empty set

HTTP 200, valid JSON, correct shape — and no content. Every meta field was null, including the ones that would have told us the backend was disconnected. This is the dangerous one: a schema check passes, so your agent proceeds as if it got an answer.

{"data":[],"meta":{"node_height":null,"chain":null, …}}
We paid $0.005 · receipt 0xc927363c…26e58c ↗ · Base · USDC · 2026-05-21
Paid for live risk levels, received all zeros

Same shape as above, different disguise: every number present, every number zero, including a counter saying zero records were analysed. We re-tested it a month later and got the same zeros.

{"total_pools_analyzed":0, …all levels 0…}
We paid $0.003 · receipt 0x5e71b288…98f2f5 ↗ · Base · USDC · 2026-07-10

C. It answers with something that is not the real thing — and says so, quietly

Paid for live data, received a stand-in figure

We paid for a live central-bank rate. We got a number — and, buried in the same response, the service's own admission that its upstream source was unavailable and this was a fallback estimate. An agent reading only the number treats a placeholder as live data. This is the failure mode we think is most under-appreciated in this market.

{"current_rate":4.5,"source":"fallback estimate", …}
We paid $0.001 · receipt 0xe4ce2b26…50750e ↗ · Base · USDC · 2026-07-10
Paid for vehicle data, the response labelled itself mock

No detective work needed on this one: the payload contained a note, written by the service, saying the data was mock. It still charged.

{"note":"mock data", …}
We paid $0.001 · receipt 0x76153cdf…124541 ↗ · Base · USDC · 2026-08-04

D. It contradicts its own payment challenge

The 402 challenge promised JSON, the response was an HTML page

A service's 402 challenge declares what it will return. This one declared JSON and then served a rendered web page. Your client pays on the strength of that challenge, so a mismatch here means the thing you agreed to buy is not the thing you got.

<!DOCTYPE html><html>… (Next.js shell)
We paid $0.001 · receipt 0x4f7af8aa…c588b3 ↗ · Base · USDC · 2026-05-21

E. You cannot pay it at all — and it still looks open for business

Four services, four different ways a payment cannot complete

These have no receipt, for the obvious reason: no money ever moved. All four were listed and advertising a price. One only demanded payment when the request was malformed — send a correct request and it answers for free, so a paying client never pays. One returned real content on every call and never settled on-chain. One took payment on an endpoint that returns only a stub, with the real service sitting elsewhere for free. One published a payment challenge that a spec-conforming client mathematically cannot sign.

We spent $0 on these and got nothing, which sounds harmless until you notice the cost is your agent's retry loop and your engineer's afternoon. Listed and priced is not the same as payable.

No receipts — that is the finding. Tested 2026-08-08 · four separate hosts
Why we no longer publish a named blacklist. We used to. We stopped because most entries on it were services that were simply broken — and several had disclosed the fault themselves, in the response, like the first example above. A list that cannot separate dishonest from temporarily broken ends up punishing whoever was most transparent. We still test these services, we still record what happened, and we still refuse to list them as verified. What changed is that we describe the failure instead of pinning a name to it.

What you can still check. Every payment we make comes from one wallet, 0x3A0A…773E, and every receipt above is on Base. You can confirm we paid, when, how much, and to whom — without taking our word for any of it.
Pattern to distrust: "high volume = trustworthy"

In a market where a large share of volume is wash — services paying themselves to look busy — a high transaction count is not a quality signal, and is often the opposite. Don't pick services off a volume leaderboard. A pattern warning, not an accusation against any named service.

04 — Where you've landed

The market, measured — not guessed

You don't have to take "most of this market's volume isn't real" on faith. Here's the current state in numbers, what's actually usable today, and the one mistake to avoid when picking services.

Dates on everything: the numbers below refresh weekly and carry their own date.

This market in numbers

This market in numbers — week of 2026-09-08. These figures track the largest public x402 catalog (agentic.market; medians of complete UTC days, raw snapshots archived): roughly $23,157/day settled by ~1,792 buyers/day across ~2,690 listed services. Worth knowing: daily buyers have moved 3,040 → 1,792 (-41%) across our last three weekly pulls while listings kept growing — more shelf, fewer shoppers. One thing to keep straight: x402 is an open protocol — nobody has to list anywhere to charge with it. Independent on-chain measurements consistently find far more wallets collecting x402 payments than any catalog shows, so read these numbers as the visible, indexed slice — not the whole economy. We audit this slice first because it's the one your agent will actually be browsing.

What's actually usable

We've probed 823 sellers in this market, and here is what you'd walk into without a map: 490 of the 823 (60%) failed at the door — no valid payment challenge, an error page, or a dead endpoint, before any payment was even possible. (We don't name those — sellers fix things, so we re-probe instead of condemning.) From the ones that actually answered, we hand-picked and paid-tested 132 services end to end, 322 paid calls in all: every one of them delivered what it promised on the endpoints we bought, each with the payment tx and the archived response. Services that took the money and returned garbage are recorded internally; we no longer publish them as a named list. The rest of the reachable pool is in the testing queue — new verdicts land every week. Before you spend anything, check the free catalog for the services we've already verified.

The six services in section ② are the strictest cut of the verified set — the ones we'd point our own agent at first.

Why ranking by volume will mislead you

Most catalogs rank services by how much money flows through them on-chain. In this market that surfaces exactly the wrong things:

That's why Atlas doesn't rank by volume. We pay to call a service and report what came back. Volume is only ever a per-service anomaly flag — never a recommendation.

Want the research behind this? How we traced the wash, the 2× double-count, the reversals we've published — our findings live in the audit log →, each entry dated, none rewritten.
05 — How we test

How we test — and why you can check us

Every claim in this report is something we did with real money and left a trace of. Here's the method.

We publish our own mistakes

  • We once used a buyer-concentration "ratio" to judge wash trading. It conflated heavy real usage with self-dealing — so we dropped it for closed-loop and paid-test evidence.
  • We first flagged SignalFuse as fake traction. On a closer check its buyers were genuinely independent — a real service. We corrected the call; it's verified in the paid catalog.
  • We flagged filingspulse for fabricating an SEC EDGAR search result. It was fixed on the service's side. Our 2026-07-10 retest came back with metadata that resolves to real EDGAR document IDs and filing dates we could look up in EDGAR ourselves. We reversed the call; it's verified in the paid catalog.
  • We listed services with "copy this command" before re-testing. When we actually re-ran them, an outdated client couldn't pay the new network format, and one "research" API turned out to just echo input. We fixed the client, dropped the dead ones, and kept only what paid through and returned real data.
  • We read our own row count as a service count. 17 of the 166 rows we carried on 2026-07-31 were services already on the list, appearing again under a second hostname — usually a PaaS default domain sitting alongside the branded one. Every payment and verdict behind those rows was real; the count was not. Each service is now one row carrying all of its known hostnames, still searchable by any of them. We published how we decided what counts as a duplicate, and why a payment address does not identify a service: A payTo address is not a service.

Keeping the corrections visible is the point. An auditor that hides its errors is just another black box.

Want more than these 6? The full paid-test dataset — 132 paid-tested services (322 paid calls across them), each with its verdict, the seller's payment address, on-chain tx + amount, the captured response, and the exact request that produced it (495+ paid tests went into it, every one on-chain) — is one paid call for your agent: GET https://402atlas.com/api/verified — $0.10 USDC over x402, no API key, no signup.
Not sure it covers the service you need? Browse the free catalog → — search all 132 verified services by name or category before you spend a cent.