# Catalog products

Trade catalog products: list, retrieve, create, update, and delete. A product describes a catalog item — name, active status, unit of measure, and sale flags. Sale prices are set separately, in [Catalog prices](/docs/entities/catalog-prices).

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

## Operations

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

## Key fields

| Field | Description |
|------|---------|
| `name` | Product name. A product has no separate `title` field |
| `iblockId` | Catalog ID. Required in the list and search filter. List: [`GET /v1/catalogs`](/docs/entities/catalogs) |
| `iblockSectionId` | Catalog section ID. List: [`GET /v1/catalog-sections`](/docs/entities/catalog-sections) |
| `active` | Whether the product is active |
| `measure` | Unit of measure ID |
| `purchasingPrice` | Purchase price. Currency is in `purchasingCurrency` |
| `quantity` | Stock balance |

## What to know before you start

1. **List and search require a catalog filter.** In `GET /v1/catalog-products` and `POST /v1/catalog-products/search` the `filter[iblockId]` field is required — without it the request returns an error. The `iblockId` value comes from [`GET /v1/catalogs`](/docs/entities/catalogs).
2. **Field selection includes `iblockId`.** If a list or search request passes `select`, it must include `iblockId`. Without an explicit `select`, the full set of product fields is returned.
3. **A minimum of two fields is required to create.** `name` and `iblockId` are required. The other fields are optional and take default values.
4. **Boolean flags use `true`/`false` values.** `active`, `vatIncluded`, `canBuyZero`, `quantityTrace`, `subscribe`, `barcodeMulti`, `withoutOrder` are returned and accepted as booleans. The `available` and `bundle` fields are computed by Bitrix24 and are read-only.
5. **Stock and purchase price depend on warehouse management.** When warehouse management is enabled on the Bitrix24 account, the `quantity`, `purchasingPrice`, and `purchasingCurrency` fields are not applied when creating and updating a product — stock and purchase prices are managed by warehouse documents. Sale prices are set via [Catalog prices](/docs/entities/catalog-prices).
6. **The `get` response is more detailed than the `list` response.** A single record by `id` returns additional product fields — the symbolic code, dimensions, type, and also custom catalog properties of the form `propertyNNN`. For list-type properties the element comes with its label — in the `valueEnum` field next to `valueId` and `value`. The names and types of the `propertyNNN` properties themselves are in [Catalog product properties](/docs/entities/catalog-product-properties). List and search return the set of fields from the [field reference](./catalog-products/fields.md).

## Typical scenario

1. Find the catalog and its `iblockId`: [`GET /v1/catalogs`](/docs/entities/catalogs).
2. View the catalog products: [`GET /v1/catalog-products?filter[iblockId]=25`](./catalog-products/list.md).
3. Create or update a product: [`POST /v1/catalog-products`](./catalog-products/create.md) / [`PATCH /v1/catalog-products/:id`](./catalog-products/update.md).
4. Set the product price: [`POST /v1/catalog-prices`](/docs/entities/catalog-prices/create).

## 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 prices](/docs/entities/catalog-prices)
- [Catalogs](/docs/entities/catalogs)
- [Catalog sections](/docs/entities/catalog-sections)
- [Catalog product properties](/docs/entities/catalog-product-properties)
- [Filtering syntax](/docs/filtering)
- [Entity reference](/docs/entities-index)
