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:
| Source | What it is |
|---|---|
catalog | Hand-curated third-party x402 services (sales data, security scanners, content APIs, etc.) |
bazaar | Community-submitted listings (subject to review) |
ampersend | First-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.mdintegrations for agent frameworks - Ampersend link — the
ampersend_agent_addressfield 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 (8453 → base, 84532 → base-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):
| Param | Type | Description |
|---|---|---|
source | catalog | bazaar | ampersend | Filter by listing source |
category | string | Exact-match category (e.g. Crypto, Search, Compliance) |
search | string | Substring match across name, description, category, and tags |
network | base | base-sepolia | Override 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:
- Your agent has an Ampersend wallet (see Create Agent).
- Your HTTP client sends the request to the endpoint's
url. - The endpoint returns
402 Payment Requiredwith the price andpayToaddress. - 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;
}