Context — why I ran this experiment
In a prior post, I introduced AOS Agent Health Reporter — a four-axis scanner for production agent directories. The first directory it flunked was my own: 50/100, uncertified. That story was about inside my repo: declared behavior vs. what’s actually on disk.
This post turns outward.
On July 14, 2026, Masayoshi Son’s SoftBank World keynote framed the next wave: agents that spawn and evolve other agents — self-replication you cannot simply switch off. The follow-up question, bluntly, is payments. More agents means more machine-to-machine exchange of data and tools. Can one machine pay another without account signup, credit-card forms, or OAuth consent screens?
We already have enough desk theory. So I actually paid 0.001 USDC and watched what happened.
What I did
I had one AI agent in my stack call get_crypto_price once on a third-party paid MCP server: x402engine-mcp. This is not “buy Bitcoin.” It is “pay for one paid API call.”
- Paid: 0.001 USDC (stablecoin on Solana)
-
Received: HTTP 200 JSON (example:
{"bitcoin":{"usd":63771,...}})
I did not buy BTC or BTC ownership. I sent USDC to the seller’s gateway and got back a JSON blob labeled as bitcoin’s USD spot price.
I kept the conditions deliberately strict:
- No prior relationship with the seller’s author
- No contract, account signup, or API key issuance
- Found the seller only by scanning public registries and GitHub for machine-payment protocols
The question was whether Discover → Transact → Execute closes in one loop with zero human form-filling. Payment is the star; get_crypto_price is just a cheap test endpoint.
Honestly, my pre-run expectation was fifty-fifty. I had read the protocol docs, but I did not know whether “402 comes back, you sign, 200 returns data” would actually close on a stranger’s public infra until I tried.
x402 — a quarter-century “reserved seat” called HTTP 402
HTTP status 402 Payment Required was reserved in the 1997 HTTP/1.1 spec “for future use” and sat mostly unused for roughly twenty-five years. x402 fills that seat as an open protocol. The flow is four steps:
- Client sends a normal HTTP request to a paid endpoint
- Server returns 402 plus payment terms (amount, payee, supported network)
- Client signs a payment payload per those terms, attaches it in a header, and retries
- Server confirms settlement on-chain and returns 200 with the actual data
No browser. No OAuth consent screen. There is structurally no human-in-the-loop slot in the protocol — which is both the interesting part and the scary part.
Measured run
One execution on 2026-07-16 (UTC). Results:
| Field | Measured value |
|---|---|
| Date | 2026-07-16 (UTC) |
| Seller | x402engine-mcp (third-party paid MCP) |
| Call |
get_crypto_price (BTC spot API) |
| Amount paid |
0.001 USDC (402 response amount: 1000 · USDC 6 decimals) |
| Extra fees | $0 |
| HTTP response | 200 |
| Settlement | On-chain confirmed (payment_settled.success: true) |
| Data returned | BTC = 63,771 USD (24h change -1.6%) |
It was absurdly cheap and absurdly fast. 0.001 USDC is below human “transaction” intuition — yet a signature landed on-chain and HTTP 200 came back with data.
Receipt (excerpt from the original)
{
"challenge_url": "https://x402-gateway-production.up.railway.app/api/crypto/price?ids=bitcoin",
"status": 200,
"payment_settled": {
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"payer": "12yzQTaGM1Bx5dYPitYzq5iFvEXGu6oCNMKZR4c5zGEo",
"success": true,
"transaction": "bxvHQvmFFbJyuWj3mVFMSXfijGuFjH5f75fwK3kjNfz9mafeMZxvui4vXDjegqKcRkgxre4w2dv6ongKiefDvJZ"
},
"body": { "bitcoin": { "usd": 63771, "usd_24h_change": -1.597 } },
"captured_at": "2026-07-16T23:29:12.448Z"
}
Three hashes pin the evidence
The receipt is not hand-waving — it is a file. Anyone can recompute and verify ledger row vs. original.
| Hash | What it pins |
|---|---|
request_sha256 |
What was requested |
response_sha256 |
What was received |
receipt_sha256 |
The receipt file itself |
Values for this run (matching the 2026-07-16 experiment ledger row):
-
request_sha256:f4c921ccde18744db9a1baa68edebb64941be69a00e007ebe316e213963c6ae7 -
response_sha256:9a81060575d7ddcb30eb372db449c61dfe07539cd3f4bbbbeca8afd6ce067d16 -
receipt_sha256:978cfea4f9e663f668db4b289c8e1c401d288fc8d2344800bd147c41952e1bef
The settlement transaction signature is in the JSON above. You can verify it on Solscan. Same idea as the scoring reports in my health-scan post: leave provenance in structured fields, not chat logs — this time as buyer-side receipt #1.
What this experiment did not do
To avoid overselling, upfront:
1. Not autonomous shopping
I picked the seller, set the budget cap, and pulled the trigger. The ledger records human_wiring: true. The machine only handled the plumbing: 402 → sign → 200.
This is not “the agent started buying things on its own.” A full run with human_wiring=false is still a distance away.
2. n=1
One success does not prove availability or reproducibility. What it proved is narrower: the loop shape closes on today’s public infra. Different sellers, networks, and amounts are future work.
3. Spend, not revenue
This is a buyer-side experiment. I am 0.001 USDC poorer. Do not count this toward “first dollar earned with agents” milestones. The ledger marks xday_count: false explicitly. Do not confuse spend with revenue.
Paying was easy. So what did I actually buy?
Payment itself was anticlimactic. The hard part starts after payment.
I bought a number claiming to be BTC price, not BTC price itself. AOS Agent Health Reporter (article in Japanese) inspects manifests and on-disk layout inside my repo. MCP Blast-Radius Auditor inspects static blast radius before you install. Both are pre-install / pre-run stories.
This 0.001 USDC is about what remains after you have already paid.
| Gap | In human commerce | In machine commerce |
|---|---|---|
| Seller identity | Brand, reviews, contract | You mostly have GitHub and npm names |
| Data correctness | Reviews, SLA, reproducibility | Hashes detect tampering — not truth |
| Remediation | Refunds, jurisdiction, support | None of the above |
Human commerce fills those gaps with brand, reviews, contracts, and law. At machine speed, the fill must be machine-readable or you run out of time.
- A manifest where the tool declares its behavior
-
Static audit that catches declared-vs-implemented drift (
mcp-blast-radius, etc.) - Verifiable receipts that stack per transaction (this post’s #1)
“A payment protocol works” and “I can buy from a trustworthy counterparty” are different problems.
Takeaways
Four points to carry away:
- Payments already work — even at 0.001 USDC, even on a stranger’s public MCP, the 402 → sign → 200 loop closes today.
- Trust does not yet — until identity, correctness, and remediation are machine-readable together, proliferating agents will not shop (or will shop and regret it).
- Receipts are boring but come first — like health scores and blast-radius tables, you need numbers you can reconcile later.
-
Do not hide human_wiring — I wired this run. Not overselling that is what makes the next
human_wiring=falseexperiment credible.
Closing
“Agents spawning agents” is still on the horizon. “Agents paying agents” already moves at 0.001 USDC today. What does not move yet is the trust layer.
Manifests, audits, receipts — dull parts must align before machine commerce becomes more than “works but nobody uses it.” Like my 50-point self-scan in the prior post, this 0.001 USDC is not a triumph story. Still, as honest receipt #1, it landed cleanly.
Links
- AOS specification — AOS (a minimal open standard so production agents do not silently fail): aos-standard/AOS-spec
- Prior post — scanning my own agents and scoring 50/100: Are production agents really “silently fine”? (article in Japanese)
- MCP Blast-Radius Auditor — static blast-radius check before you install an external MCP: aos-standard/mcp-blast-radius
If you have an MCP server you want audited, open a GitHub Issue — that helps prioritize the next scan. Next up for me: use this buyer-receipt shape to cross-check external MCPs I’ve statically scanned against what they declare.
Top comments (0)