# Catalog SKUs

An SKU, or parent product, is the shared card of a product with offers: it has one name, description, and catalog section, while sizes, colors, and other variants are stored in [catalog offers](/docs/entities/catalog-offers). The methods in this section create, read, update, and delete parent products.

Bitrix24 API: `catalog.product.sku.*`
Scope: `catalog`

## Operations

- [Create an SKU](./catalog-skus/create.md) — `POST /v1/catalog-skus`
- [List SKUs](./catalog-skus/list.md) — `GET /v1/catalog-skus`
- [Get an SKU](./catalog-skus/get.md) — `GET /v1/catalog-skus/:id`
- [Update an SKU](./catalog-skus/update.md) — `PATCH /v1/catalog-skus/:id`
- [Delete an SKU](./catalog-skus/delete.md) — `DELETE /v1/catalog-skus/:id`
- [Search SKUs](./catalog-skus/search.md) — `POST /v1/catalog-skus/search`
- [SKU fields](./catalog-skus/fields.md) — `GET /v1/catalog-skus/fields`
- [Aggregate SKUs](./catalog-skus/aggregate.md) — `POST /v1/catalog-skus/aggregate`

## Key fields

| Field | Description |
|------|---------|
| `name` | Parent product name |
| `iblockId` | Product catalog ID. Required in the list, search, and aggregation filter. List: [`GET /v1/catalogs`](/docs/entities/catalogs) |
| `type` | Product type, computed by Bitrix24: `6` — parent product without offers, `3` — with offers |
| `iblockSectionId` | Main catalog section ID. List: [`GET /v1/catalog-sections`](/docs/entities/catalog-sections) |
| `active` | Whether the product is active |
| `code` | Product symbolic code |

Full list of fields — [`GET /v1/catalog-skus/fields`](./catalog-skus/fields.md).

## What to know before you start

1. **A parent product and its offers live in different catalogs.** The parent product is stored in the product catalog, its offers in the offer catalog. In [`GET /v1/catalogs`](/docs/entities/catalogs), the offer catalog is identified by the `productIblockId` field: it holds the `iblockId` of the product catalog. An offer references its parent product through the `parentId` field.
2. **List, search, and aggregation require a product catalog filter.** Without `filter[iblockId]`, the request returns `400 MISSING_REQUIRED_FILTER`. The `iblockId` of an offer catalog is rejected with `422 BITRIX_ERROR`.
3. **The product type changes on its own.** A new parent product gets `type: 6`. Once the first [offer](/docs/entities/catalog-offers/create) is linked, the type becomes `3`. The `type` filter accepts one exact number — `3` or `6`. When the last offer of a parent product is deleted, it becomes a regular product with `type: 1` and drops out of `/v1/catalog-skus` — from then on, read it through [Catalog products](/docs/entities/catalog-products).
4. **Creating requires at least two fields.** `name` and `iblockId` are required. The `type`, `available`, and `bundle` fields are computed by Bitrix24 and cannot be passed.
5. **Deleting a parent product also deletes its offers.** They cannot be restored through the API.
6. **The `get` response is more detailed than the `list` response.** A single record by `id` contains the symbolic code, texts, images, the `iblockSection` array of sections, and catalog properties of the form `propertyNNN`. List and search return a reduced set of fields. Other fields and properties are returned with an explicit `select`, except `iblockSection`: the list does not return it.
7. **`DELETE` and `PATCH` do not check that the `id` belongs to a parent product.** With the `id` of a regular product, `DELETE` returns `204` and deletes that product, and `PATCH` updates it and returns `404 ENTITY_NOT_FOUND`. Before writing, check the record with [`GET /v1/catalog-skus/:id`](./catalog-skus/get.md): for the `id` of a regular product, it returns `404 ENTITY_NOT_FOUND`.

## Typical scenario

1. Find the product catalog and the offer catalog: [`GET /v1/catalogs`](/docs/entities/catalogs).
2. Create a parent product: [`POST /v1/catalog-skus`](./catalog-skus/create.md).
3. Add offers to it with `parentId`: [`POST /v1/catalog-offers`](/docs/entities/catalog-offers/create).
4. Find parent products with offers: [`GET /v1/catalog-skus?filter[iblockId]=25&filter[type]=3`](./catalog-skus/list.md).
5. Update or delete a parent product: [`PATCH /v1/catalog-skus/:id`](./catalog-skus/update.md) / [`DELETE /v1/catalog-skus/:id`](./catalog-skus/delete.md).

## Limits

| Limit | Value |
|-------|----------|
| Maximum records per request | 5000 (`limit ≤ 5000`) |
| Auto-pagination | enabled when `limit > 50` |
| Batch requests | up to 50 operations in [`POST /v1/batch`](/docs/batch) |
| Rate limit | shared across the Vibecode API — see [Limits and optimization](/docs/optimization) |

## See also

- [Catalog offers](/docs/entities/catalog-offers)
- [Catalog products](/docs/entities/catalog-products)
- [Catalogs](/docs/entities/catalogs)
- [Catalog sections](/docs/entities/catalog-sections)
- [Catalog product properties](/docs/entities/catalog-product-properties)
- [Catalog prices](/docs/entities/catalog-prices)
- [Filtering syntax](/docs/filtering)
- [API reference](/docs/api-reference)
