# Products

Manage CRM catalog products: create, get, update, delete, search, and aggregate. A product describes a catalog item — name, price, currency, section, and custom properties.

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

**The `/v1/products` methods are deprecated.** For new integrations use [Catalog products](/docs/entities/catalog-products) — a model with stock, prices, and variations.

## Operations

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

## Key fields

| Field | Description |
|------|---------|
| `name` | Product name. The product has no separate `title` field |
| `price` | Product price. Currency is in `currency` |
| `currency` | Price currency. List: `GET /v1/currencies` |
| `active` | Whether the product is active |
| `sectionId` | Catalog section. List: `GET /v1/product-sections` |
| `catalogId` | Catalog ID. List: `GET /v1/catalogs` |
| `measure` | Measurement unit ID |

Full field list — [`GET /v1/products/fields`](./products/fields.md).

## What to know before you start

1. **These are the same products as in the catalog.** The product with the same `id` is available via [`GET /v1/catalog-products`](/docs/entities/catalog-products), where it has more fields — stock, warehouse, variations. `catalogId` here corresponds to `iblockId` there.
2. **The request body is flat.** When creating and updating, pass fields directly at the JSON root: `{"name": "...", "price": 100}`. The `fields` wrapper is not needed.
3. **Only `name` is required to create.** Without a name the request returns `422 BITRIX_ERROR`. The other fields are optional: `catalogId` defaults to the Bitrix24 account's CRM catalog, `code` is derived from the name.
4. **Response fields are in camelCase.** The mapping to the original Bitrix24 names is in [Product fields](./products/fields.md).
5. **Custom product properties.** Fields of the form `PROPERTY_<N>` come back in `get` and `fields` responses — these are the properties configured for the catalog on the Bitrix24 account. For list-type properties this field returns only the ID of the selected element, without its label. The element label itself is returned by [`GET /v1/catalog-products`](/docs/entities/catalog-products) — there the same property returns both the ID and the text value.
6. **Access from the web interface.** By `catalogId` and `id` the product opens in the Bitrix24 account store at `https://<portal>.bitrix24.com/shop/catalog/<catalogId>/product/<id>/`. Access is restricted by employee permissions.

## Typical scenario

1. View catalog sections: [`GET /v1/product-sections`](/docs/entities/product-sections).
2. List products of a section: [`GET /v1/products?filter[sectionId]=19`](./products/list.md).
3. Create a new one or update an existing one: [`POST /v1/products`](./products/create.md) / [`PATCH /v1/products/:id`](./products/update.md).

## Limits

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

## See also

- [Entity API](/docs/entity-api)
- [Filtering syntax](/docs/filtering)
- [Batch](/docs/batch)
- [Entities reference](/docs/entities-index)
- [Product sections](/docs/entities/product-sections)
- [Catalog products](/docs/entities/catalog-products)
