For AI agents: markdown of this page — /docs-content-en/entities/quotes/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.

Update a quote product

PATCH /v1/quotes/:id/products/:rowId

Updates a product row in a quote. Pass only the fields you want to change.

Parameters

Parameter Type Required Description
Parameterid (path) Typenumber Requiredyes DescriptionQuote ID. List: GET /v1/quotes
ParameterrowId (path) Typenumber Requiredyes DescriptionProduct row ID, not the productId from the catalog. Row list: GET /v1/quotes/:id/products

Request fields (body)

Parameter Type Description
Parameterprice Typenumber DescriptionUnit price
Parameterquantity Typenumber DescriptionQuantity
ParameterproductId Typenumber DescriptionProduct ID. Catalog: GET /v1/products
ParameterdiscountTypeId Typenumber DescriptionHow 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
Parameterdiscount Typenumber DescriptionDiscount amount. Applied only when discountTypeId is 1
ParameterdiscountRate Typenumber DescriptionDiscount percentage. Applied only when discountTypeId is 2
ParametertaxRate Typenumber DescriptionTax rate (%)
ParametertaxIncluded Typeboolean DescriptionTax included in price
Parametersort Typenumber DescriptionSort order

Examples

curl — personal key

Terminal
curl -X PATCH "https://vibecode.bitrix24.com/v1/quotes/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/quotes/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/quotes/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/quotes/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

Field Type Description
Fieldsuccess Typeboolean Descriptiontrue when the row is updated
Fielddata Typeobject DescriptionThe full updated product row. Each field is described in Product fields

Response example

JSON
{
  "success": true,
  "data": {
    "id": 1471,
    "ownerId": 741,
    "ownerType": "Q",
    "productId": 0,
    "productName": "Server equipment",
    "price": 9999,
    "priceAccount": 9999,
    "priceExclusive": 9999,
    "priceNetto": 9999,
    "priceBrutto": 9999,
    "quantity": 10,
    "discountTypeId": 2,
    "discountRate": 0,
    "discount": 0,
    "taxRate": null,
    "taxIncluded": false,
    "customized": "Y",
    "measureCode": 796,
    "measureName": "pcs",
    "sort": 0,
    "xmlId": "",
    "type": 1,
    "storeId": null
  }
}

Error response example

404 — product row not found:

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

Errors

HTTP Code Description
HTTP400 CodeINVALID_PARAMS DescriptionThe body contains a field name that is not among the writable fields — see Product fields
HTTP404 CodeENTITY_NOT_FOUND DescriptionProduct row not found
HTTP403 CodeSCOPE_DENIED DescriptionAPI key does not have the crm scope
HTTP401 CodeTOKEN_MISSING DescriptionAPI key has no configured tokens

Full list of common API errors — Errors.

See also