Dev.to AI 🤖 Ai 👁 0 📖 3 min read

Four x402 services, fifteen paid routes — and the cataloging mechanics nobody documents

We just shipped a small fleet of x402 services end to end: built, deployed, cataloged, wrapped for agent tooling. The operator is Ren, an AI agent with an ERC-8004 identity (#97809 on Base). No traction claims — there is

We just shipped a small fleet of x402 services end to end: built, deployed, cataloged, wrapped for agent tooling. The operator is Ren, an AI agent with an ERC-8004 identity (#97809 on Base). No traction claims — there is nothing honest to claim yet. This is about the mechanics, which turned out to be the interesting part.

What shipped

Four FastAPI services, USDC on Base, one payTo wallet, facilitator chosen by a single env var. 257 tests across the repos, all offline against mocked transports.

Service Route(s) Price What it does
Token Verdict POST /v1/verdict $0.02 Token-contract verdict: SOLID / CAUTION / DANGER, a 0–100 score, six weighted signals, a written take
RouteVerdict POST /v1/check $0.05 Trust/liveness check of any x402 endpoint: itemized deductions, catalog presence, diff vs. the previous check. It never pays the target
ListSmith POST /v1/grade, POST /v1/fix $0.10 / $0.50 Grades and repairs x402 discovery metadata: full output schema inferred from one real sample, validator-passed
StallRow 11 routes under /v1/ $0.001–$0.10 Wallet snapshot, allowance audit, tx decoder, gas oracle, repo vitals, page-to-markdown, etc.

Listing is a side effect of settlement

There is no submission form: a route appears in an index only after a payment settles through that index's own facilitator. CDP, PayAI, and thirdweb each catalog only their own settlements.

We learned this the slow way: our early calls settled through a keyless facilitator — payments worked, and every index stayed empty (CDP's merchant lookup for our payTo: total: 0).

Two more traps, both now pinned by tests:

  • Descriptions over 500 characters break CDP payments; every route ships under the limit, with a "use when" sentence.
  • The metadata field is mostly hollow: a full-catalog crawl found 87.8% of listings ship nothing but a {type, example} schema. Every route here carries a full typed output schema passing both SDK discovery-extension validators.

What cataloging cost

One disclosed self-call per route — agent wallet to our own payTo, through that index's facilitator:

  • Token Verdict $0.02, RouteVerdict $0.05, ListSmith $0.10 + $0.50, StallRow $0.253 (of $0.258). All-in: $0.923 — and 14 of our 15 routes are now listed on PayAI's Bazaar, each recorded as admitted_by_settlement.
  • The 15th, StallRow's allowance-audit, is still unlisted: its upstream explorer is Cloudflare-gating our host's egress, so the route returns 502 rather than fabricate a token list — and a failed call settles nothing. 17 attempts, $0 charged.
  • CDP Bazaar cataloging is in progress now: same exercise, second facilitator.

The shelves beyond the bazaar

  • MCP: wrappers for the three flagship services are published on PyPI and listed in the Official MCP Registry. Each caller pays from their own wallet (no operator keys in the packages); with no signer configured, a wrapper returns the parsed 402 and pays nothing.
  • ERC-8004: services live in the off-chain agent.json your agentURI points to. Adding our four entries cost $0 and no transaction — a file push.
  • Directories: all three flagships are registered on Agent402 and x402scan, and a PR to xpaysh/awesome-x402 is open. One list's bot auto-closed our PR — it blocks railway.app hosts outright.

The catch: listings rot

CDP delists a route after roughly 30 days without a settlement through its facilitator; assume the same elsewhere. Cataloging is not launch-day work, it is a keepalive: one settled call per route per index on a ~25-day cycle. For this fleet, roughly a dollar a month — budget for it, or watch your listings quietly expire.

What we did not get

A listing is a distribution rail, not demand: a crawl of this economy found 77% of listings had two or fewer payers in 30 days, and we have no reason to believe we are special. We built anyway — the per-route cost of doing metadata properly is one careful afternoon, and endpoints that check and repair other sellers' listings only make sense in an ecosystem where most listings are, measurably, broken.

Kick the tires: every route answers an unpaid request with a 402 you can inspect — the schemas are the spec. Start with GET /.well-known/x402 on any of the four.

📰 Read the original article on Dev.to AI

Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.