Skip to main content

Listing schema

A listing is one provider with one or more services (endpoints). The catalog is an array of these entries. Below is the exact shape the marketplace validates.

Provider entry​

FieldTypeRequiredNotes
idstring✓Stable, unique provider id (slug).
namestring✓Human-readable provider name.
descriptionstring✓What you offer. Plain description only — see security.
mcpUrlurl✓Your MCP server URL (for MCP-based discovery).
servicesarray✓One or more service entries (below), at least one.
tagsstring[]—Discovery tags. Defaults to [].
activeboolean—Defaults to true. Only active providers are ingested.
payTo0x address—Optional. Pins the recipient; see pricing & payTo.

Service entry​

FieldTypeRequiredNotes
urlurl✓The x402-payable endpoint. HTTPS required.
method"GET" | "POST"✓HTTP method agents call.
priceUSDCstring✓Decimal string, e.g. "0.01". Must match your 402 challenge.
capabilitystring✓Short capability label, e.g. xdc.defi.rates.summary.

Example​

[
{
"id": "acme-data",
"name": "Acme Data",
"description": "Real-time DeFi lending rates and USDC metrics on XDC.",
"mcpUrl": "https://api.acme.example/mcp",
"tags": ["defi", "rates", "usdc", "xdc"],
"active": true,
"services": [
{
"url": "https://api.acme.example/x402/rates/summary",
"method": "GET",
"priceUSDC": "0.01",
"capability": "xdc.defi.rates.summary"
},
{
"url": "https://api.acme.example/x402/usdc/metrics",
"method": "GET",
"priceUSDC": "0.02",
"capability": "xdc.usdc.metrics"
}
]
}
]

Rules & tips​

  • payTo is not part of a service — it's attached at the provider level (derived or pinned). See pricing & payTo.
  • Keep capability values namespaced and specific (xdc.<domain>.<thing>) so ranking and filtering work well.
  • Rich, accurate tags improve how often agents find you for relevant tasks.
  • The schema is permissive about extra keys, so you may annotate freely — unknown fields are ignored.
  • priceUSDC must be a plain decimal string like "0.01" (no $, no units).

Next: Make an x402 endpoint →