Para agentes de IA: markdown desta página — /docs-content-en/entities/products.md índice da documentação — /llms.txt

Os artigos da documentação estão disponíveis atualmente em inglês.

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 CRM 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.

The price and currency can be set right here. The price and currency fields and the currencyId alias are writable: Bitrix24 stores the sent value both on create and on a later update (verified 2026-09-07 on a live portal). The one caveat applies to updates only — a PATCH that CHANGES the price's currency is silently dropped in full by Bitrix24, including the price sent in the same request: both fields stay at their previous values and the response is still 200. To change the currency of an existing product, use POST /v1/catalog-prices — see Catalog prices and Update CRM product.

Request fields (body)

Field Type Required Description
name string yes Product name
price number no Product price. Currency is set by currency or its currencyId alias
currencyId string no Write alias of currency. Responses return the value under currency
currency string no Canonical name of the price currency. If both names are present, currency wins. List: GET /v1/currencies
active boolean no Whether the product is active. Defaults to true
sectionId number no Catalog section. List: GET /v1/product-sections
catalogId number no Product catalog. Defaults to the Bitrix24 account's CRM catalog. List: GET /v1/catalogs
measure number no Measurement unit identifier
description string no Product description
descriptionType string no Description format: text or html
vatId number no VAT rate identifier
vatIncluded boolean no VAT included in the price
sort number no Sort order
xmlId string no External identifier
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 CRM product fields, plus the custom PROPERTY_<N> properties

The card URL of the created product in the online store of your Bitrix24 account is built from its catalogId and id:

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

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

Response example

The main fields are shown. The response also includes catalog properties of the form PROPERTY_<N> — see Get CRM 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 The 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