Bazaar: treat exampleUrl as the fetchable resource; keep routeTemplate as the index key
- Dominant language
- Python
- Stars
- 200
- Forks
- 191
- Avg merge
- 6h 16m
- Merged PRs (30d)
- 17
Description
## Ask
Please treat `exampleUrl` as the fetchable `resource` in the Bazaar catalog, and keep `routeTemplate` as the index key.
Parameterized x402 routes collapse to a template URL such as `https://intel.twzrd.xyz/v1/intel/trust/:pubkey`. Independent buyers and weekly probes copy that catalog `resource` and GET it. The seller correctly refuses to sell a placeholder (HTTP 400, not a payable 402). The live 402 already ships `extensions.bazaar.exampleUrl` pointing at a real wallet. The published listing does not.
This is the same stale-metadata class as x402-foundation/x402#1659 (closed 2026-07-24; that thread redirected here and to Discord).
## Evidence (reproducible, no API key)
Merchant catalog still lists the unpayable template:
```
GET https://api.cdp.coinbase.com/platform/v2/x402/discovery/merchant?payTo=GFpLvocNdEjnSsLH3VJQL6wGcjGxTbUBrj6fqN3Qe1Gs
```
Listed `resource`: `https://intel.twzrd.xyz/v1/intel/trust/:pubkey`
catalog `lastUpdated` `2026-07-23` (`2026-07-23T13:09:47.469Z`)
No `exampleUrl` on that row.
Live seller:
```
GET https://intel.twzrd.xyz/v1/intel/trust/:pubkey
→ HTTP 400 TEMPLATE_PLACEHOLDER_NOT_REPLACED charged:false try_now = example URL
GET https://intel.twzrd.xyz/v1/intel/trust/GFpLvocNdEjnSsLH3VJQL6wGcjGxTbUBrj6fqN3Qe1Gs
→ HTTP 402 x402 v2 PAYMENT-REQUIRED header
extensions.bazaar.routeTemplate = /v1/intel/trust/:pubkey
extensions.bazaar.exampleUrl = https://intel.twzrd.xyz/v1/intel/trust/GFpLvocNdEjnSsLH3VJQL6wGcjGxTbUBrj6fqN3Qe1Gs
```
CDP public validator (`POST /platform/v2/x402/validate`, no key):
| URL | result |
|---|---|
| template `:pubkey` | `valid: false` — `returns_402` failed, actual 400 |
| example `GFpLvoc…` | `valid: true`, `simulation.outcome: accepted`, `bazaarExtension.exampleUrl` present |
The example-URL validate also reports `index.active: true` and validate `lastCrawledAt` `2026-08-16` (`2026-08-16T19:30:59.267Z`). Crawl five days ago did not rewrite the July 23 listing.
`GET https://intel.twzrd.xyz/.well-known/x402` already publishes a fetchable `url` with a real wallet substituted. Buyers who enter through Bazaar never see that.
## Why a seller settle will not fix this
Documented refresh is “validate, then settle through the CDP Facilitator.” There is no seller delete/PUT. A $0.05 dogfood settle would likely keep `routeTemplate` as the published `resource` (Solana addresses collapse to one catalog key per your docs) and reset the 30-day no-settlement clock (`lastCalledAt` is also `2026-07-23`). We will not 402 the placeholder and we will not pay that row back to life.
## Expected
1. Catalog `resource` for this route family is a fetchable URL (`exampleUrl` / a concrete path-param substitution), not `…/trust/:pubkey`.
2. `routeTemplate` remains `/v1/intel/trust/:pubkey` as the stable index key so one listing covers every wallet.
3. Health probes and weekly crawlers that GET `resource` receive 402, not 400.
4. Subsequent crawls that see a live 402 with `exampleUrl` update the published row (catalog `lastUpdated` should not stay frozen after validate `lastCrawledAt` `2026-08-16`).
## Related
- x402-foundation/x402#1659 — Bazaar discovery does not refresh seller metadata or canonical resource after route update (closed; “open an issue on coinbase/cdp-sdk or Discord”).
- coinbase/cdp-sdk#759 — re-settle does not re-index; first-seen listing sticks.
Seller: TWZRD Agent Intel, `https://intel.twzrd.xyz`. Happy to provide more captures.
Contributor guide
Research direction
Start by reproducing the merchant catalog and validator requests, then compare the template and concrete URL responses, including the live 402 extensions and .well-known/x402 output. Trace the Bazaar discovery, validation, crawl, and indexing entry points that produce the published resource. Done means the catalog exposes a fetchable example URL, retains routeTemplate as its index key, and later crawls refresh the row.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100