Skip to main content
Think of it as a search index for payable APIs and MCP tools, enabling the autonomous discovery and consumption of services. The x402 Bazaar is in early development. While our vision is to build the “Google for agentic endpoints,” we’re currently more like “Yahoo search” - functional but evolving. Features and APIs may change as we gather feedback and expand capabilities.

Overview

The Bazaar solves a critical problem in the x402 ecosystem: discoverability. Without it, x402-compatible endpoints and MCP tools are like hidden stalls in a vast market. The Bazaar provides:
  • For Buyers (API Consumers): Programmatically discover available x402-enabled services (HTTP endpoints and MCP tools), understand their capabilities, pricing, and schemas
  • For Sellers (API Providers): Automatic visibility for your x402-enabled services to a global audience of developers and AI agents
  • For AI Agents: Dynamic service discovery without pre-baked integrations - query, find, pay, and use

How It Works

Facilitators that support the Bazaar extension may provide a /discovery/resources endpoint that returns all x402-compatible services registered through the respective facilitator. Services (HTTP endpoints and MCP tools) are discoverable when they include the bazaar extension in their route configuration. Note: The spec for marketplace items is open and part of the x402 scheme, meaning any facilitator can implement their own discovery layer.

Basic Flow

  1. Discovery: Clients query the /discovery/resources endpoint to find available services
  2. Selection: Choose a service based on price, capabilities, and requirements
  3. Execution: Use x402 to pay for and access the selected service
  4. No Manual Setup: No API keys, no account creation, just discover and pay

API Reference

List Endpoint

Retrieve all available x402-compatible endpoints and MCP tools:
Coinbase
GET https://api.cdp.coinbase.com/platform/v2/x402/discovery/resources
PayAI
GET https://facilitator.payai.network/discovery/resources
Note: The recommended way to use this endpoint is to use the useFacilitator hook as described below. Response Schema Each resource in the list contains the following fields:
{
  "accepts": [
    {
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "description": "",
      "extra": {
        "name": "USD Coin",
        "version": "2"
      },
      "maxAmountRequired": "200",
      "maxTimeoutSeconds": 60,
      "mimeType": "",
      "network": "eip155:8453",
      "outputSchema": {
        "input": {
          "method": "GET",
          "type": "http"
        },
        "output": null
      },
      "payTo": "0xa2477E16dCB42E2AD80f03FE97D7F1a1646cd1c0",
      "resource": "https://api.example.com/x402/weather",
      "scheme": "exact"
    }
  ],
  "lastUpdated": "2025-08-09T01:07:04.005Z",
  "metadata": {},
  "resource": "https://api.example.com/x402/weather",
  "type": "http",
  "x402Version": 2
}
Resource Types The type field indicates the resource type:
  • "http" - HTTP endpoints (GET, POST, PUT, PATCH, DELETE, HEAD)
  • "mcp" - MCP (Model Context Protocol) tools
For MCP tools, the outputSchema.input object will contain:
  • type: "mcp" - Identifies this as an MCP tool
  • tool - The MCP tool name (used in tools/call requests)
  • inputSchema - JSON Schema for the tool’s arguments (follows MCP Tool.inputSchema format)
  • description - Human-readable description of the tool (optional)
  • transport - MCP transport protocol: "streamable-http" (default) or "sse" (optional)
  • example - Example arguments object (optional)
Note: For MCP tools, the unique resource identifier is the tuple (resource, input.tool) since MCP multiplexes multiple tools over a single server endpoint.

Quickstart for Buyers

Step 1: Discover Available Services

Fetch the list of available x402 services using the facilitator client:
import { HTTPFacilitatorClient } from "@x402/core/http";
import { withBazaar } from "@x402/extensions";

const facilitatorClient = new HTTPFacilitatorClient({
  url: "https://x402.org/facilitator"
});
const client = withBazaar(facilitatorClient);

const response = await client.extensions.discovery.listResources({ type: "http" });

// Filter services under $0.10
const usdcAsset = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
const maxPrice = 100000; // $0.10 in USDC atomic units (6 decimals)

