<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Forge Alone</title>
    <description>The latest articles on DEV Community by Forge Alone (@forgealone).</description>
    <link>https://dev.to/forgealone</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4156008%2F2b0bb48b-8fc9-4f15-b1f6-097e72215805.png</url>
      <title>DEV Community: Forge Alone</title>
      <link>https://dev.to/forgealone</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/forgealone"/>
    <language>en</language>
    <item>
      <title>x402 endpoint not showing in the Bazaar? 15 causes and fixes</title>
      <dc:creator>Forge Alone</dc:creator>
      <pubDate>Fri, 02 Oct 2026 00:34:25 +0000</pubDate>
      <link>https://dev.to/forgealone/x402-endpoint-not-showing-in-the-bazaar-10-causes-and-fixes-15h9</link>
      <guid>https://dev.to/forgealone/x402-endpoint-not-showing-in-the-bazaar-10-causes-and-fixes-15h9</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://unlisted.sh/guide" rel="noopener noreferrer"&gt;unlisted.sh/guide&lt;/a&gt;. I built &lt;a href="https://unlisted.sh" rel="noopener noreferrer"&gt;Unlisted&lt;/a&gt;, the paid checker mentioned at the end, but everything here works by hand for free. Updated October 5, 2026: now 15 causes, up from 10, with several confirmed by Coinbase contributors.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Your x402 endpoint returns a 402, takes payment, and works. But it isn't in the CDP Bazaar, so agents searching the catalog never find it. I hit several of these causes on my own API, so here's every one I know of, each with the symptom and the fix.&lt;/p&gt;

&lt;p&gt;Coinbase's own &lt;a href="https://docs.cdp.coinbase.com/x402/seller/get-discovered" rel="noopener noreferrer"&gt;Get discovered (Bazaar)&lt;/a&gt; guide is the official checklist. The causes below add what sellers have run into, each linked to where it was reported or confirmed.&lt;/p&gt;

&lt;h2&gt;
  
  
  How a route gets listed
&lt;/h2&gt;

&lt;p&gt;The Bazaar doesn't crawl the web for x402 endpoints. A route gets listed when a payment to it &lt;strong&gt;settles through CDP's facilitator&lt;/strong&gt;, its 402 challenge carries a valid &lt;code&gt;extensions.bazaar&lt;/code&gt; declaration, and the settle request carries both &lt;code&gt;paymentPayload.extensions.bazaar&lt;/code&gt; and &lt;code&gt;paymentPayload.resource&lt;/code&gt;. CDP then probes the route with the example input from your declaration and expects a 402.&lt;/p&gt;

&lt;p&gt;So you need a well-formed challenge on a public https URL, CDP as the facilitator, and at least one settled payment that carries the metadata.&lt;/p&gt;

&lt;h2&gt;
  
  
  Free first step: ask the Bazaar directly
&lt;/h2&gt;

&lt;p&gt;CDP's discovery API is public. Open this in your browser with your receiving wallet address:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.cdp.coinbase.com/platform/v2/x402/discovery/merchant?payTo=0xYOUR_PAY_TO_ADDRESS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your route is there, it's listed. If not, read on.&lt;/p&gt;

