---
title: "List a catalog's product sets"
method: GET
path: "/v1/ads/catalogs/{catalogId}/product-sets"
tags: ["Product Catalogs"]
---

# List a catalog's product sets

`GET /v1/ads/catalogs/{catalogId}/product-sets`

## Request

- Base URL: `https://zernio.com/api`
- URL: `https://zernio.com/api/v1/ads/catalogs/{catalogId}/product-sets`
- Auth: HTTP bearer

Lists a Meta catalog's product sets, the groups of products a catalog ad promotes.

Pass the chosen set id, not the parent catalog id, as `promotedObject.productSetId` on POST /v1/ads/create with `goal: catalog_sales`.

## Path parameters

- `catalogId` string, required

## Query parameters

- `accountId` string, required
- `catalogAccountId` string

## Response `200`

Product sets

- object
  - `productSets` object[]
    - `id` string
    - `name` string
    - `productCount` integer

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key. `code` is `missing_credentials` when no Authorization header was sent and `invalid_credentials` when the key is unknown, revoked or expired.
- `403`: The Meta login behind the account lacks catalog_management (code insufficient_permissions). The permission is pending Meta App Review and is not requested on connect yet, so reconnecting does not add it. Pass catalogAccountId naming a facebook, instagram or metaads connection whose Meta login already holds it.
- `404`: Resource not found

## Changes

- **2026-10-06** `f8c8f34fb41a`: 3 warning
  - added the new `account` enum value to the `details/budgetScope` response property for the response status `400`
  - added the new `account` enum value to the `details/budgetScope` response property for the response status `401`
  - added the new `account` enum value to the `details/budgetScope` response property for the response status `403`
- **2026-10-02** `d556591af3f6`: 9 info
  - added the optional property `code` to the response with the `401` status
  - added the optional property `details` to the response with the `401` status
  - added the optional property `docUrl` to the response with the `400` status
  - added the optional property `docUrl` to the response with the `401` status
  - …5 more
- **2026-09-30** `16a7b9d5373e`: 2 info
  - removed the `platform` enum value from the `details/budgetScope` response property for the response status `400`
  - removed the `platform` enum value from the `details/budgetScope` response property for the response status `403`
- **2026-09-25** `2c04683ce694`: 8 info
  - added the optional property `details/adAccountId` to the response with the `400` status
  - added the optional property `details/adAccountId` to the response with the `403` status
  - added the optional property `details/createdObjects` to the response with the `400` status
  - added the optional property `details/createdObjects` to the response with the `403` status
  - …4 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/ads/catalogs/:catalogId/product-sets/get.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/4e74db179e73?raw)
