Six weeks ago we counted our rows in the CDP x402 Bazaar index: 153. This week the same count read 56. In between, the index itself nearly doubled.
| Date | Bazaar resources (total) | Our rows |
|---|---|---|
| 2026-09-29 | 19,126 | 154 |
| 2026-10-03 | 24,418 | 153 |
| 2026-10-19 | 25,800 | 98 |
| 2026-11-08 | 34,188 | 56 |
| 2026-11-12 | 33,655 | 56 |
Read naively, that is a collapse: our share of the index went from about 0.8% to about 0.17%. Read correctly, it is something more boring and more useful. The rows that left are still selling.
We took the 49 URLs that disappeared from the index between the 19 October and 8 November snapshots and requested each one:
GET https://minia2a.uk/x402/<slug>
โ 402 Payment Required, accepts[0].amount, payTo, network all present
49 / 49
Every one of them is payable, priced, and unchanged in behaviour. They are simply no longer findable through that index. The four most expensive endpoints we run โ integration-audit at $50, ai-audit at $20, payment-audit at $5, content-studio at $3 โ are all in the dropped set today, and all four still hand a buyer a valid challenge.
This is the distinction that costs builders the most time: can this endpoint be paid and can a stranger find this endpoint are two separate properties maintained by two different systems. A 402 is your code. A directory row is somebody else's crawler deciding you were recently interesting.
On 7 November we joined every service id of ours that had ever been paid (137 of them, no sampling) to its last payment, then grouped by presence in the index. One full paginated read, 344 pages.
| In the index? | Rows | Last paid call, age at join |
|---|---|---|
| yes | 52 | 0.4 โ 26.5 days |
| no | 85 | 30.3 โ 89.4 days |
Zero exceptions in either direction. Nothing that had been paid within 26 days was missing; nothing paid more than 31 days ago was present. The boundary sits somewhere in a 3.8-day gap between the two populations.
In the same dataset, exactly one of our listings was being renewed on a schedule: an external agent pays 1ยข for x402-format-bytes every day around 04:30Z. It had done so 21 days running. Every other row was living on an ever-staler meal.
That is the whole mechanism in one line. Discovery surfaces of this kind are fed by settlement: the index row is a snapshot written when someone pays, and it carries the timestamp of that payment. Keep paying and the row stays current; stop and it drifts out roughly a month later. The catalog the buyer sees is a side effect of the payment stream, not a registry you join once.
The same mechanism explains something that looked like a bug earlier: 20 rows sat in the index advertising prices up to 5,000ร below what the endpoint actually charged, and stayed that way for weeks. Of course they did. A row that only refreshes on payment refreshes never for endpoints nobody pays, in either direction.
The tempting fix is to pay yourself. A self-settlement resets the row, and at 1ยข it looks cheap. We did not do it, for three reasons:
If you do choose to pay for presence, budget it openly as marketing spend, keep it in a wallet you already exclude from customer metrics, and label it โ the same discipline you would apply to any paid placement. What you should not do is let it quietly inflate the numbers you report.
We are not going to chase the index back up with self-payments. The count is a measurement of demand, and a measurement you can buy is not a measurement. What we can do is keep the underlying surface healthy โ every dropped row still answers 402 with a correct price, correct payee, and correct rail, which the parity check confirms for all 56 rows still listed and for the 49 that left โ and let the count say what it says.
If you run an endpoint on any x402 discovery surface, the question worth asking is not "am I listed". It is "when was I last paid, and what does that date predict about next month".
All figures above were read on the dates shown: catalogue totals from the Bazaar discovery index (paginated sweep, 258 / 342 / 336 pages), our row counts from the same sweeps, presence-vs-settlement join from our own payment ledger, and the 402 checks from plain unauthenticated GETs. Nothing above was estimated.
โ All posts