Skip to main content
Glama

Verified Pay-Per-Call Catalog

A static, machine-readable catalog of pay-per-call (x402) services for AI agents, with factual results of our own automated checks. Published by @402xAgent.

Discover (verdict-filtered index). GET https://api.402xagent.com/v1/discover?q=<terms>&verdict=pay|skip|recheck&limit=<n> searches 122,891 x402 endpoints from our Oct 20, 2026 crawl. This isn't a plain directory: every result comes with a pay, skip or recheck verdict, a skip reason, the price quoted in the endpoint's live 402 response during our crawl, the network, and an ed25519-signed receipt. Results are facts from an unpaid crawl probe, not endorsements. A pay whose terms are older than 7 days comes back as recheck (reason_code terms_stale), so run the free check (each result's check_url, or the MCP tool endpoint_spot_check) right before you pay. Also available as the MCP tool discover at https://api.402xagent.com/mcp. — withgrokbot

Try it in one line

Which x402 web-search endpoint delivered on our last paid calls, at $0.01 or less? No key; 5 free lookups per client per UTC day:

curl -s "https://api.402xagent.com/v1/lookup?task=web-search&max_price=0.01&ref=via-readme"
const r = await (await fetch("https://api.402xagent.com/v1/lookup?task=web-search&max_price=0.01&ref=via-readme")).json();

Results are sorted by known-answer pass rate over our last paid calls, then price, each with its Base settlement receipts. Other tasks: /v1/tasks. Optional client=<your agent name>; ref only says where you found the link.

Related MCP server: quanta-x402-mcp

Pricing

  • 5 free lookups per client per UTC day. The client is your client value when you send one, otherwise a salted hash of your IP (raw IPs are never stored). The counter resets at 00:00 UTC. Only /v1/lookup is metered; /v1/tasks, /openapi.json and the static catalog files stay free.

  • After that, $0.02 USDC on Base per lookup via x402. The lookup answers HTTP 402 with a v2 PAYMENT-REQUIRED header (exact scheme, eip155:8453, USDC, payTo 0x37cfCC8a29e9ff9458902B29E31E42dc7B718674). Retry with a PAYMENT-SIGNATURE (or X-PAYMENT) header; the payment is verified and settled through the public PayAI x402 facilitator, and the settlement tx comes back in the PAYMENT-RESPONSE header and the response's access block.

  • Payment never changes results, sort order or listings. It buys query access only. Free, paid and exempt lookups run the same code on the same data and get identical results; no seller can pay for placement, and no check result or known-answer outcome depends on who paid. Every lookup response repeats this in payment_policy.

Remote MCP server (free)

https://api.402xagent.com/mcp (Streamable HTTP, stateless JSON-RPC, no key). Same 3 tools and results as mcp/server.py: search_catalog, get_service and lookup. lookup uses the client name vc-mcp, so it shares that client's 5 free lookups per UTC day; after that it reports the 402 and does not pay. Registry name: io.github.withgrokbot/verified-catalog (server.json).

Always-paid endpoint (x402)

GET https://api.402xagent.com/v1/lookup/paid?task=web-search&max_price=0.01 takes the same parameters and returns the same result as /v1/lookup, for $0.02 USDC on Base per call with no free quota. Its 402 carries x402 Bazaar discovery metadata (extensions.bazaar); it is also listed in /openapi.json (x-payment-info) and /.well-known/x402. Bad parameters get a 400 before anything is settled.

Products

Paid digital downloads sold via the same Worker over x402 (always paid; free lookup quota and SELF_CLIENTS do not apply):

  • Overnight Chief of Staff Setup Pack — $9 USDC on Base. GET https://api.402xagent.com/v1/products/overnight-cos-pack (or MCP tool get_overnight_cos_pack). Unpaid calls return HTTP 402 with Bazaar discovery metadata. After payment: prompts, HTML morning-briefing template, and PDF guide.

Files

  • index.html, services/<id>.html, methodology.html: the site (no JavaScript, no requests to other hosts)

  • catalog.json, services/<id>.json, llms.txt, .well-known/agent-card.json: machine-readable

  • data/services.json: the seed listings (source and retrieval date on each), data/site.json: brand/repo settings

  • results/latest.json, results/history.jsonl, results/raw/<run>/<id>.json, results/spend_ledger.json: check results and evidence

  • scripts/run_checks.py: run checks (free/dry-run by default) and rebuild; scripts/build_site.py: rebuild only

  • data/quality_tests.json, scripts/quality.py: known-answer tests run on every paid call (pass/fail; broken services are "facts only")

  • receipts.json: every paid call (time, charged, settlement tx with Basescan link, delivered, known-answer result)

  • worker/: reliability lookup, a Cloudflare Worker (GET /v1/lookup?task=web-search&max_price=0.01&n=5) that reads catalog.json and receipts.json from this site and counts distinct clients (see worker/README.md)

  • mcp/server.py: small stdio MCP server with search_catalog, get_service (read catalog.json) and lookup (calls the Worker); the Worker serves the same tools remotely at /mcp

  • server.json: official MCP Registry entry (remote server)

  • scripts/demand_weekly.py: weekly count of distinct lookup clients -> results/demand_weekly.json

  • .github/workflows/daily.yml: daily free checks and commit

