---
title: "Create a product set"
method: POST
path: "/v1/ads/catalogs/{catalogId}/product-sets"
tags: ["Product Catalogs"]
---

# Create a product set

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

A product set is a filter over the catalog, e.g. `{"retailer_id": {"is_any": ["sku-1", "sku-2"]}}` or `{"brand": {"i_contains": "acme"}}` (Meta's product set filter syntax).

## Path parameters

- `catalogId` string, required

## Request body

- object
  - `accountId` string, required
  - `catalogAccountId` string
  - `name` string, required
  - `filter` object, required — Meta product set filter

## Response `201`

Product set created

- object
  - `productSet` MetaProductSet
    - `id` string
    - `name` string
    - `productCount` integer
    - `filter` object, nullable

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `403` — The Meta login behind the account lacks catalog_management (code insufficient_permissions). Reconnect granting it, or pass catalogAccountId.
- `404` — Resource not found

## Changes

- **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
- **2026-09-17** `fdaf9a9fb1a7` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/ads/catalogs/:catalogId/product-sets/post.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/e0122970214f?raw)
