Public catalog API
The two public, unauthenticated endpoints -- GET /v1/catalog and /v1/catalog/search.
These are the only fully public, unauthenticated endpoints PolymitaPay
exposes — what wallet-mcp-server (or any other external client) uses to
discover the approved catalog and search it. Everything else (registering
a provider, admin actions, payouts) requires an authenticated account.
GET /v1/catalog
curl "https://api.polymitapay.com/v1/catalog?network=testnet"| Query param | Values | Default |
|---|---|---|
network | testnet | mainnet | mainnet if omitted or anything else |
Returns only providers that are both: status === "APPROVED" and
network equal to the requested one. A provider pending review, rejected,
suspended, or registered on the other network simply won't appear — see
Troubleshooting if you expected one to.
Response shape
[
{
"id": "c3053eec-e0b9-42e3-b567-c6436104a240",
"name": "Welcome Message!!",
"tools": [
{
"toolName": "summarize",
"description": "Summarizes a piece of text into 2-3 sentences.",
"pricePerCall": "1000000",
"pricePerCallRlusd": "1.5"
}
]
}
]pricePerCall is in drops (1 XRP = 1,000,000 drops); pricePerCallRlusd
is a plain decimal amount. description is owner-typed at registration —
same trust model as toolName and price, never introspected from the real
MCP server. Neither the provider's real mcpUrl nor its
receivingWalletAddress is ever exposed here — consumers always go
through PolymitaPay's own proxy, never straight to the real MCP.
GET /v1/catalog/search
Semantic search over the same approved+network-filtered catalog —
matches by meaning, not just literal keyword overlap. wallet-mcp-server's
polymitapay_search tool calls this instead of doing any search locally.
curl "https://api.polymitapay.com/v1/catalog/search?q=hello&network=testnet"| Query param | Required | Values |
|---|---|---|
q | yes | Free text — matched semantically against each tool's toolName + description. |
network | no | testnet | mainnet (same default as above). |
Ranking runs on local embeddings (all-MiniLM-L6-v2, computed once per tool
at registration/edit time) — no external API call happens per search.
Response shape
[
{
"providerId": "c3053eec-e0b9-42e3-b567-c6436104a240",
"providerName": "Welcome Message!!",
"toolName": "summarize",
"description": "Summarizes a piece of text into 2-3 sentences.",
"pricePerCall": "1000000",
"pricePerCallRlusd": "1.5"
}
]Results are ordered by relevance (most relevant first), capped at 20.