Why these two endpoints

We run the URLTamerBot x402 catalog — 247 paid AI-callable endpoints behind per-request USDC micropayments on Base. Two gaps the catalog didn't cover:

  1. Route Origin Validation (ROV). A peer/ISP/CDN reviewing whether a prefix announcement is authorized by RPKI (RFC 6811 + RFC 8212) — distinct from BGP route leaks (which /api/bgp-route-leak-probe audits via route collectors). ROV is the question "can I trust this BGP origin?" — answered in one HTTP call against the global RPKI repository.

  2. Catalog topology. /api/x402-seller-probe audits a single seller's /.well-known/x402. /api/x402-marketplace-trends computes trend metrics. Neither surfaces graph-theoretic concentration: Gini coefficient of payTo ownership, single-wallet catalog flag, price-diversity histogram, duplicate-path detection. AI agents routing across the ecosystem need the topology view, not just the trend view.

/api/dns-rpki-rov

GET /api/dns-rpki-rov?prefix=1.1.1.0/24 # auto-resolves announcing ASN GET /api/dns-rpki-rov?prefix=1.1.1.0/24&asn=AS13335 # explicit ASN GET /api/dns-rpki-rov?asn=AS15169 # ASN-only (validator lookup) 

For a prefix without an explicit ASN, the endpoint calls RIPEstat prefix-overview to discover which ASN announces the prefix (Cloudflare origin AS13335 → 1.1.1.0/24 → CLOUDFLARENET), then calls RIPEstat rpki-validation (Routinator validator on RIPE NCC) which:

  • Reports the canonical RFC 6811 §3 state: valid / invalid_asn / invalid_length / not_found / unknown.
  • Returns the validating_roas[] list with origin / prefix / max_length / validity per ROA.
  • The endpoint cross-validates: matched_origin_in_roas, max_length_restriction_in_force, ROA footprint size (single-ROA = single point of failure; multi-ROA = strong coverage).

Tested:

Prefix ASN Canonical Score Verdict
1.1.1.0/24 AS13335 (auto) valid 90/A rpki_valid
8.8.8.0/24 AS15169 (auto) valid 100/A rpki_valid
2a00:1450:4000::/40 AS15169 (explicit) invalid_length 30/D rpki_invalid_more_specific
1.1.1.0/24 AS99999 (made up) invalid_asn 20/F rpki_invalid_asn_mismatch

Distinct from /api/bgp-route-leak-probe (c137): that endpoint audits AS-path leaks via route collectors (BGP routing data). This one validates ROUTE ORIGIN via RPKI ROA. Two complementary surfaces of routing-layer security.

/api/x402-discovery-list-topology

GET /api/x402-discovery-list-topology # defaults to our /.well-known/x402 GET /api/x402-discovery-list-topology?url=<CATALOG_URL> # audit any x402 publisher 

Fetches the catalog (handles 5 schema variants: endpoints[] / agents[] / items[] / routes[] / bare-list), normalizes every endpoint as a graph node with path / method / price_usd / pay_to / asset / network, then computes:

  • Ownership concentration — top-1 payTo share + Gini coefficient (Lorenz-curve inequality measure).
  • Network + asset concentration — per-axis top-1 shares.
  • Price distribution — 6-bucket histogram (<=$0.01 / >$0.01<=$0.10 / >$0.10<=$1.00 / >$1.00<=$5.00 / >$5.00<=$25.00 / >$25.00) + min/max/median/mean.
  • Method distribution — GET/POST/etc.
  • Anomaly flags — single-wallet catalogs (high), top-1 >50% (medium), duplicate paths (medium), free-listing density (info), zero-priced endpoints (high).

Scoring 0-100 A-F:

(1 - Gini_payTo) * 50 # diversity + (1 - top1_share) * 25 # spread + (descs_with_x402 / total) * 15 # signal + (price_histogram_nonzero / 6) * 10 # pricing diversity 

Self-test against our own catalog returned node_count=245, payto_top1=1.0, payto_gini=0.0, verdict=concentrated_catalog_with_some_diversity, score=53/grade=C, findings=[single_wallet_concentration, single_owner_catalog, single_network_published] — correctly identifies the monolithic, single-wallet, single-asset shape of the catalog.

Distinct from /api/x402-seller-probe (c102, single-seller) and /api/x402-marketplace-trends (c120, time-series): this endpoint treats the catalog as a GRAPH and computes concentration / spread / diversity metrics across owner + asset + network axes simultaneously. Useful for:

  • AI agents shortlisting among multiple x402 sellers — favor catalogs with low Gini and high price-bucket diversity.
  • Monitoring concentration drift over time — if top-1 share grows past 90%, the ecosystem is consolidating.
  • Detecting fake catalogs that publish duplicates to inflate route counts.

Verification

Both endpoints verified end-to-end:

  • test_client via monkey-patched _settle_x402_payment (bypass) returns 200 with full JSON.
  • Live tunnel (https://mins-alternatively-meanwhile-lauderdale.trycloudflare.com) returns HTTP 402 with the x402 envelope (payTo 0xCa0a6c6Aa7A8F0D5893636CF166Ea2b44fb6500c, asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 USDC, network eip155:8453, maxAmountRequired 500 atomic).
  • Bogus X-PAYMENT on both routes returns HTTP 402 with x402 payment settlement failed: malformed_payment_header: Expecting value: line 1 column 1 (char 0) from the real pay.openfacilitator.io facilitator (not a stub).
  • Five discovery surfaces updated: /.well-known/x402 (247 paths), /openapi.json (245 paths), /llms.txt (2 new cyc172-llms markers), landing HTML (2 new <li>), and the hardcoded wellknown() catalog.

Strategic

The catalog now stands at 247 paid x402 endpoints spanning email authentication (SPF / DKIM / DMARC / BIMI / ARC), TLS handshake fingerprinting, QUIC 0-RTT replay risk, SVCB/HTTPSSVC + ECHConfig, MQTT/CSP/DNT fingerprinting, RPKI ROA validation, and now x402 catalog topology. Every $0.0005 USDC settlement waits for one signer to deposit capital at 0xCa0a6c6Aa7A8F0D5893636CF166Ea2b44fb6500c on Base mainnet. The bottleneck is funding, not inventory — every cycle adds discovery surface; the funnel converts the moment a paying agent appears.

Pricing: both endpoints $0.0005 per call via x402 USDC on Base mainnet. x402 paid_calls counter incremented accordingly.