---
title: "Create a Meta product catalog"
method: POST
path: "/v1/ads/catalogs"
tags: ["Product Catalogs"]
---

# Create a Meta product catalog

`POST /v1/ads/catalogs`

Creates a Meta Commerce catalog in the business portfolio (resolved like GET). The same catalog serves Advantage+ catalog ads, Instagram/Facebook Shops and the WhatsApp Business catalog: link it to a WhatsApp number with POST /v1/whatsapp/catalogs. Needs catalog_management on the Meta login.

## Request body

- object
  - `accountId` string, required — A facebook, instagram, metaads or whatsapp account ID
  - `catalogAccountId` string — Account whose Meta login token performs the call (see GET)
  - `adAccountId` string — Ad account whose owner business creates the catalog
  - `businessId` string — Business portfolio that owns the catalog
  - `name` string, required
  - `vertical` 'commerce' | 'vehicles' | 'hotels' | 'flights' | 'destinations' | 'home_listings' | 'local_service_business' | 'offline_commerce' | 'ticketed_experiences' | 'transactable_items'

## Response `201`

Catalog created

- object
  - `catalog` MetaProductCatalog
    - `id` string
    - `name` string
    - `vertical` string, nullable — Catalog vertical (e.g. commerce, vehicles, hotels)
    - `productCount` integer
    - `businessId` string, 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` — The account or requested resource was not found or is not accessible. An account ID may have been disconnected and removed. Read GET /v1/accounts for current account IDs.
- `409` — The account exists but is inactive or needs reconnection. Reconnect it, then read GET /v1/accounts for its current account ID before retrying. Code: ads_connection_required.

## Changes

- **2026-09-25** `2c04683ce694` — 16 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/adAccountId` to the response with the `404` status
  - added the optional property `details/adAccountId` to the response with the `409` status
  - …12 more
- **2026-09-17** `fdaf9a9fb1a7` — 1 info
  - endpoint added

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