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

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 — a model with stock, prices, and variations.

Create product

POST /v1/products

Creates a CRM catalog product. Fields are passed flat at the JSON root — without the fields wrapper. The response returns the full object of the created product.

Request fields (body)

Field Bitrix24 Type Required Description
name NAME string yes Product name
price PRICE number no Product price. Currency is set by currency
currency CURRENCY_ID string no Price currency. List: GET /v1/currencies
active ACTIVE boolean no Whether the product is active. Defaults to true
sectionId SECTION_ID number no Catalog section. List: GET /v1/product-sections
catalogId CATALOG_ID number no Product catalog. Defaults to the Bitrix24 account's CRM catalog. List: GET /v1/catalogs
measure MEASURE number no Measurement unit identifier
description DESCRIPTION string no Product description
descriptionType DESCRIPTION_TYPE string no Description format: text or html
vatId VAT_ID number no VAT rate identifier
vatIncluded VAT_INCLUDED boolean no VAT included in the price
sort SORT number no Sort order
xmlId XML_ID string no External identifier
code CODE string no Symbolic code. If not passed, it is derived from name

Examples

curl — personal key

Terminal
curl -X POST "https://vibecode.bitrix24.com/v1/products" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Desk lamp",
    "price": 100,
    "currency": "USD"
  }'

curl — OAuth app

Terminal
curl -X POST "https://vibecode.bitrix24.com/v1/products" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Desk lamp",
    "price": 100,
    "currency": "USD"
  }'

JavaScript — personal key

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/products', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Desk lamp',
    price: 100,
    currency: 'USD',
  }),
})

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

JavaScript — OAuth app

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/products', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Desk lamp',
    price: 100,
    currency: 'USD',
  }),
})

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

Response fields

Field Type Description
success boolean Always true on success
data object The created product object: basic fields — see Product fields, plus the custom PROPERTY_<N> properties

The store card URL of the created product is built from catalogId and id:

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

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

Response example

The main fields are shown. The response also includes catalog properties of the form PROPERTY_<N> — see Get product.

JSON
{
  "success": true,
  "data": {
    "id": 7027,
    "name": "Desk lamp",
    "code": "desk_lamp",
    "active": true,
    "previewPicture": null,
    "detailPicture": null,
    "sort": 500,
    "xmlId": "7027",
    "updatedAt": "2026-06-16T08:48:18.000Z",
    "createdAt": "2026-06-16T08:48:18.000Z",
    "modifyBy": 1,
    "createdBy": 1,
    "catalogId": 25,
    "sectionId": null,
    "description": null,
    "descriptionType": "text",
    "price": 100,
    "currency": "USD",
    "vatId": null,
    "vatIncluded": false,
    "measure": null
  }
}

Error response example

422 — product name not passed:

JSON
{
  "success": false,
  "error": {
    "code": "BITRIX_ERROR",
    "message": "The name is not entered.<br><br>"
  }
}

Errors

HTTP Code Description
422 BITRIX_ERROR The name field was not passed — message "The name is not entered."
403 SCOPE_DENIED API key does not have the crm scope
401 MISSING_API_KEY The X-Api-Key header was not passed

Full list of common API errors — Errors.

See also