Canopy

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

ParamTypeDescription
slug (or slugs)stringA 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
}
FieldTypeDescription
resultsobjectMap of slug → service record (or null when the slug isn't in the registry).
resolvedCountintegerNumber of slugs that matched a registered service.
unresolvedCountintegerNumber 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.