Circle Agent Marketplace catalog โ€” snapshot, 11 September 2026

A single measurement of the Circle x402 Discovery catalog. Composition only.

This is a one-off measurement taken on 2026-09-11. It is not maintained.
Nothing here has been re-checked since. Prices, endpoints and payout addresses change without notice. Treat every figure as “was true on 2026-09-11”, never as “is true”. The method is below and the source is a public API โ€” re-run it rather than cite it.

How many x402 sellers are listed, and on which networks

listingsaccepts rowsdistinct URLshostsnetworkspayout addrs
1,1624,215 1,09448 16128

A listing may accept payment on several networks, so accepts rows exceed listings. 1,094 distinct URLs across just 48 hosts โ€” this catalog is more concentrated than its listing count suggests.

๐Ÿšจ The siwx=false trap โ€” read this before re-running

1,162 listings direct from the API. The CLI was not re-run on this date, so the size of the gap today is not measured.

What IS verified today: 792 testnet rows are present in this harvest (Base Sepolia 396, Polygon Amoy 396), which is what a CLI-filtered read would have removed entirely.

When the gap was last measured, on 2026-08-27, it was 1,003 direct vs 838 through the CLI โ€” 165 hidden, every testnet row. That figure belongs to that date and is not restated as today's.

`circle services search` silently appends siwx=false. It is not in the CLI's --help; it is visible only by reading the CLI's own dist/index.js. The CLI was NOT re-run on this date, so the size of the gap today is unknown; only its existence is re-confirmed, by the testnet rows above being present at all. Fetch the API directly.

This is on the page rather than in a footnote because a count published without it is not reproducible: a reader who re-runs the obvious way gets a different denominator and no warning that it changed.

Which networks the Circle agent registry covers

networkCAIP-2accepts rows
Baseeip155:84531,327
Solana mainnetsolana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp823
Polygoneip155:137555
Base Sepoliaeip155:84532396
Polygon Amoyeip155:80002396
Solana devnetsolana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1264
Avalancheeip155:43114108
Arbitrumeip155:4216169
Ethereumeip155:166
Optimismeip155:1066
Unichaineip155:13066
X Layereip155:19631
Soniceip155:14612
World Chaineip155:48012
Seieip155:132912
HyperEVMeip155:99912

14 EVM chains and 2 Solana clusters. Testnet rows total 792 โ€” first-class in this catalog, and exactly what the CLI hides.

Is Arc in the catalog?

No โ€” 0 rows. No accepts[] entry names an Arc network. Searched the full 4,215-row set, not a filtered view. 15 days and 159 listings later, still zero.

Where the catalog actually lives

hostaccepts rows
x402.quicknode.com2,112
api.aisa.one394
np.orthogonal.com293
x402.api.agentmail.to199
api.arkm.com178

One host carries 50.1% of all rows; the top five carry 75.3%.

What this snapshot does NOT claim

fieldstatewhy
livenessnot-measuredrequires GET against 1,094 third-party URLs across 48 hosts; those calls have not been made
advertisedVsLivePricenot-measuredsame 1,094 calls; a listing's price and its live 402 have not been compared
payoutAddressOwnershipnot-measured14 EVM chains readable in principle; 1,087 of 4,215 rows are Solana and need a different client
upgradeabilitynot-measuredEIP-1967 has no Solana equivalent โ€” the question differs per ecosystem, it is not one check
serviceQualitycould-not-checkno on-chain or catalog signal distinguishes a service that works from one that does not
changeBetweenSnapshotspublished-separatelywhat differs between two readings is computed and published at /snapshot/diff, led by which offers name a different payout address. It is a separate artifact because a comparison can be refused (a filtered reading has a different denominator) while both snapshots it spans remain perfectly sound

Each is listed rather than omitted. A blank would read as “fine”; these are open.

Method: how to re-run this yourself

Fetch https://api.circle.com/v2/x402/discovery/resources?limit=100&offset=N directly, limit=100, paginating until a short page. Do not use the CLI โ€” see the trap above. Then verify the harvest was unfiltered by checking that Base Sepolia and Polygon Amoy rows are present; if either is zero, the fetch was filtered and the denominator is wrong.

Drift while reading: CHECKED, and present: every one of the 12 pages reported total=1162, matching the 1,162 listings actually collected. So unlike 2026-08-27, this measurement can say the index did NOT drift while it was being read.

The machine-readable form of everything above: /snapshot/2026-09-11.json

All snapshots

datelistingsaccepts rowshostsArc rows
2026-08-27 1,0033,808 250 JSON
2026-09-11 (this one) 1,1624,215 480 JSON

Each was harvested separately and none has been edited since.

What differs between two of them, including which offers now name a different payout address: 2026-08-27..2026-09-11