# METHOD — Coinbase x402 Bazaar discovery census (2026-10-05)

## Source

- Public endpoint: `GET https://api.cdp.coinbase.com/platform/v2/x402/discovery/resources`
- No authentication, no payment, no state mutation.
- The endpoint is Coinbase's view of x402 discovery (the "Bazaar"). It is not the universe of x402 services — a service that publishes `/.well-known/x402.json` but does not register with the Bazaar is absent.

## Pagination

- Page size `limit=200`, iterated by `offset=0, 200, 400 ...` until the last page returned fewer than `limit` items.
- Polite rate: 1 request/second between pages.
- No retries. A single page error aborts the snapshot and leaves no partial state file.
- Fetcher user agent: `onchainagentintel-census-bot/0708 (+https://onchainagentintel.io/)`.

## Fetch window

- Snapshot start: `2026-10-05T17:13:57.801Z` (from `snapshot_meta.json`).
- Snapshot end: `2026-10-05T17:21:19.486Z`.
- Pages fetched: 173. Items retrieved: 34,587. `pagination.total` at page 1: 34,587. `truncated: false`.
- Raw payload sha256: `ee6839f8fca914bea208f43249d36d84658170861e523105e213712d585f829e` (215,125,324 bytes). Not committed to the public repository on size grounds; held locally in `data/x402-bazaar-census-2026-10/raw.json` for reproducibility. The public distribution is the per-resource CSV + the aggregate `summary.json`.

## Price inference (USD)

Each listing's `accepts[]` entries declare `maxAmountRequired` as a base-unit integer plus an `asset` address and optional `extra.name` / `extra.decimals` fields. We convert to USD only when we can confidently map to a stablecoin:

1. If `extra.name` matches one of `USD Coin / USDC / Tether USD / USDT / USD₮ / USDC.e / USDC0 / PYUSD` (case-insensitive) **or** `extra.decimals` is explicitly set, convert `maxAmountRequired / 10**decimals`.
2. If the stablecoin name path fires without an `extra.decimals` field, use decimals = 6 (USDC/USDT convention). This is the dominant case.
3. Otherwise `min_price_usd` is left blank.
4. Each item's `min_price_usd` is the minimum USD value across its own `accepts[]` entries — the cheapest offer the listing exposes. The resulting CSV column is deliberately conservative: it is the price a cost-sensitive consumer would prefer, not necessarily the price actually charged under non-trivial scheme/network selection.

Items whose `accepts[]` entries are all non-USD-stable are excluded from the price percentiles but kept in all other aggregates. In this snapshot that affected 97 of 34,587 listings (0.28%).

## Testnet classification

A network string is testnet when any of these substrings appear (case-insensitive): `sepolia`, `testnet`, `devnet`, `eip155:84532` (Base Sepolia), `eip155:11155111` (Ethereum Sepolia), `eip155:11155420` (Optimism Sepolia), `eip155:421614` (Arbitrum Sepolia), `eip155:80001` (Polygon Mumbai), `eip155:80002` (Polygon Amoy). Everything else is mainnet. `mainnet_only` is `true` when the item accepts at least one mainnet network **and** zero testnet networks.

## Liveness probe

- Seeded random sample of 100 resources (seed `20261005`).
- One `HTTP GET` per URL. `Accept: application/json`. 5s timeout. No retries. No payment. No authentication.
- 250ms sleep between probes.
- Pass-through observations only: we record the response status, not the response body. Any error is bucketed to `TimeoutError` / `URLError` / `ConnectionError` / `OSError`.
- Interpretation caveat: an x402 resource is **correctly behaving** when it returns `HTTP 402` to an unauthenticated request. `HTTP 405` is also common and does not indicate failure — many Bazaar listings are POST-only, and a `GET` to such a resource returns `405 Method Not Allowed` before the x402 payment challenge fires. `HTTP 200` to an unauthenticated `GET` is unusual for a Bazaar listing — it suggests either a free tier or a service that returns a payload without challenging. We do not re-probe the sample as POST because that could invite partial payment flow activation; a `GET` is the minimum-impact probe.

## Reproducibility

The two scripts that produced this dataset are versioned in the repo:

- `scripts/0708_bazaar_snapshot.py` — pages the endpoint and writes `raw.json` + `snapshot_meta.json`.
- `scripts/0708_bazaar_analyze.py` — reads `raw.json`, writes `dataset.csv` + `summary.json` + `liveness_probe.json`.
- `scripts/0708_build_jsonld.py` — reads the derived summary and emits `dataset.jsonld` + `PROVENANCE.json` + `SHA256SUMS` into the site publishing directory.

Given the same `raw.json`, both derived files are byte-stable. The liveness probe is non-deterministic (network paths change) but the sample set is seeded, so the probed URL list is reproducible.

## Limitations and honest disclosures

- **Not an audit, not a verification pass.** This is a snapshot of what Coinbase's Bazaar index says exists, derived into shape. We do not check that any claimed capability matches the resource's actual behavior beyond the one-shot `HTTP GET` liveness probe.
- **Index freshness is reported, not verified.** `lastUpdated` is from the index. We do not independently verify when the resource last changed.
- **Our own endpoints are not listed in the index** as of the fetch window. We publish `/.well-known/x402.json` but do not currently appear in Coinbase's Bazaar. This is stated in `summary.json.ours_listed.notes` and is a deliberate disclosure, not a finding we omitted.
- **Price percentiles are over the 34,490 listings with an inferable USD price.** 97 listings are excluded from the price distribution for lack of a parseable `extra.name` / `extra.decimals`.
- **The 100-URL probe is a sample.** Small-N caveats apply; the status breakdown is not an entire-corpus liveness claim.

## Prior work

No publicly dated, methodology-pinned Bazaar census was found before publication. If a predecessor exists, this page will add a `Prior work` row in a future revision.

## License

[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/). Free to reuse, remix, and redistribute — including commercially — with attribution.

> Onchain Agent Intel (2026). Coinbase x402 Bazaar discovery census (2026-10-05). CC BY 4.0. https://onchainagentintel.io/data/x402-bazaar-census-2026-10
