GET /api/resolve
Look up one or more registered services by slug. Returns the full service record — name, category, payment methods (one per supported rail), and catalog-declared endpoints with pricing.
This is informational metadata; the SDK doesn't call it during pay() or fetch() flows. Use it when you need to show service details in your own UI, or to inspect what realm/baseUrl combinations are registered for a service.
Base URL: https://trycanopy.ai
Auth: API key (Authorization: Bearer ak_live_…).
Request
GET /api/resolve?slug=<slug>
GET /api/resolve?slugs=<slug1>,<slug2>,<slug3>Query parameters
| Param | Type | Description |
|---|---|---|
slug (or slugs) | string | A single canonical service slug (e.g. openai), or a comma-separated list. |
200 — resolved
{
"results": {
"openai": {
"id": "f3e1c8d2-...",
"slug": "openai",
"name": "OpenAI",
"description": "...",
"category": "compute",
"logoUrl": "...",
"docsUrl": "...",
"paymentMethods": [
{
"realm": "openai.mpp.tempo.xyz",
"baseUrl": "https://openai.mpp.tempo.xyz",
"protocol": "mpp-tempo"
}
],
"endpoints": [
{
"method": "POST",
"path": "/v1/chat/completions",
"description": "Chat completions",
"priceAtomic": null,
"currency": "USDC",
"pricingModel": "dynamic",
"protocol": "mpp-tempo"
}
]
},
"unknown-slug": null
},
"resolvedCount": 1,
"unresolvedCount": 1
}| Field | Type | Description |
|---|---|---|
results | object | Map of slug → service record (or null when the slug isn't in the registry). |
resolvedCount | integer | Number of slugs that matched a registered service. |
unresolvedCount | integer | Number of slugs that returned null. |
400 — bad request
Returned when no slug parameter is supplied or every supplied slug is empty.
401 — invalid API key
Example
curl --request GET \
--url "https://trycanopy.ai/api/resolve?slug=openai,browserbase" \
--header "Authorization: Bearer ak_live_..."Migration note
This endpoint previously returned { address, entity } for an ?entity=… slug query. That shape was tied to the old address-keyed registry and is gone. Service slugs are now the registry's identity unit — there is no per-service cached address. Recipient addresses are runtime facts that arrive in each 402 response and are recovered by the server during /api/sign.