---
title: "Browse the API catalog"
method: GET
path: "/catalog"
---

# Browse the API catalog

`GET /catalog`

Every API AnyAPI can serve right now, with its normalized input and output contract's location, its USD pricing, and the sources behind it. Reading the catalog is free and needs no key. Each entry's `method` and `path` are the gateway's own authority on how to call it: use them rather than rebuilding a route from the slug. Schemas are omitted here to keep the response small; GET /v1/apis/{sku} returns them for one API.

## Query parameters

- `category` string

## Response `200`

The customer-safe catalog.

- object
  - `apis` CatalogAPI[], required
    - `beta` boolean — Present when this API is published as beta. A maturity label only: a beta API routes, serves and bills exactly like any other.
    - `category` string, required — The API's category, accepted back as the `category` scope.
    - `description` string, required — One-line summary of what this API returns.
    - `excludesCallerDelay` boolean — Present when this API accepts a caller-requested wait. The published latency is net of that wait, so a caller who uses it measures a longer time.
    - `execution` DiscoveryExecution, required
      - `mode` 'sync' | 'durable', required — sync answers on the run request; durable accepts the run as a Request you poll at GET /v1/requests/{id}.
    - `failover` boolean, required — True when more than one source can serve this API, so a failed attempt is retried on another. Derived from the published sources, never authored.
    - `heavy` boolean — True when a typical response is large enough to strain an agent's context window. Reach for the run response-budget controls (fields, max_items, summary, jq) before the first call.
    - `id` string, required — Stable identifier for this API.
    - `lanes` CatalogSourceOffer[], required — The sources that can serve this API, cheapest customer charge first. Each carries its own price and its own public identity.
      - `fields` string[] — The output fields this source returns, so you can see before calling which requireFields combinations one source can serve together. Absent when the set is not known for the source.
      - `health` DiscoverySourceHealth
        - `latencyP50Ms` integer, required — Median successful service time for this source, in milliseconds.
        - `latencySample` integer, required — Requests behind latencyP50Ms.
        - `requests` integer, required — Requests routed to this source in the window.
        - `servedRequests` integer, required — Requests this source served in the window.
        - `uptimePct` number, required — Share of requests this source served successfully, as a percentage.
        - `uptimeSample` integer, required — Requests behind uptimePct.
        - `window` '30d', required — The trailing window these measurements cover.
      - `pricing` DiscoveryOffer, required
        - `addons` object[] — Optional extras this offer sells, absent when it sells none. Each is switched on by a field in the request, so its price is known before the call and never moves. maxUsd bounds the metered charge alone: an extra the caller asked for is billed ON TOP of it, so the most one request can cost is maxUsd plus the extras it switched on.
          - `field` string, required — The input field that switches it on.
          - `id` string, required — Stable identifier for the extra.
          - `label` string, required — What the money buys, in the customer's words.
          - `usd` number, required — USD added to the request when that field is set.
        - `baseUsd` number — Linear offers only: USD charged for the call before per-unit billing.
        - `maxPer1kUsd` number, required — The same maximum in the per-1,000-request denomination AnyAPI quotes customers in. It is published rather than left to the client, so display this figure instead of scaling a price yourself.
        - `maxUsd` number, required — The most one request on this offer can be billed, in USD.
        - `model` 'flat' | 'linear', required — Pricing model. A flat offer is one price per request; a linear offer also carries baseUsd and perUnitUsd.
        - `perUnitUsd` number — Linear offers only: USD charged for each billable unit inside the call.
        - `unit` string, required — The billable unit. A flat offer always publishes "request".
      - `source` DiscoverySource, required
        - `artworkKey` string, required — Key for this source's artwork.
        - `id` string, required — Stable identifier for this source.
        - `kind` 'anonymous' | 'brand', required — anonymous is a stable identity for an unattributed source; brand names the dataset that supplies the data.
        - `name` string, required — Display name for this source.
    - `method` string, required — HTTP method for this API's concrete operation. Gateway authority: use it rather than assuming one.
    - `name` string, required — Display name.
    - `notServingSources` CatalogSourceOffer[] — Sources that belong to this API but are not being called right now: each served until it was withdrawn after failures, and each returns on its own once it passes again. Absent when every source is serving. Never merge these into the list above: the prices here cannot be charged and a failed call is not retried on them.
      - `fields` string[] — The output fields this source returns, so you can see before calling which requireFields combinations one source can serve together. Absent when the set is not known for the source.
      - `health` DiscoverySourceHealth
        - `latencyP50Ms` integer, required — Median successful service time for this source, in milliseconds.
        - `latencySample` integer, required — Requests behind latencyP50Ms.
        - `requests` integer, required — Requests routed to this source in the window.
        - `servedRequests` integer, required — Requests this source served in the window.
        - `uptimePct` number, required — Share of requests this source served successfully, as a percentage.
        - `uptimeSample` integer, required — Requests behind uptimePct.
        - `window` '30d', required — The trailing window these measurements cover.
      - `pricing` DiscoveryOffer, required
        - `addons` object[] — Optional extras this offer sells, absent when it sells none. Each is switched on by a field in the request, so its price is known before the call and never moves. maxUsd bounds the metered charge alone: an extra the caller asked for is billed ON TOP of it, so the most one request can cost is maxUsd plus the extras it switched on.
          - `field` string, required — The input field that switches it on.
          - `id` string, required — Stable identifier for the extra.
          - `label` string, required — What the money buys, in the customer's words.
          - `usd` number, required — USD added to the request when that field is set.
        - `baseUsd` number — Linear offers only: USD charged for the call before per-unit billing.
        - `maxPer1kUsd` number, required — The same maximum in the per-1,000-request denomination AnyAPI quotes customers in. It is published rather than left to the client, so display this figure instead of scaling a price yourself.
        - `maxUsd` number, required — The most one request on this offer can be billed, in USD.
        - `model` 'flat' | 'linear', required — Pricing model. A flat offer is one price per request; a linear offer also carries baseUsd and perUnitUsd.
        - `perUnitUsd` number — Linear offers only: USD charged for each billable unit inside the call.
        - `unit` string, required — The billable unit. A flat offer always publishes "request".
      - `source` DiscoverySource, required
        - `artworkKey` string, required — Key for this source's artwork.
        - `id` string, required — Stable identifier for this source.
        - `kind` 'anonymous' | 'brand', required — anonymous is a stable identity for an unattributed source; brand names the dataset that supplies the data.
        - `name` string, required — Display name for this source.
    - `path` string, required — Concrete gateway path for this API. Gateway authority: use it rather than rebuilding a route from the slug.
    - `pricing` DiscoveryPricing, required
      - `failoverMaxPer1kUsd` number, required — failoverMaxUsd in the per-1,000-request denomination.
      - `failoverMaxUsd` number, required — The greatest customer-price maximum across those same sources, in USD, including every optional extra a source sells.
      - `from` DiscoveryOffer, required
        - `addons` object[] — Optional extras this offer sells, absent when it sells none. Each is switched on by a field in the request, so its price is known before the call and never moves. maxUsd bounds the metered charge alone: an extra the caller asked for is billed ON TOP of it, so the most one request can cost is maxUsd plus the extras it switched on.
          - `field` string, required — The input field that switches it on.
          - `id` string, required — Stable identifier for the extra.
          - `label` string, required — What the money buys, in the customer's words.
          - `usd` number, required — USD added to the request when that field is set.
        - `baseUsd` number — Linear offers only: USD charged for the call before per-unit billing.
        - `maxPer1kUsd` number, required — The same maximum in the per-1,000-request denomination AnyAPI quotes customers in. It is published rather than left to the client, so display this figure instead of scaling a price yourself.
        - `maxUsd` number, required — The most one request on this offer can be billed, in USD.
        - `model` 'flat' | 'linear', required — Pricing model. A flat offer is one price per request; a linear offer also carries baseUsd and perUnitUsd.
        - `perUnitUsd` number — Linear offers only: USD charged for each billable unit inside the call.
        - `unit` string, required — The billable unit. A flat offer always publishes "request".
    - `provider` 'AnyAPI', required — Always "AnyAPI". AnyAPI is the provider of record for every API in the catalog.
    - `slug` string, required — The API's slug. Use it as {sku} on GET /v1/apis/{sku} and POST /v1/run/{sku}.
    - `tryEligible` boolean, required — True when this API can be run from the free public try surface.
    - `tryMaxItems` integer — The most items the free try returns. Present only when tryEligible is true, so a limit is never advertised for an API the public tool will refuse.

## Changes

> 428 revisions in range; 1 not diffed.

- **2026-09-20** `3db396a3db5e` — 1 info
  - added the optional property `apis/items/notServingSources` to the response with the `200` status
- **2026-09-16** `0ee34489b488` — 1 info
  - added the optional property `apis/items/lanes/items/fields` to the response with the `200` status
- **2026-09-14** `0a4209fe3636` — 2 info
  - added the optional property `apis/items/lanes/items/pricing/allOf[#/components/schemas/DiscoveryOffer]/addons` to the response with the `200` status
  - added the optional property `apis/items/pricing/allOf[#/components/schemas/DiscoveryPricing]/from/allOf[#/components/schemas/DiscoveryOffer]/addons` to the response with the `200` status
- **2026-09-03** `5048c1861d8d` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/getanyapi-com/apis/anyapi/changes/catalog/get.md)

---

[API](https://skmtc.dev/getanyapi-com/apis/anyapi.md) · [All operations](https://skmtc.dev/getanyapi-com/apis/anyapi/llms.txt) · [OpenAPI document](https://skmtc.dev/getanyapi-com/apis/anyapi/revisions/285e6a23cbf8?raw)
