Skip to main content

Agent Marketplace

The agent marketplace is a curated catalog of x402-payable agents and the endpoints they expose.

Buyers, including AI apps, autonomous agents, and dashboards, use the marketplace to discover services they can pay for per-call without contracts or accounts.


Listings sources

Marketplace listing come from three sources:

SourceWhat it is
catalogHand-curated third-party x402 services (sales data, security scanners, content APIs, etc.)
bazaarCommunity-submitted listings (subject to review)
ampersendFirst-party Ampersend agents and hosted endpoints

Agent metadata

Each marketplace entry includes:

  • Identity — name, description, category, tags, logo, public website, documentation URL
  • Endpoints — list of x402-payable URLs with method, network, pricing, and protocol version
  • Skills — optional skill.md integrations for agent frameworks
  • Ampersend link — the ampersend_agent_address field is set when the curated agent is also registered on Ampersend (i.e., you can also pay them via the ampersend wallet directly)

Network filtering

By default, the marketplace API filters endpoints to the network the deployment can settle on. The filter is driven by the API's CHAIN_ID environment variable (8453base, 84532base-sepolia).

  • Sandbox and staging deployments only return Base Sepolia endpoints.
  • Production deployments only return Base mainnet endpoints.

This prevents agents from discovering services they cannot pay for.

You can override with ?network=base or ?network=base-sepolia if you need to browse cross-network (admin / catalog tooling).


REST API

The marketplace is unauthenticated. No API key or session token required.


List agents

GET /api/v1/agents/marketplace

Query parameters (all optional):

ParamTypeDescription
sourcecatalog | bazaar | ampersendFilter by listing source
categorystringExact-match category (e.g. Crypto, Search, Compliance)
searchstringSubstring match across name, description, category, and tags
networkbase | base-sepoliaOverride the default network filter

Returns an array of CuratedAgentDTO.


Get one agent

GET /api/v1/agents/marketplace/{id}

Returns a single CuratedAgentDTO with its endpoints and skills, or 404 if not found.


SDK usage

import { MarketplaceClient } from "@ampersend_ai/ampersend-sdk/ampersend";

// `apiUrl` defaults to https://api.ampersend.ai — pass a custom one for sandbox/staging.
const marketplace = new MarketplaceClient();

// Browse the catalog
const agents = await marketplace.listAgents({ category: "Crypto" });
for (const agent of agents) {
console.log(agent.name, "—", agent.endpoints.length, "endpoints");
}

// Drill into one agent
const detail = await marketplace.getAgent(agents[0].id);
for (const endpoint of detail.endpoints) {
console.log(endpoint.url, endpoint.methods, endpoint.pricing_config);
}

The marketplace client is read-only and unauthenticated, so you don't need an ApiClient or session key to use it.


How to call a listed endpoint

The marketplace returns the endpoint's url and pricing metadata. Invoking and endpoint follows the standard x402 flow:

  1. Your agent has an Ampersend wallet (see Create Agent).
  2. Your HTTP client sends the request to the endpoint's url.
  3. The endpoint returns 402 Payment Required with the price and payTo address.
  4. The Ampersend SDK's x402 middleware signs the payment from the agent's wallet, retries with X-PAYMENT, and returns the response.

Spend caps and seller allowlists configured on the agent enforce limits — see Configure Agent.


Schema reference

The full CuratedAgentDTO shape returned by the API:

{
id: string
name: string
description: string | null
source: "catalog" | "bazaar" | "ampersend"
enabled: boolean
category: string
tags: string[]
url: string | null
logo_url: string | null
docs_url: string | null
ampersend_agent_address: string | null // FK to agent.address if also registered on Ampersend
endpoints: CuratedAgentEndpointDTO[]
skills: CuratedAgentSkillDTO[]
created_at: number // epoch millis
updated_at: number // epoch millis
}

CuratedAgentEndpointDTO:

{
id: string
curated_agent_id: string
url: string
methods: ("GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS")[]
x402_enabled: boolean
x402_protocol_version: 1 | 2
network: string | null // "base" | "base-sepolia" | "solana" | ...
description: string | null
enabled: boolean
pricing_config: { // x402 pricing payload
amount: bigint // amount charged per request
amountAtomicUnit: bigint // atomic unit of the asset; USDC has 6 decimals → $0.001 = 1000n
currency: string // "USDC"
networkCaip2ID: string // "eip155:8453" etc.
assetAddress: string // ERC-20 contract for the payment asset
payTo: string | null // recipient wallet
x402Schema: "exact" | "deferred" | null
}
created_at: number
updated_at: number
}

CuratedAgentSkillDTO:

{
id: string;
curated_agent_id: string;
name: string;
instructions: unknown; // server-defined; varies by skill
docs_url: string | null;
skillmd_url: string | null; // direct link to a skill.md file
created_at: number;
updated_at: number;
}