&lt;p&gt;Your own server can also read CDP's answer. On verify and settle, CDP's facilitator returns an &lt;code&gt;EXTENSION-RESPONSES&lt;/code&gt; header: base64 JSON whose &lt;code&gt;bazaar.status&lt;/code&gt; is &lt;code&gt;success&lt;/code&gt; (cataloged), &lt;code&gt;processing&lt;/code&gt; (accepted, being cataloged) or &lt;code&gt;rejected&lt;/code&gt; (with a &lt;code&gt;rejectedReason&lt;/code&gt;). No &lt;code&gt;bazaar&lt;/code&gt; key means discovery wasn't submitted at all. &lt;code&gt;processing&lt;/code&gt; doesn't confirm that indexing will succeed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick triage
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What you see&lt;/th&gt;
&lt;th&gt;Most likely cause&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nobody has paid the route yet&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real payments have landed, still not listed&lt;/td&gt;
&lt;td&gt;2, then 3, 4 and 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Your app runs behind Render, Railway, Fly, Heroku, nginx or a load balancer&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A plain request to your route, without its parameters, gets a 400, 409 or 422&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Your decoded challenge has &lt;code&gt;extensions&lt;/code&gt; inside an &lt;code&gt;accepts&lt;/code&gt; entry&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Some x402 clients say there are no payment options&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CDP's facilitator answered &lt;code&gt;rejected&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;3 (read &lt;code&gt;rejectedReason&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Valid challenge, settled through CDP, status "processing", still not listed&lt;/td&gt;
&lt;td&gt;13 and 10, then the open reports near the end&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Was listed, now gone&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Several of your URLs show up as one entry&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Listed, but agentic.market shows &lt;code&gt;enriched: false&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Not curated (near the end)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Listed, but with the wrong method or no input schema&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Listed, but showing an old price or description&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  1. No payment has settled through CDP yet
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; your challenge looks right, but the route has never been paid. This is the most common cause for a brand-new endpoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; make one real, paid call to the route that settles through CDP's facilitator. A cent is enough. Then give the Bazaar time to crawl it. It doesn't have to be a mainnet payment: a Coinbase contributor confirmed in &lt;a href="https://github.com/coinbase/cdp-sdk/issues/835" rel="noopener noreferrer"&gt;cdp-sdk #835&lt;/a&gt; that a testnet settlement through CDP works too, as long as &lt;code&gt;extensions.bazaar.info.input&lt;/code&gt; and &lt;code&gt;paymentPayload.resource&lt;/code&gt; are set.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Payments settle through a different facilitator
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; you've had real, settled payments, but the route still isn't listed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; the CDP Bazaar only learns about routes from settlements that go through CDP's facilitator. A Coinbase contributor confirmed this in &lt;a href="https://github.com/coinbase/cdp-sdk/issues/827" rel="noopener noreferrer"&gt;cdp-sdk #827&lt;/a&gt;. If your server uses another facilitator, CDP never sees those payments. That includes the x402.org facilitator, which keeps its own separate catalog. Point the route at CDP's facilitator (it needs a CDP API key), then make one more paid call.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. &lt;code&gt;extensions.bazaar&lt;/code&gt; is missing or malformed
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; payments settle, but there's nothing for the Bazaar to index. Decode your 402 challenge, and either &lt;code&gt;extensions.bazaar&lt;/code&gt; isn't there or it's incomplete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; declare discovery metadata on the route. In the Python SDK that's &lt;code&gt;declare_discovery_extension(...)&lt;/code&gt; passed as the route's &lt;code&gt;extensions&lt;/code&gt;, plus registering &lt;code&gt;bazaar_resource_server_extension&lt;/code&gt; on the resource server. At minimum, &lt;code&gt;extensions.bazaar.info.input.type&lt;/code&gt; must be &lt;code&gt;"http"&lt;/code&gt; or &lt;code&gt;"mcp"&lt;/code&gt;. If you include &lt;code&gt;info.output&lt;/code&gt;, it needs a &lt;code&gt;type&lt;/code&gt; too.&lt;/p&gt;

