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

Update CRM product

PATCH /v1/products/:id

Updates a CRM catalog product. Pass only the fields being changed, flat at the JSON root — without the fields wrapper. The response contains the full updated product object.

The price can be changed here — with one caveat about currency. The price and currency fields and the currencyId alias are writable: Bitrix24 stores the sent value (verified 2026-09-07 on a live Bitrix24 account). But when the request CHANGES the price's currency — the value sent differs from the current one — Bitrix24 silently drops the whole request, including the price sent alongside it: both fields stay at their previous values and the response is still 200. To change the currency, find the product's price record with GET /v1/catalog-prices?filter[productId]=<id> and update it with PATCH /v1/catalog-prices/{id} — see Catalog prices.

Parameters

Parameter Type Required Description
Parameterid (path) Typenumber Requiredyes DescriptionProduct identifier. List: GET /v1/products

Request fields (body)

Field Type Required Description
Fieldname Typestring Requiredno DescriptionProduct name
Fieldprice Typenumber Requiredno DescriptionProduct price. Currency is set by currency or its currencyId alias
FieldcurrencyId Typestring Requiredno DescriptionWrite alias of currency. Responses return the value under currency
Fieldcurrency Typestring Requiredno DescriptionCanonical name of the price currency. If both names are present, currency wins. List: GET /v1/currencies
Fieldactive Typeboolean Requiredno DescriptionWhether the product is active
FieldsectionId Typenumber Requiredno DescriptionCatalog section. List: GET /v1/product-sections
FieldcatalogId Typenumber Requiredno DescriptionProduct catalog. List: GET /v1/catalogs
Fieldmeasure Typenumber Requiredno DescriptionMeasurement unit identifier
Fielddescription Typestring Requiredno DescriptionProduct description
FielddescriptionType Typestring Requiredno DescriptionDescription format: text or html
FieldvatId Typenumber Requiredno DescriptionVAT rate identifier
FieldvatIncluded Typeboolean Requiredno DescriptionVAT included in the price
Fieldsort Typenumber Requiredno DescriptionSort order
FieldxmlId Typestring Requiredno DescriptionExternal identifier
Fieldcode Typestring Requiredno DescriptionSymbolic product code
FieldcreatedBy Typenumber RequiredRO DescriptionIdentifier of the employee who created it
FieldmodifyBy Typenumber RequiredRO DescriptionIdentifier of the employee who modified it
FieldcreatedAt Typedatetime RequiredRO DescriptionCreation date
FieldupdatedAt Typedatetime RequiredRO DescriptionLast modification date

Examples

curl — personal key

Terminal
curl -X PATCH "https://vibecode.bitrix24.com/v1/products/7027" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "price": 150
  }'

curl — OAuth application

Terminal
curl -X PATCH "https://vibecode.bitrix24.com/v1/products/7027" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "price": 150
  }'

JavaScript — personal key

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/products/7027', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    price: 150,
  }),
})

const { success, data } = await res.json()
console.log('New price:', data.price)

JavaScript — OAuth application

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/products/7027', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    price: 150,
  }),
})

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

Response fields

Field Type Description
Fieldsuccess Typeboolean DescriptionAlways true on success
Fielddata Typeobject DescriptionThe updated product object: basic fields — see CRM product fields, plus the custom PROPERTY_<N> properties

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:21.000Z",
    "createdAt": "2026-06-16T08:48:18.000Z",
    "modifyBy": 1,
    "createdBy": 1,
    "catalogId": 25,
    "sectionId": null,
    "description": null,
    "descriptionType": "text",
    "price": 150,
    "currency": "USD",
    "vatId": null,
    "vatIncluded": false,
    "measure": null
  }
}

Error response example

404 — product not found:

JSON
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "Product is not found."
  }
}

Errors

HTTP Code Description
HTTP404 CodeENTITY_NOT_FOUND DescriptionA product with this id was not found
HTTP403 CodeSCOPE_DENIED DescriptionThe API key does not have the crm scope
HTTP401 CodeMISSING_API_KEY DescriptionThe X-Api-Key header was not passed

Full list of common API errors — Errors.

See also