For AI agents: markdown of this page — /docs-content-en/entities/catalog-products.md documentation index — /llms.txt

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.

Bitrix24 API: catalog.product.* Scope: catalog

Create a product

POST /v1/catalog-products

Creates a product in the catalog. Fields are passed flat at the root of the JSON. The response returns the full object of the created product.

Request fields (body)

Field Type Req. Description
name string yes Product name
iblockId number yes Catalog ID. List: GET /v1/catalogs
active boolean no Whether the product is active. Defaults to true
iblockSectionId number no Catalog section ID. List: GET /v1/catalog-sections
measure number no Unit of measure ID
weight number no Weight of a product unit
vatIncluded boolean no VAT included in the price
canBuyZero boolean no Allow purchase when stock is zero
quantityTrace boolean no Enable quantity tracking
subscribe boolean no Allow subscription to the product
barcodeMulti boolean no Separate barcodes for product units
withoutOrder boolean no Available for ordering without stock on hand
purchasingPrice number no Purchase price. Not applied when warehouse management is enabled
purchasingCurrency string no Purchase price currency. Not applied when warehouse management is enabled
quantity number no Stock balance. Not applied when warehouse management is enabled

Examples

curl — personal key

Terminal
curl -X POST "https://vibecode.bitrix24.com/v1/catalog-products" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "USB-C cable",
    "iblockId": 25,
    "active": true,
    "measure": 9
  }'

curl — OAuth application

Terminal
curl -X POST "https://vibecode.bitrix24.com/v1/catalog-products" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "USB-C cable",
    "iblockId": 25,
    "active": true,
    "measure": 9
  }'

JavaScript — personal key

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-products', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'USB-C cable',
    iblockId: 25,
    active: true,
    measure: 9,
  }),
})

const { success, data } = await res.json()
console.log('Product ID:', data.id)

JavaScript — OAuth application

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/catalog-products', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'USB-C cable',
    iblockId: 25,
    active: true,
    measure: 9,
  }),
})

const { success, data } = await res.json()

Response fields

Field Type Description
success boolean Always true on success
data object Full object of the created product. The field set is the same as GET /v1/catalog-products/:id

The card URL of the created product in Bitrix24 is built from iblockId and id:

https://<portal>.bitrix24.com/shop/catalog/<iblockId>/product/<id>/

<portal> is the Bitrix24 account domain. Access is restricted by the employee's permissions in Bitrix24.

Response example

The main fields are shown.

JSON
{
  "success": true,
  "data": {
    "id": 7027,
    "iblockId": 25,
    "iblockSectionId": null,
    "name": "USB-C cable",
    "active": true,
    "code": null,
    "measure": 9,
    "available": true,
    "bundle": false,
    "canBuyZero": true,
    "quantityTrace": true,
    "subscribe": true,
    "barcodeMulti": false,
    "withoutOrder": false,
    "vatIncluded": false,
    "purchasingPrice": null,
    "purchasingCurrency": null,
    "quantity": null,
    "dateCreate": "2026-06-15T13:11:32.000Z",
    "timestampX": "2026-06-15T13:11:32.000Z",
    "xmlId": "7027"
  }
}

Error response example

422 — a required field was not passed:

JSON
{
  "success": false,
  "error": {
    "code": "BITRIX_ERROR",
    "message": "Required fields: name"
  }
}

Errors

HTTP Code Description
422 BITRIX_ERROR A required field was not passed — the message lists the missing ones (Required fields: name, Required fields: iblockId)
422 BITRIX_ERROR The catalog with the specified iblockId was not found (Iblock Not Found)
400 READONLY_FIELD A read-only field was passed in the body, for example available or bundle
403 SCOPE_DENIED The key lacks the catalog scope
401 MISSING_API_KEY The X-Api-Key header was not passed

Full list of common API errors — Errors.

See also