---
title: "List Catalog"
method: GET
path: "/catalog"
tags: ["Catalog"]
---

# List Catalog

`GET /catalog`

List a keyset page of browsable catalog entries (search/filter aware).

The catalog holds thousands of entries, so this is cursor-paginated like
``GET /apis``: follow ``next_cursor`` until ``has_more`` is false.
``catalog_total``/``registered_count``/``outdated_count`` count the whole
manifest, not the page, so the Discover status row stays stable while scrolling.

## Query parameters

- `q` string, nullable
- `registered_only` boolean
- `unregistered_only` boolean
- `outdated_only` boolean
- `include_snoozed` boolean
- `cursor` string, nullable
- `limit` integer

## Response `200`

Successful Response

- CatalogListResponse — List of catalog entries plus status fields for the Discover status row.
  - `catalog_total` integer, required — Total entries in the whole manifest (pre-filter, pre-page).
  - `data` CatalogEntryResponse[], required — The page of catalog entries.
    - `_links` CatalogEntryLinksResponse, required — Hypermedia links for a catalog entry.
      - `github` string, nullable — Human-facing GitHub tree URL for the entry, when known.
      - `import` string, required — URL of the catalog import action (`POST /catalog/{api_id}:import`).
      - `operations` string, required — URL of the entry's operation preview.
      - `self` string, required — Canonical URL of this catalog entry.
    - `api_id` string, required — Catalog identity of the API (manifest domain, e.g. `stripe.com`).
    - `path` string, nullable, required — Manifest path of the entry within the public-APIs repo.
    - `registered` boolean, required — Whether this entry is already imported locally — its `spec_url` backs a non-archived revision in `GET /apis`.
    - `spec_url` string, nullable, required — Fetchable OpenAPI spec URL the entry resolves to (used for import + coverage).
    - `update_available` boolean — Whether this (registered) entry has an upstream spec update the local revision hasn't adopted yet. Always false for unregistered entries.
    - `vendor` string, nullable, required — Registrable-domain vendor derived from `api_id` (e.g. `stripe.com`).
  - `has_more` boolean — Whether another page follows.
  - `manifest_age_seconds` integer, nullable — Age of the cached manifest in seconds, or null when the cache is empty.
  - `next_cursor` string, nullable — Opaque keyset cursor for the next page (null when done).
  - `outdated_count` integer — Count of whole-manifest registered entries with an upstream update available.
  - `registered_count` integer, required — Count of whole-manifest entries already imported locally.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `422` — Unprocessable Entity
- `500` — Internal Server Error
- `503` — Service Unavailable

---

[API](https://skmtc.net/jentic/apis/jentic-control-plane-api.md) · [All operations](https://skmtc.net/jentic/apis/jentic-control-plane-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/jentic/jentic-control-plane-api/revisions/7cc96b2f28d4/schema)