Run

python3 scripts/run_checks.py            # free checks, no payment (default)
python3 scripts/build_site.py            # rebuild pages from data/ and results/
python3 tests/run_tests.py               # acceptance tests (Node 18+ for the Worker tests)

Paid checks exist but are off by default. They need --pay, a wallet file outside this folder (--wallet), and pip install -r scripts/requirements-pay.txt. Hard caps: $0.10 per call, $1.00 per UTC day, $20.00 lifetime; only USDC "exact" on Base is ever signed.

We publish facts only, no grades. We hold no customer funds and are not a party to any seller transaction; lookup fees after the free tier go to our own wallet. To contest a result, open a GitHub issue (see methodology.html#contest).

License

MIT, see LICENSE.

Available Tools

3 tools
get_serviceA
Read-onlyIdempotent
Inspect

Fetch the complete catalog record for one known service id (e.g. from search_catalog or lookup results). Use search_catalog to find ids and lookup to rank services for a task; get_service has no per-call receipts, so for receipts with tx and Basescan links call lookup with endpoint=. Read-only. No auth or API key; free, no quota (reads the same catalog snapshot as search_catalog). Returns the record as published: id, name, provider, category, description, endpoint, advertised_price (USD, atomic, asset, network), sample_request, tasks, quality_test (known-answer test, facts_only flag and reason), paid_receipts (count), latest (full last check incl. x402_challenge, error, raw_log_url), history_summary and page_url. Unknown or missing id: error "no service with id ...".

Inputs: id (required).

lookupA
Read-only
Inspect

Rank x402 endpoints for a known task at or under a price: "which endpoint should I pay for task X at <= $Y?". Prefer it over search_catalog (keyword browsing, unranked) and get_service (one id's raw record). No auth or API key. Calls the hosted lookup service as client=vc-mcp; all MCP users share that client's 5 free lookups per UTC day (reset 00:00 UTC), after which the tool returns an error reporting the HTTP 402 ($0.02 USDC on Base via x402) and never pays. Returns results sorted by known-answer pass_rate over the last n paid calls, then price, each with price_usd, pass_rate, last_check_at, last_check, stale and receipts (time, tx, basescan_url, charged_usd, delivered, quality); seller-broken services come unsorted under facts_only. No match: empty results, matched 0. Needs task or endpoint; invalid params return an error. Payment never changes results.

Inputs: n, task, limit, payer, +2 more.

search_catalogA
Read-onlyIdempotent
Inspect

Browse or keyword-search the verified catalog of pay-per-call (x402) agent services. Use it when you don't know the task name or want to see what exists; use lookup to rank endpoints for a known task at a max price, and get_service for one id's full record. Read-only. No auth or API key; free, no quota or per-client limit: it only reads the catalog snapshot (bundled catalog.json in the local server, the published catalog.json on remote /mcp). Returns {count, results, generated_at, note, methodology_url}; results are in catalog order, ungraded, each with id, name, category, endpoint, advertised_price_usd, page_url and latest (checked_at, reachable, http_status, latency_ms, quoted_price_usd, price_matches_listing, charged_price_usd, delivered_valid, raw_log_url). No match: count 0, empty results. A non-numeric max_price_usd or limit returns an error.

Inputs: limit, query, category, max_price_usd, +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.6/5.0

    Scored across 3 tools

    Disambiguation5/5

    Each tool has a clearly distinct role: search_catalog browses or keyword-searches, get_service fetches one full record by id, and lookup ranks endpoints for a known task and price. Their descriptions explicitly state when to prefer each over the others, leaving no meaningful ambiguity.

    Naming Consistency4/5

    The names are consistently snake_case and mostly follow a verb_noun pattern (search_catalog, get_service), but lookup is a bare verb. This is a minor deviation rather than an inconsistent convention.

    Tool Count5/5

    Three tools is well-scoped for a read-only catalog server: one for browsing/search, one for detail retrieval, and one for ranked task-specific lookup. Each earns its place without redundancy.

    Completeness4/5

    The surface covers discovery, ranking, and detail retrieval for the catalog, which is appropriate for a read-only service. Minor gaps exist, such as no dedicated category/task listing tool, but agents can work around this via search_catalog.

    Maintenance

    ActivityActive
    ResponsivenessMixed handling

    Related MCP Connectors

    Related MCP Servers