What’s new: CDP’s x402 Bazaar now uses hybrid search — a combination of full-text and semantic retrieval — so your agent gets the best of both modes in a single ranked result set. Bazaar also
applies a URL sub-string fallback when no results match your query text, automatically retrying
against resource endpoint URLs. See CDP semantic search and
how ranking works. The paginated resources list is still available for inventory-style browsing.
The Bazaar is under active development. Semantic search, quality ranking, and
the MCP server interface are recent additions — expect the API surface to
evolve as we incorporate feedback.
Overview
Our Bazaar endpoints address x402 service discoverability by providing:- For buyers (API consumers, including agents): call the discovery endpoints to list or search the CDP Facilitator’s catalog, inspect pricing and schemas, then pay and call the resource.
- For sellers (API providers): when the CDP Facilitator sees a valid x402 payment that implements Bazaar cataloging, your declared metadata can surface in the CDP Bazaar discovery APIs.
Access modes
- Paginated catalog (HTTP) (
GET /v2/x402/discovery/resources) — inventory-style browsing withlimitandoffset. For custom UIs, dashboards, and backend integrations. Paths, parameters, and examples are in CDP discovery endpoints (HTTP) and Paginated catalog below. - Semantic search (HTTP) (
GET /v2/x402/discovery/search) — same CDP index as the catalog, optimized for query, filters, and quality ranking, not for walking the full catalog. See CDP Bazaar: Semantic search. - MCP Server (
GET /v2/x402/discovery/mcp) — for AI agents via Model Context Protocol (search_resources/proxy_tool_callwrap paid calls). See Bazaar MCP Server and the MCP Server guide.
How it works
In x402 v2, the Bazaar has been codified as an official extension in the reference SDK (@x402/extensions/bazaar). This extension enables:
- Sellers declare discovery metadata (input/output schemas) in their route configuration.
- The CDP Facilitator extracts and catalogs that metadata when it processes payments for your routes (discovery indexing runs after settle completes; verify alone is not enough).
- Buyers call the discovery APIs below: a paginated catalog, semantic search, or merchant lookup.
When does my endpoint appear? There is no separate registration step. The CDP Facilitator catalogs your service the first time it settles a payment for that endpoint (the usual client flow is verify then settle; indexing happens when settlement succeeds). The payment payload sent to the facilitator must include
paymentPayload.resource so CDP knows which resource to catalog. If your service does not appear in CDP Bazaar discovery, ensure at least one successful settlement has completed through the CDP Facilitator with paymentPayload.resource set.Staying visible — 30-day rolling window: All endpoints apply a recency filter. Resources that have been called at least once but have had no activity in the last 30 days are excluded from results. Newly indexed resources with no calls yet are not subject to this filter.v1 vs v2
Curated endpoints
Some resources in the Bazaar are Coinbase-curated: they have passed a partner-admission and verification bar on top of the automatic indexing every Bazaar-enabled route gets. Curation is a trust and quality signal — it does not change how you integrate as a buyer or seller, it changes how a resource surfaces. Curated endpoints are exposed through two optional fields on every discovery resource (in the catalog, search, and merchant responses):skillUrl is a pointer, not content. CDP returns the URL of the SKILL.md; your client fetches and interprets it. This keeps discovery payloads small and lets skill authors update guidance without re-indexing.Finding curated endpoints
Use the semantic search filters to narrow to curated results:curatedOnly=true— return only Coinbase-curated resources.tags=<tag>— filter by provider tags (repeatable, OR semantics, case-sensitive exact match).
Curated endpoints are continuously health-probed. CDP probes each curated endpoint on a short cycle, and ones that stop responding are demoted in search ranking until they recover. To be considered for the curated set, a provider is expected to sustain roughly 99% availability for the endpoint. See Quality ranking.
Seller integration
Install, middleware, CDP API keys, and full route examples live in the Quickstart for sellers. For Bazaar indexing you still need to:- Point your resource server at the CDP Facilitator URL
https://api.cdp.coinbase.com/platform/v2/x402for verify and settle. - Register
bazaarResourceServerExtension(Node/Go/Python equivalents) and attachdeclareDiscoveryExtension()(or the language-specific helper) on routes you want discoverable. - Ensure payment payloads sent to the facilitator include
paymentPayload.resourcefor the paid endpoint. - Complete at least one successful settlement through CDP (after verify) so discovery can index the resource.
Route consolidation for high-cardinality path segments: Bazaar automatically normalizes route URLs where a path segment consists entirely of a recognized high-cardinality identifier — a UUID, Ethereum address, Ethereum transaction hash, Solana address, or Solana transaction hash. Those segments are replaced with a generic route template parameter, and all matching URLs are consolidated into a single Bazaar entry. For example,
/data/0xabc...def/report and /data/0x123...456/report would surface as one entry rather than two.To keep each resource as a distinct Bazaar entry, add a prefix or suffix to the path segment so it is not a bare identifier — for example, /user-<uuid> or /<uuid>-report instead of /<uuid>.Discovery extension options
ThedeclareDiscoveryExtension function accepts configuration for different HTTP methods:
Bazaar extension validation
For a route to be discoverable, the Bazaar extensioninput must pass strict JSON Schema validation against schema.properties.input in your declared extension (see the extension shape below). In addition to this, the settle request must contain paymentPayload.resource. Without this, the Bazaar has no way to associate the discovery metadata with a resource.
The CDP Facilitator includes an EXTENSION-RESPONSES header on verify and settle responses so your resource server can tell whether Bazaar metadata was accepted. If validation fails, the resource server will see a rejected status for the Bazaar extension; otherwise you will typically see processing (discovery indexing is asynchronous, so this does not yet confirm the resource appears in search).
Buyer integration
Use the Quickstart for buyers for guides on installation, endpoint discovery, and paying with x402. Semantic search (GET …/v2/x402/discovery/search), filters, ranking, and example URLs are on this page under Semantic search. Paginated discovery returns items; search returns resources — the JSON shapes differ.
CDP discovery endpoints (HTTP)
This section documents the CDP Bazaar discovery endpoints (https://api.cdp.coinbase.com/.../v2/x402/discovery/...): paths, query parameters, and example payloads. The catalog (/discovery/resources) and semantic search (/discovery/search) routes are documented on this page only — there are no matching OpenAPI operation pages under the x402 Facilitator API Reference. The merchant discovery route does appear there as Get merchant resources by payTo address.
Auth: these
GET …/discovery/* routes are read-only catalog APIs and do not require CDP API keys. You still need CDP API keys on your resource server to run verify/settle through the CDP Facilitator (see Quickstart for sellers).CDP Facilitator discovery endpoint
Paginated catalog of x402-enabled HTTP resources. Results are returned in browse order (newest first). Use this endpoint when you want to page through the full index (items + pagination). For relevance-ranked results and filters, use semantic search instead.
The default
limit is 100 results per request. Limits are rounded to the nearest 10 and clamped to a minimum of 20; the hard maximum is 1000. Offsets that are not a multiple of the rounded limit are snapped down to the nearest valid multiple. Results are served from a cache — expect new and updated resources to take up to 10 minutes to be reflected.Query parameters
Response body (200 OK)
Example `200` JSON (paginated catalog)
Example `200` JSON (paginated catalog)
items[] fields
CDP Bazaar: Semantic search
The CDP Facilitator exposes a dedicated endpoint for free-text and structured search over the same CDP-indexed catalog as the paginated resources route (results stay in sync). Result order blends search relevance with service quality; see Quality ranking. No API key is required. UnlikeGET .../discovery/resources, this endpoint is optimized for search
and filter, not for walking the full catalog: there is no cursor or offset
pagination. Refine your query and filters (and use limit, capped at 20) to
narrow results. The response includes partialResults when the matching set is
larger than your limit and the service truncates to fit.
Quality ranking
CDP orders semantic search results using three kinds of signal:-
Retrieval relevance — how well the service matches your
queryand filters, using the mode indicated bysearchMethodin the response (for examplehybrid, semanticvector, or full-texttext). CDP uses hybrid search by default, combining text and semantic retrieval into a single ranked result. -
Service quality (objective signals) — a composite, facilitator-side score informed by observable CDP data, including:
- Buyer reach — how many distinct buyers the service has served (through the CDP Facilitator) within the last 30 days
- Transaction volume — how many transactions (successful payments) the resource has processed within the last 30 days
- Recency — how recently the service has been used
- Metadata quality — quality and completeness of Bazaar / discovery metadata (for example descriptions, input/output schemas, and examples). Low-effort or generic descriptions (for example, bare endpoint names or placeholder text) score 0 on this dimension, so a natural-language description materially improves ranking.
- Hosting — resources on shared/tunneling hosting platforms (for example,
ngrok.io/ngrok-free.app) are de-weighted relative to resources on dedicated domains, and domain concentration is penalized so a single domain cannot flood results.
-
Curation — Coinbase-curated endpoints (
curated: true) receive a ranking bump above non-curated results. Curated endpoints are continuously health-probed, and ones that stop responding are demoted until they recover.
Quality metrics (buyer reach, transaction volume, recency) are recomputed on a 6-hour schedule. A newly settled payment will not immediately affect a service’s ranking — expect ranking changes to take up to 6 hours to be reflected in search results.
Query parameters
Response (200 OK)
Example `200` JSON (semantic search)
Example `200` JSON (semantic search)
Example query URLs
Example query URLs
Each element of
resources includes the resource URL, type, x402Version,
optional description, lastUpdated, and accepts entries in the same payment
requirement shape as the paginated catalog.
Coinbase-curated endpoints additionally carry curated: true
and, when a skill document is available, a skillUrl.
Merchant discovery endpoint
Within CDP’s catalog, look up active resources for a given merchantpayTo address (EVM or Solana as documented).
Endpoint:
Query parameters
Response schema
Example `200` JSON (merchant)
Example `200` JSON (merchant)
200 OK with an empty resources list if no active resources are found for the given address, and 400 if the payTo parameter is missing or invalid.
For OpenAPI schemas and status codes for this route, see Get merchant resources by payTo address in the x402 Facilitator section of the API Reference.
Bazaar MCP Server
The Bazaar exposes a Model Context Protocol (MCP) server that lets AI agents discover and call paid endpoints. On the client side, the@x402/mcp package wraps a standard MCP client with automatic payment handling — the agent never touches wallets or signing directly.
How the MCP server works
The Bazaar MCP server exposes three tools. The@x402/mcp client wraps callTool() with a payment loop so payment is transparent to the agent:
search_resources— Semantic search across the Bazaar index. Returns matching resource descriptions, pricing, input/output schemas, and relevance-ordered results. Supports the same filters as the semantic search endpoint, includingcuratedOnlyandtagsfor narrowing to curated endpoints.proxy_tool_call— Call a discovered resource by passing itstoolNameand arguments. Under the hood, the@x402/mcpclient sends the call to the Bazaar MCP server. If the server responds with a payment-required error, the client automatically creates a payment payload using the configured x402 client, attaches it to the MCP request’s_metafield, and retries the call. The server then verifies and settles the payment on-chain before forwarding the request to the resource server and returning the response.validate_endpoint— Run the same endpoint diagnostics asPOST /v2/x402/validatefrom inside an MCP session: probe an x402 URL live and report per-check results plus whether the facilitator would index it. Read-only — it makes no payment and indexes nothing.
callTool() invocation — the @x402/mcp client handles 402 detection, payment creation, and retry internally.
MCP Server endpoint
The MCP server endpoint for the CDP facilitator is:Client setup
@x402/mcp package for advanced configuration including custom payment hooks, dynamic pricing, and server-side setup.
Curated endpoints in MCP
Curated endpoints surface through the MCP tools the same way they do through the REST discovery APIs, with extra structure to help agents call them correctly. Filteringsearch_resources. In addition to the standard filters, search_resources accepts:
curatedOnly— whentrue, return only Coinbase-curated resources. Available only when curation is enabled.tags— filter by exact, case-sensitive provider tags (OR semantics, up to 5).
search_resources enriches each result so an agent has what it needs before its first call:
- The tool description is prefixed with a short
Guide:andUsage notes:block. This is correctness-critical guidance meant to be read before calling the tool. - The result’s
inputSchemamay include a ready-to-use request-body example. - Two metadata blocks are attached to the tool’s
_meta:
Extension architecture
When you implement Bazaar for routes that settle through CDP, declare metadata using the x402 v2 extensions pattern:Example extension shape
Example extension shape
Key components
Best practices
For sellers
- Provide clear examples: include realistic
output.examplevalues that demonstrate your API’s response format. - Document inputs: use
inputSchemawith descriptions to help clients understand required parameters. - Use appropriate types: specify correct JSON Schema types (
string,number,boolean,array,object). - Write semantic descriptions: natural-language descriptions (e.g.,
"Real-time weather conditions for any city") rank higher in semantic search than bare endpoint names like/weather. Include adescriptionfield in your route config or Bazaar extension metadata. Keep it to 500 characters or fewer — the CDP Facilitator rejects bothverifyandsettlerequests whosedescriptionexceeds this limit. - Validate against the Bazaar schema: ensure your extension
inputstrictly matchesschema.properties.input, and inspect theEXTENSION-RESPONSESheader on verify/settle (see Bazaar extension validation) if discovery is not picking up your route. - Maintain activity to stay visible: resources with no settlements for 30 days are removed from both the catalog and search results. Ensure your service receives ongoing traffic to remain discoverable.
For buyers
- Cache discovery results: don’t query discovery on every request.
- Handle pagination: on
/discovery/resources, useoffsetandlimitfor large result sets. On the CDP/discovery/searchendpoint, there is no pagination—tightenqueryand filters instead of page-walking the catalog. - Validate compatibility: confirm each hit’s
acceptsentries match the wallet and networks you use with CDP (see Network Support). - Prefer search for CDP discovery at scale: use
/v2/x402/discovery/searchwhen you need relevance, filters, or quality-ranked results; use/discovery/resourceswhen you need a traditional paginated inventory.
Support
- GitHub: github.com/x402-foundation/x402
- Discord: Join #x402 channel
- Documentation: x402 Overview
FAQ
How do I get listed in the Bazaar, and when does my service show up?
Register thebazaarResourceServerExtension, include declareDiscoveryExtension() in your route configuration, and complete a payment through the CDP Facilitator so that CDP settles at least once for that URL (verify + settle is the normal flow). There is no separate registration step: the first successful settlement for a Bazaar-enabled route is when CDP catalogs it.
What is a curated endpoint?
Curated endpoints are resources that Coinbase has admitted and verified beyond the automatic indexing every Bazaar-enabled route receives. They carrycurated: true, may include a skillUrl pointing to a hosted SKILL.md, and are ranked above non-curated results (see Curated endpoints).
How do I become a curated endpoint?
Curation is a Coinbase-managed partner process — there is no self-serve toggle today, and meeting the criteria below makes you eligible for consideration, not automatically curated. At minimum, an endpoint must:- Be live and indexed — your route settles through the CDP Facilitator, returns
402, and declares a validextensions.bazaarblock. Confirm this with the validate endpoint. - Be reliable — providers are expected to sustain roughly 99% availability; curated endpoints are continuously health-probed.
- Ship complete, accurate metadata — a clear natural-language description, input/output schemas, and realistic examples. A hosted
SKILL.mdis recommended for agent consumers.
How do I check my endpoint is set up correctly before going live?
Use the validate endpoint (POST /v2/x402/validate). It probes your URL live and reports whether it is reachable, returns 402, advertises a parseable extensions.bazaar block, and would be accepted for indexing — without running a payment.
Can I opt out of discovery?
Yes; omit the Bazaar extension from a route’s configuration. Only routes that declare Bazaar metadata can appear in CDP discovery.What networks are supported?
CDP discovery surfaces whatever networks your indexed resources advertise inaccepts. For which chains the CDP Facilitator can verify and settle on, see Network Support.
How often is the discovery catalog updated?
CDP updates catalog entries as it processes new settle traffic for Bazaar-enabled routes. Quality metrics (buyer reach, transaction volume, recency) are recomputed on a 6-hour schedule, so a newly settled payment will not immediately affect ranking. If your service does not appear to move up in search results right away, this is expected — allow up to 6 hours for quality signal changes to take effect.Is there a test Bazaar for development?
Yes. Use the CDP Facilitator on Base Sepolia or Solana Devnet with CDP API keys—the same…/v2/x402/discovery/... endpoints will surface services once verify/settle has run through CDP (see Network Support). If you need a no-signup testnet facilitator, the x402.org facilitator exposes its own separate catalog at https://x402.org/facilitator/discovery/resources; that index is not the CDP Bazaar.
Can I list endpoints that require auth or return 200 without payment?
Today, CDP indexes routes that return 402 and complete settle through CDP. Endpoints that need pre-auth, return 200 without payment, or use $0 “discovery-only” flows may not be cataloged. Support for these patterns is under consideration.What does searchMethod: "hybrid" mean in the search response?
CDP Bazaar combines text and semantic search by default and reports "hybrid" in searchMethod. "vector" is returned when semantic search runs alone; "text" is returned when only full-text search runs (for example, when semantic search is unavailable). This field is not a request parameter — it reflects how CDP satisfied your query.
Why does a search for a domain name return results even when nothing matches the description?
CDP applies a URL substring fallback when the primary search returns zero results for a text query. If your query (for example,"agents.alchemy.com") matches a resource’s endpoint URL but not any indexed descriptions, CDP retries using the query as a URL substring filter and includes those resources in the response. The searchMethod field still reflects the primary mode; the fallback is transparent to callers.