Catalog
The catalog lists every endpoint in the ecosystem, in three tiers: Premium, Standard and Open Ecosystem. See Source trust tiers.
The full catalog, with all three tiers, is published at https://powaagent.ai/catalog/catalog.json. You can also browse it on the portal's Catalog page and at powaagent.ai/data.
The catalog API
The catalog API returns only the Premium and Standard listings, with their inputs and per-call prices. You don't need a key to read it.
GET https://api.powahub.ai/catalog
The same document is also available at GET https://api.powaagent.ai/buyers/catalog.
The PowaAgent connector reads this endpoint to build its per-service tools, and the Skill reads it to match your requests.
Open Ecosystem endpoints aren't returned by the catalog API. Your agent finds them in the public x402 Bazaar with search_bazaar and pays them with pay_x402.
Response
{
"paymentDetails": [ ... ],
"sandboxPaymentDetails": [ ... ],
"catalog": [ ... ]
}
paymentDetails and sandboxPaymentDetails
These describe how the listings are paid, live and in the sandbox. Illustrative values:
"paymentDetails": [
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0x<pay-to address>",
"maxTimeoutSeconds": 300,
"extra": { "name": "USD Coin", "version": "2" }
}
]
sandboxPaymentDetails is the same, on eip155:84532 (Base Sepolia).
catalog
One entry per listing. Here's an illustrative entry, with placeholder values:
{
"id": "00000000-0000-0000-0000-000000000000",
"name": "example-lookup",
"url": "https://api.example.com/v1/lookup",
"path": "/{input}",
"description": "Look up a record by its ID. ...",
"priceUsdc": 0.01,
"method": "GET",
"tier": "PREMIUM",
"sandboxAvailable": true,
"inputs": {
"path": [
{ "key": "input", "description": "The ID to look up.", "required": false }
],
"query": [],
"header": [
{ "key": "X-Sandbox-Mode", "description": "Optional. Set to true to route the request to the sandbox (testnet) endpoint; omit for production (mainnet).", "required": false }
]
},
"tags": ["Example", "Lookup"],
"source": {
"freshnessBand": "Static",
"uptime": "Monitored",
"license": "<license>",
"underlyingSource": "<underlying source>"
}
}
| Field | Description |
|---|---|
id | The service's unique ID. It matches provenance.service_id in connector results. |
name | The service name. It's also the connector tool name. |
url | The base URL to call |
path | The path to add to url, with {placeholders} for path inputs |
description | What the service returns |
priceUsdc | The price per call in USDC, as published by the seller |
method | The HTTP method: GET or POST |
tier | PREMIUM or STANDARD. See Source trust tiers. |
sandboxAvailable | Whether the service has a sandbox |
inputs | The path, query and header inputs the service accepts, plus body for POST services |
tags | Keywords for matching requests to services |
source | Premium services only: freshness, uptime, license and underlying source |
Calling a Premium or Standard listing
Build the URL from url and path, filling in the path inputs. For the illustrative entry above, with the placeholder input ABC123:
GET https://api.example.com/v1/lookup/ABC123
The first call returns 402 Payment Required with the price and payment details. Sign the payment with Sign a payment and call again with the payment header.
For the sandbox, send X-Sandbox-Mode: true to the service and sign with the same header. Only services with sandboxAvailable: true have a sandbox.
The listings change as sellers list, update and remove services. Read them from the endpoint.