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

A field name that is not in the writable set is no longer dropped silently — the request is rejected with 400 INVALID_PARAMS and the error text lists the writable names. Read-only fields that appear in product-row responses (priceAccount, ownerId, storeId and others) are still accepted and ignored, so an object read via GET can be sent back as is.

Use the entityTypeId field from GET /v1/smart-processes in the /v1/items/:entityTypeId path. The type record's internal id is a different identifier. For example, if a type is returned as { "id": 3, "entityTypeId": 174 }, the path starts with /v1/items/174. Use the returned value rather than assuming all type IDs start at 1030.

Update a product of an item

PATCH /v1/items/:entityTypeId/:id/products/:rowId

Updates a product row of an item. Pass only the fields you want to change.

Parameters

Parameter Type Required Description
entityTypeId (path) number yes Smart process type ID
id (path) number yes Item ID
rowId (path) number yes Product row ID (from the list or add response, not the catalog productId)

Request fields (body)

Parameter Type Description
price number Price per unit
quantity number Quantity
productId number Product ID. Catalog: GET /v1/products
discountTypeId number How the discount is set: 1 — as an amount in discount, 2 — as a percentage in discountRate. Omitting the field keeps the row's current value — to switch the discount mode, send it explicitly
discount number Discount amount. Applied only when discountTypeId is 1
discountRate number Discount percentage. Applied only when discountTypeId is 2
taxRate number Tax rate (%)
taxIncluded boolean Tax included in price
sort number Sort order

Examples

curl — personal key

Terminal
curl -X PATCH "https://vibecode.bitrix24.com/v1/items/156/741/products/1471" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "price": 9999, "quantity": 10 }'

curl — OAuth application

Terminal
curl -X PATCH "https://vibecode.bitrix24.com/v1/items/156/741/products/1471" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "price": 9999, "quantity": 10 }'

JavaScript — personal key

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

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

JavaScript — OAuth application

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

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

Response fields

The updated product row object: id, productId, productName, price, quantity, discount, taxRate, taxIncluded.

Response example

JSON
{
  "success": true,
  "data": {
    "id": 1471,
    "productId": 1,
    "productName": "Server equipment",
    "price": 9999,
    "quantity": 10,
    "discount": 0,
    "taxRate": null,
    "taxIncluded": false
  }
}

Error response example

404 — product row not found:

JSON
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "Item not found"
  }
}

Errors

HTTP Code Description
400 INVALID_PARAMS The body contains a field name that is not among the writable fields — see Product fields
400 INVALID_DYNAMIC_PARAM entityTypeId is not a positive integer or is reserved (1, 2, 3, 4, 7, 31)
400 INVALID_ROW_ID rowId is not a positive integer
400 INVALID_PARAMS The request body is not an object or contains no recognized product-row fields
404 ENTITY_NOT_FOUND Product row not found
403 SCOPE_DENIED The API key does not have the crm scope
401 TOKEN_MISSING The API key has no configured tokens

Full list of common API errors — Errors.

See also