const affordableServices = response.items.filter(item =>
  item.accepts.find(paymentRequirements =>
    paymentRequirements.asset === usdcAsset &&
    Number(paymentRequirements.maxAmountRequired) < maxPrice
  )
);

Step 2: Call a Discovered Service

Once you’ve found a suitable service, use an x402 client to call it:
import { wrapAxiosWithPayment, x402Client } from "@x402/axios";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import axios from "axios";
import { privateKeyToAccount } from "viem/accounts";

// Set up your payment account
const account = privateKeyToAccount("0xYourPrivateKey");
const client = new x402Client();
client.register("eip155:*", new ExactEvmScheme(account));

// Select a service from discovery
const selectedService = affordableServices[0];

// Create a payment-enabled client for that service
const api = wrapAxiosWithPayment(
  axios.create({ baseURL: selectedService.resource }),
  client
);

// Select the payment method of your choice
const selectedPaymentRequirements = selectedService.accepts[0];
const inputSchema = selectedPaymentRequirements.outputSchema.input;

// Build the request using the service's schema
const response = await api.request({
  method: inputSchema.method,
  url: inputSchema.resource,
  params: { location: "San Francisco" } // Based on inputSchema
});

console.log("Response data:", response.data);

Quickstart for Sellers

Listing with Bazaar Extension

Add the bazaar extension to your route configuration to make your API or MCP tools discoverable. Supported Resource Types:
  • HTTP Endpoints - Standard REST APIs (GET, POST, PUT, PATCH, DELETE, HEAD)
  • MCP Tools - Model Context Protocol tools for AI agent integration

Adding Metadata

To enhance your listing with descriptions and schemas, include them when setting up your x402 middleware. You should include descriptions for each parameter to make it clear for agents to call your endpoints:
import { paymentMiddleware } from "@x402/express";
import { x402ResourceServer, HTTPFacilitatorClient } from "@x402/core/server";
import { ExactEvmScheme } from "@x402/evm/exact/server";
import { bazaarResourceServerExtension } from "@x402/extensions";

const facilitatorClient = new HTTPFacilitatorClient({
  url: "https://x402.org/facilitator"
});
const server = new x402ResourceServer(facilitatorClient);
server.register("eip155:*", new ExactEvmScheme());

const routes = {
  "GET /weather": {
    price: "$0.001",
    network: "eip155:8453",
    resource: "0xYourAddress",
    description: "Get current weather data for any location",
    extensions: {
      bazaar: {
        discoverable: true,
        inputSchema: {
          queryParams: {
            location: {
              type: "string",
              description: "City name or coordinates",
              required: true
            }
          }
        },
        outputSchema: {
          type: "object",
          properties: {
            temperature: { type: "number" },
            conditions: { type: "string" },
            humidity: { type: "number" }
          }
        }
      }
    }
  }
};

app.use(paymentMiddleware(routes, server));

Coming Soon

The x402 Bazaar is rapidly evolving, and your feedback helps us prioritize features.

Support

FAQ

Q: How do I get my service listed? A: Add the bazaar extension to your route configuration. See the examples above. Q: How can I make endpoint calls more accurate? A: Include descriptions clearly stating what each parameter does and how to call your endpoint, but do so as succinctly as possible. Q: How does pricing work? A: Listing is free. Services set their own prices per API call, paid via x402. Q: What networks are supported? A: Currently Base (eip155:8453), Base Sepolia (eip155:84532), Solana (solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp), and Solana Devnet (solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1) with USDC payments. Q: Can I list non-x402 services? A: No, only x402-compatible endpoints can be listed. See our Quickstart for Sellers to make your API x402-compatible. Q: What are MCP tools and how do they work with Bazaar? A: MCP (Model Context Protocol) tools are AI-agent-friendly interfaces that can be discovered and paid for through x402. When listing an MCP tool, include type: "mcp" in the bazaar extension along with the tool name and input schema. The unique identifier for MCP tools is the combination of the resource URL and tool name, since multiple tools can be served from a single MCP endpoint.