x402 Bazaar Listing Monitor
Scheduled watchdog for x402 sellers: polls Coinbase CDP's public Bazaar discovery catalog for the
resources you register and alerts when one drops out or comes back — instead of finding out from a
revenue dip days later.
Sellers who settle real x402 payments have no reliable way to confirm their resources stay
discoverable in CDP's Bazaar catalog. The discovery API has a recurring, publicly-reported class of
bug where a resource silently stops appearing despite confirmed settlements — sellers currently catch
this only by manually re-running GET /discovery/merchant?payTo=<address> on their own schedule.
This service automates that check: register your payTo address and the resource URLs you serve, and
a scheduled poll diffs them against the live discovery catalog. State changes are recorded with
timestamps, so you have a durable history you can cite if you need to escalate to CDP support.
MCP server
Endpoint: https://x402-listing-monitor.acjlabs.com/mcp (streamable HTTP)
One tool — no signup, no API key:
check_listing_health
Checks whether a seller's x402 Bazaar resources are currently listed under a given payTo address in
the public discovery catalog. Runs the same per-seller diff as the scheduled poller, on demand, for
any payTo/resources pair — registered here or not.
| parameter | type | notes |
|---|
payTo | string | 0x-prefixed, 40 hex characters |
resources | string[] | 1–200 http(s) URLs |
Returns each resource flagged as listed or missing, as JSON.
HTTP API
Base URL: https://x402-listing-monitor.acjlabs.com
| method | path | purpose |
|---|
GET | /health | liveness check |
POST | /register | register a seller for scheduled polling |
POST | /poll | run a poll immediately |
POST /register
{
"sellerId": "your-slug",
"payTo": "0x0000000000000000000000000000000000000000",
"resources": ["https://api.example.com/your-resource"],
"alertWebhookUrl": "https://example.com/hook"
}
sellerId — 2–64 characters: letters, digits, -, _
payTo — 0x-prefixed, 40 hex characters
resources — 1–200 http(s) URLs, no duplicates
alertEmail / alertWebhookUrl — optional; a webhook URL must be https
Resources are watched by self-declaration: the service checks what you tell it to check. A sellerId
that already exists is rejected rather than overwritten.
Per-IP rate limits apply to /register and /poll.
Polling and alerts
The scheduled poll runs every 6 hours. Each run diffs your registered resources against the live
discovery catalog and records state changes with timestamps — a history, not just a point-in-time
answer.
| alert type | tier |
|---|
| resource dropped out of the catalog | free |
| resource recovered | free |
| still missing after an indexing-lag grace period | paid |
| catalog quality/rank drop | paid |
Paid tiers also tighten the polling interval.
Status
Early release. The service is live and polling, and the recorded alert history is authoritative for
what it has observed. Outbound alert delivery is not enabled yet — state changes are detected and
persisted; delivery is the next thing being wired.
Source availability & support
This repository hosts the documentation for the hosted service. The service implementation is not
open source. Bug reports and feature requests are welcome in this repo's Issues; you can also reach us
at contact@acjlabs.com.