# x402 endpoint not showing in the Bazaar? 7 causes and fixes

> x402 catalogs fill themselves from settled payments, not a form. Seven reasons an endpoint never shows up in the Bazaar, and how to check each one.

Published 2026-10-13. Source: https://toolvet.app/blog/x402-endpoint-not-in-bazaar

**Short answer:** an x402 endpoint shows up in the Bazaar after a facilitator settles a payment for it, using the discovery metadata in your server's 402 response. If yours is missing, it has usually never been paid through that facilitator, its payment challenge advertises an `http://` URL, or the facilitator rejected its metadata.

Some background: [x402](https://www.x402.org) lets a client, often an AI agent, pay for an HTTP request in stablecoins. Your server answers `402 Payment Required` with a price, and the client retries with a signed payment. A facilitator verifies and settles that payment. Coinbase's facilitator also runs the Bazaar, the catalog agents search for paid endpoints, and other facilitators keep catalogs of their own.

There is no "submit" button for any of these catalogs. The first time a facilitator settles a payment for your endpoint, it reads the discovery metadata your server sent along and adds the endpoint to its catalog. So when your endpoint doesn't show up, the question isn't who to email. It's which link in that chain broke.

We list ToolVet's own endpoints in these catalogs, and we check tens of thousands of paid endpoints on a schedule. These are the causes we've run into or see most often as of October 2026, roughly in the order worth checking.

## 1. Nobody has paid it yet, through that facilitator

A catalog entry is created when a payment settles, not when you deploy. And each facilitator runs its own catalog (the x402 spec [leaves discovery to the facilitator](https://docs.x402.org/extensions/bazaar)): payments settled through Coinbase's CDP facilitator land in the Coinbase Bazaar, payments settled through PayAI land in PayAI's catalog. An endpoint that has only ever settled through one facilitator won't appear in the other's. Which one to use is a trade-off between fees and reach; we [compared the main facilitators](https://toolvet.app/blog/x402-facilitators-compared).

**Fix:** pay your own endpoint once, from a separate wallet holding a little USDC. Don't pay from the wallet that receives the money; a payment from an address to itself may be rejected. With the exact scheme on EVM chains the facilitator submits the transaction and pays the gas, so the buying wallet needs USDC only.

## 2. Your resource URL says http://

Behind a TLS-terminating proxy (a tunnel, nginx, a load balancer) your app often receives plain `http://` requests. The x402 middleware builds `resource.url` in the payment challenge from the request it sees, so the challenge advertises an `http://` URL. Coinbase's facilitator only indexes public HTTPS URLs, and as [one developer found out the hard way](https://dev.to/donnywin85/your-x402-api-settled-on-mainnet-but-never-showed-up-in-coinbases-bazaar-check-one-character-3l20), the payment still settles. Nothing looks wrong until you notice the listing never appeared.

**Check** what your challenge says:

```bash
curl -s -D - -o /dev/null https://api.example.com/your-endpoint \
  | grep -i '^payment-required:' | cut -d' ' -f2 | tr -d '\r' \
  | base64 -d | jq .resource.url
```

**Fix:** let the app trust the scheme your proxy forwards (in Express, `app.set("trust proxy", 1)` before the payment middleware), or rewrite requests for your public host to `https` before the middleware runs. ToolVet sits behind a proxy too and does the latter.

## 3. The facilitator rejected your metadata

Discovery metadata is validated strictly. Two rules in [Coinbase's docs](https://docs.cdp.coinbase.com/x402/seller/get-discovered) catch most people:

- A description over 500 characters doesn't just lose the listing: the facilitator rejects the verify and settle requests themselves.
- The example `input` you declare has to validate against your own input schema.

**Check:** the settle response carries an `EXTENSION-RESPONSES` header with the `bazaar` status, which is `success`, `processing` or `rejected`, plus a `rejectedReason` when it was rejected. Log it when you make that first payment.

Coinbase also runs a free [validator](https://docs.cdp.coinbase.com/x402/validate-endpoint) that checks, without paying, that your route is reachable, answers 402, advertises a valid `bazaar` block and would be accepted for indexing. No API key needed:

```bash
curl -s -X POST https://api.cdp.coinbase.com/platform/v2/x402/validate \
  -H 'content-type: application/json' \
  -d '{"resource": "https://api.example.com/your-endpoint", "method": "GET"}' \
  | jq '{valid, outcome: .simulation.outcome, preflight}'
```

You want `valid: true` and `outcome: "accepted"`. The `preflight` field lists what failed.

## 4. Your endpoint rejects the request before the paywall

If input validation runs before the x402 middleware, a request without the right parameters gets a 400 instead of a 402. Validators and crawlers probe with no input or with your example input, so they never see a payment challenge. Put the payment middleware first, and answer every unpaid request to a paid route with a 402. If the paid request then turns out to be invalid, return a 4xx: the official middleware only settles when your handler succeeds, so the caller isn't charged.

## 5. It was listed, and then it disappeared

Catalogs prune. Coinbase removes resources that go 30 days without a settlement, and endpoints that stop answering with a 402 are eventually dropped from the index. Endpoints that fail repeated health checks are ranked lower and leave the featured tier, but come back once they recover.

Real buyers are what keep an entry alive. Paying yourself now and then technically keeps you in the catalog, but ranking counts distinct buyers, and self-payments are visible on-chain to anyone who looks.

## 6. You changed the price and the catalog didn't follow

In our experience, a catalog entry only picks up new payment terms when a new payment settles. After a price change, pay each endpoint once more.

x402scan works differently: you register your server by hand and it reads your OpenAPI document. When we changed our prices, it kept showing the old ones until we ran **Add Server** again with the same URL, which updated the existing entries.

## 7. It's listed, but nobody finds it

Being in the catalog and ranking in it are different things. Coinbase ranks by buyer reach, transaction volume and recency over a rolling 30 days, recomputed every six hours, plus listing quality. The parts you control:

- **The description.** Write it for an agent deciding whether to call you: what it returns, for which input, and when to use it.
- **Schemas and examples.** Declare the full input and output schema with a real example. Agents and catalogs both rely on them.
- **Hosting.** Serve from your own domain. Shared tunnel domains such as ngrok rank lower, and results are capped per domain.

## A note on x402scan

x402scan is separate from the facilitator catalogs. It reads `/openapi.json` first, then `/.well-known/x402`, and its rules are in [its discovery spec](https://github.com/Merit-Systems/x402scan/blob/main/docs/DISCOVERY.md). Two things that tripped us up:

- It probes the operations in your OpenAPI document, and paid operations need `x-payment-info`. Our free operations were reported as "No valid x402 response found" until we marked them with `"security": []`.
- It listed the HTTP endpoints from our OpenAPI document, not our MCP tools.

## Checklist

1. The challenge's `resource.url` starts with `https://`.
2. Coinbase's validator returns `valid: true`.
3. The description is under 500 characters, and the example input matches the schema.
4. The payment middleware answers before any input validation runs.
5. One real payment has settled through each facilitator you want to be listed by, from a wallet that isn't your pay-to address.
6. The `EXTENSION-RESPONSES` header on that payment says `success` or `processing`.
7. After a price change: pay again, and add your server on x402scan again.

## Frequently asked questions

### How long does it take for an x402 endpoint to appear in the Bazaar?

Cataloging runs in the background after the first settled payment, and the `EXTENSION-RESPONSES` header says `processing` while it does. In our runs, new entries showed up within about ten minutes. Coinbase recomputes the metrics it ranks by every six hours.

### Do I have to pay my own endpoint to get listed?

Someone has to: a facilitator only catalogs an endpoint after it settles a payment for it. Until your first real buyer arrives, one payment from a separate wallet does it.

### Can the same endpoint be listed in more than one catalog?

A facilitator catalogs the payments it settles, so the endpoint appears in the catalog of whichever facilitator settles its payments. Directories that crawl endpoints themselves, such as x402scan and ToolVet, list it whichever facilitator you use.

### Are paid MCP tools listed too?

Yes. Paid MCP tools carry the same discovery metadata and are cataloged when a call to them settles. ToolVet's own paid MCP tools are in PayAI's catalog this way.

Want an outside view? [Submit your endpoint to ToolVet](https://toolvet.app/submit). It's free: we check it right away, without paying, and the listing page shows what failed. [How we check and score](https://toolvet.app/methodology) explains the rest.