&lt;p&gt;Make the example match the schema. Coinbase's docs say rejections are usually strict JSON Schema validation: your declared &lt;code&gt;input&lt;/code&gt; must validate against &lt;code&gt;schema.properties.input&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Also check the paying side. The settle request has to carry &lt;code&gt;paymentPayload.extensions.bazaar&lt;/code&gt;, so a client that drops the extension when it sends the payment leaves CDP with nothing to index (&lt;a href="https://github.com/x402-foundation/x402/issues/3557" rel="noopener noreferrer"&gt;x402 #3557&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  4. &lt;code&gt;extensions&lt;/code&gt; sits inside &lt;code&gt;accepts&lt;/code&gt; instead of next to it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; your 402 has a complete Bazaar declaration, but it's inside a payment option, at &lt;code&gt;accepts[0].extensions.bazaar&lt;/code&gt;, instead of at the top level of the 402 body. Payments settle and nothing is indexed. It's an easy mistake in hand-rolled 402 responses, and in code ported from x402 v1, where discovery metadata sat inside each payment option as &lt;code&gt;outputSchema&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; move &lt;code&gt;extensions&lt;/code&gt; to the top level of the 402 body, next to &lt;code&gt;accepts&lt;/code&gt;, and to the same place in the decoded &lt;code&gt;PAYMENT-REQUIRED&lt;/code&gt; header. The &lt;a href="https://github.com/x402-foundation/x402/blob/main/specs/x402-specification-v2.md" rel="noopener noreferrer"&gt;x402 v2 specification&lt;/a&gt; defines &lt;code&gt;extensions&lt;/code&gt; on the 402 response itself, and an &lt;code&gt;accepts&lt;/code&gt; entry has no such field. Clients copy the top-level &lt;code&gt;extensions&lt;/code&gt; into the payment they send, and the x402 SDK drops an &lt;code&gt;extensions&lt;/code&gt; key it finds inside an &lt;code&gt;accepts&lt;/code&gt; entry, so CDP never gets your declaration. Then make a new settlement.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The description is too long
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; everything else is right, but payments fail. Coinbase's docs say CDP's facilitator rejects verify and settle requests whose description is over 500 characters, and sellers have reported the failure being hard to trace (&lt;a href="https://github.com/x402-foundation/x402/issues/2993" rel="noopener noreferrer"&gt;x402 #2993&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; keep the route's &lt;code&gt;description&lt;/code&gt; to 500 characters or fewer. One or two sentences is plenty: what the endpoint does and when an agent should call it.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. &lt;code&gt;resource.url&lt;/code&gt; says &lt;code&gt;http://&lt;/code&gt; behind a proxy
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; your public URL is &lt;code&gt;https://&lt;/code&gt;, but the decoded challenge advertises &lt;code&gt;http://&lt;/code&gt;. Your host terminates TLS and forwards plain HTTP to your app, so the app builds the URL from what it sees. CDP's validation only accepts &lt;code&gt;https://&lt;/code&gt; resource URLs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; tell your server to trust the forwarded scheme. For uvicorn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uvicorn main:app &lt;span class="nt"&gt;--proxy-headers&lt;/span&gt; &lt;span class="nt"&gt;--forwarded-allow-ips&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'*'&lt;/span&gt;
&lt;span class="c"&gt;# or set the env var&lt;/span&gt;
&lt;span class="nv"&gt;FORWARDED_ALLOW_IPS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For other stacks, read &lt;code&gt;X-Forwarded-Proto&lt;/code&gt; (Express: &lt;code&gt;app.set("trust proxy", true)&lt;/code&gt;), or hardcode your public https base URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. The &lt;code&gt;resource&lt;/code&gt; field is missing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; the challenge has payment options but no &lt;code&gt;resource&lt;/code&gt;, so the Bazaar doesn't know which URL it's cataloging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; include &lt;code&gt;resource.url&lt;/code&gt;: the full public https URL of the paid route. Current x402 SDKs fill it in for you. Hand-rolled 402 responses often leave it out.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. The 402 body is empty or &lt;code&gt;accepts&lt;/code&gt; is malformed
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; x402 v2 puts the challenge in a base64 &lt;code&gt;PAYMENT-REQUIRED&lt;/code&gt; header, and some servers send an empty JSON object as the body. Clients and crawlers that read the body find no payment options.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; keep the header, and also return the same decoded JSON as the 402 body. Make sure &lt;code&gt;accepts&lt;/code&gt; is a non-empty array of objects, each with &lt;code&gt;scheme&lt;/code&gt;, &lt;code&gt;network&lt;/code&gt;, &lt;code&gt;asset&lt;/code&gt;, &lt;code&gt;amount&lt;/code&gt; and &lt;code&gt;payTo&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. A POST route is described as GET
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; your route takes a JSON body, but the listing (or the validation) treats it as GET, so it sends no body and gets an error instead of a 402.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; declare the body in the discovery metadata. In the Python SDK, pass &lt;code&gt;body_type="json"&lt;/code&gt; plus an example &lt;code&gt;input&lt;/code&gt; and &lt;code&gt;input_schema&lt;/code&gt; to &lt;code&gt;declare_discovery_extension&lt;/code&gt;. Make sure the route key says &lt;code&gt;POST&lt;/code&gt; too.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. External &lt;code&gt;$ref&lt;/code&gt;/&lt;code&gt;$id&lt;/code&gt; in a schema, or &lt;code&gt;paymentPayload.resource&lt;/code&gt; not sent
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; payments settle through CDP and CDP's validation says the route would be accepted, but it never appears in the catalog. Sellers in &lt;a href="https://github.com/x402-foundation/x402/issues/3045" rel="noopener noreferrer"&gt;x402 #3045&lt;/a&gt; traced this to two things on their side.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix, part one: inline your schemas.&lt;/strong&gt; If the input schema or &lt;code&gt;output.schema&lt;/code&gt; in your Bazaar declaration has a &lt;code&gt;$ref&lt;/code&gt; or &lt;code&gt;$id&lt;/code&gt; pointing to an external URL, inline the referenced definitions and drop the external &lt;code&gt;$id&lt;/code&gt;. A Coinbase contributor confirmed this cause in &lt;a href="https://github.com/coinbase/cdp-sdk/issues/835" rel="noopener noreferrer"&gt;cdp-sdk #835&lt;/a&gt;, where indexing failed with "schema must not contain external $ref/$id references". CDP's &lt;code&gt;/v2/x402/validate&lt;/code&gt; can pass a route that still has this problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix, part two: send &lt;code&gt;paymentPayload.resource&lt;/code&gt; when you settle.&lt;/strong&gt; Coinbase's docs say the settlement that triggers indexing must set both &lt;code&gt;paymentPayload.extensions.bazaar&lt;/code&gt; and &lt;code&gt;paymentPayload.resource&lt;/code&gt;, and settlement succeeds without them, so nothing warns you. Current SDKs fill it in. Hand-rolled settle code often doesn't. One seller also had to settle with an x402 v2 payload, where &lt;code&gt;resource&lt;/code&gt; is an object rather than a URL string.&lt;/p&gt;

&lt;p&gt;After either fix, make a new settlement.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. The route uses a bare wildcard
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; the route is declared as &lt;code&gt;/prices/*&lt;/code&gt;, so the listing can't tell agents what goes in the path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; use a named parameter in the paywall's route pattern, such as &lt;code&gt;GET /prices/:symbol&lt;/code&gt;, so the discovery metadata names the path parameter. With the CDP SDK's TypeScript &lt;code&gt;createX402Server&lt;/code&gt;, the route key also needs a specific HTTP method: Coinbase's docs say a wildcard method doesn't give the SDK enough to generate discovery metadata.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. You changed price or metadata and the listing didn't update
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; the route is listed, but with an old price, description or schema (&lt;a href="https://github.com/coinbase/cdp-sdk/issues/813" rel="noopener noreferrer"&gt;cdp-sdk #813&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; make a new paid call after the change. A Coinbase contributor said in &lt;a href="https://github.com/coinbase/cdp-sdk/issues/835" rel="noopener noreferrer"&gt;cdp-sdk #835&lt;/a&gt; that indexing can't be retriggered on an existing settlement. Then check the crawl time again before assuming it's stuck. Ranking is separate: Coinbase's docs say it's recomputed every six hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  13. A bare request or CDP's probe gets a 400 instead of a 402
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; a plain request to your route, without its parameters or body, gets a 400, 409 or 422 instead of a 402. Crawlers, discovery tools and agents checking a route before they pay send exactly that kind of request, so they never see your price.&lt;/p&gt;

&lt;p&gt;The same thing can stop indexing. After a settlement, the Bazaar probes your route with the example input from &lt;code&gt;extensions.bazaar.info.input&lt;/code&gt;, or an empty body if you didn't declare one. If your input validation runs before the x402 middleware, the probe gets a 400, 409 or 422 instead of a 402, and indexing stops there. A Coinbase contributor traced a stuck route to exactly this in &lt;a href="https://github.com/coinbase/cdp-sdk/issues/830" rel="noopener noreferrer"&gt;cdp-sdk #830&lt;/a&gt;: the probe got a 409.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; let the x402 middleware answer before your input validation runs, so an unpaid request gets a 402 whatever its input. If validation has to come first, at least make sure the example input in your declaration passes it and comes back as a 402. Then make a new settlement.&lt;/p&gt;

&lt;h2&gt;
  
  
  14. Several URLs collapse into one entry
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; you serve many resources, such as &lt;code&gt;/data/0xabc.../report&lt;/code&gt; and &lt;code&gt;/data/0x123.../report&lt;/code&gt;, but the Bazaar lists them as a single entry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Coinbase's docs say the Bazaar turns any path segment that is entirely a UUID, an EVM address or transaction hash, or a Solana address or transaction hash into a generic route parameter. To keep resources listed separately, add a prefix or suffix so the segment isn't a bare identifier, such as &lt;code&gt;/user-&amp;lt;uuid&amp;gt;&lt;/code&gt; instead of &lt;code&gt;/&amp;lt;uuid&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  15. The route dropped out after 30 days without a settlement
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; your route was listed, and now it's gone from the catalog and search results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Coinbase's docs say resources that go 30 days without a settlement are removed, and endpoints that stop returning a 402 are eventually removed too. A listed route needs ongoing paid traffic through CDP's facilitator. Keep sending &lt;code&gt;paymentPayload.extensions.bazaar&lt;/code&gt; and &lt;code&gt;paymentPayload.resource&lt;/code&gt; on every settlement.&lt;/p&gt;

&lt;h2&gt;
  
  
  If none of these fit: accepted as "processing", never indexed
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; your challenge is valid, a payment settled through CDP's facilitator, and the facilitator answered with &lt;code&gt;bazaar.status: "processing"&lt;/code&gt;. CDP's own validation says the route would be accepted. Days later it still isn't in the catalog.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's known:&lt;/strong&gt; &lt;code&gt;processing&lt;/code&gt; means the metadata was accepted and is being cataloged asynchronously. Routes that do get indexed see it too, so it tells you nothing either way. Two of the reports were answered by a Coinbase contributor and both turned out to be fixable on the seller's side: &lt;a href="https://github.com/coinbase/cdp-sdk/issues/830" rel="noopener noreferrer"&gt;cdp-sdk #830&lt;/a&gt; (cause 13) and &lt;a href="https://github.com/coinbase/cdp-sdk/issues/835" rel="noopener noreferrer"&gt;cdp-sdk #835&lt;/a&gt; (cause 10). As of October 4, 2026, &lt;a href="https://github.com/x402-foundation/x402/issues/3266" rel="noopener noreferrer"&gt;x402 #3266&lt;/a&gt; and &lt;a href="https://github.com/x402-foundation/x402/issues/3281" rel="noopener noreferrer"&gt;x402 #3281&lt;/a&gt; are still open with no maintainer answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What to try:&lt;/strong&gt; rule out causes 1 to 15 first, especially 13 and 10. Then make one fresh settlement through CDP after your last change. If it's still missing after a few days, add your route and settlement details to one of the open issues. More reports make it easier for CDP to find the pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  Indexed, but not curated (&lt;code&gt;enriched: false&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; your route is in the CDP Bazaar, but agentic.market's record for your service shows &lt;code&gt;enriched: false&lt;/code&gt;, and you're not in the featured slice. This is a different problem from not being indexed (&lt;a href="https://github.com/coinbase/cdp-sdk/issues/838" rel="noopener noreferrer"&gt;cdp-sdk #838&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it means:&lt;/strong&gt; a Coinbase contributor explained in #838 that &lt;code&gt;enriched&lt;/code&gt; is only turned on for the hand-picked editorial set of curated endpoints. Meeting the published criteria makes an endpoint eligible to be selected, not entitled to it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.cdp.coinbase.com/x402/seller/get-discovered#requirements-for-curation" rel="noopener noreferrer"&gt;Coinbase's curation requirements&lt;/a&gt; are: live x402 payments on mainnet, at least 99% availability over 30 days, passing the platform health probe, agent-ready metadata (a complete input schema, a description that tells an agent when to use the endpoint, per-call pricing, supported networks and documented error responses), and passing validation. The docs don't describe an application process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checking it in one call
&lt;/h2&gt;

&lt;p&gt;If you'd rather not decode challenges by hand, &lt;a href="https://unlisted.sh" rel="noopener noreferrer"&gt;Unlisted&lt;/a&gt; runs these checks against your endpoint and asks CDP for its live index status, including whether CDP would accept the route if it isn't listed yet. It's pay-per-call over x402 (USDC on Base), with no signup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Check, $0.02:&lt;/strong&gt; your 402 challenge, the Bazaar declaration, CDP's probe rebuilt from your declaration, and CDP's live index status.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check + real payment, $0.10:&lt;/strong&gt; all of that, plus one real test payment to your route, which covers cause 1 for you. For routes priced up to $0.05, once per domain per 24 hours. If no test payment can be made, you aren't charged.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST https://unlisted.sh/diagnose
Content-Type: application/json

{"url": "https://your-api.example.com/paid-route"}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Unlisted can't make CDP index a route, and it won't claim to.&lt;/p&gt;

&lt;p&gt;The full guide, kept up to date, is at &lt;a href="https://unlisted.sh/guide" rel="noopener noreferrer"&gt;unlisted.sh/guide&lt;/a&gt;. If you've hit a cause that isn't listed here, tell me in the comments and I'll add it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Unlisted isn't affiliated with Coinbase.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>web3</category>
      <category>api</category>
      <category>ai</category>
      <category>x402</category>
    </item>
  </channel>
</rss>
