catalog.price.modify
Обновить коллекцию цен товара
Описание
Метод catalog.price.modify изменяет коллекцию цен товара. Позволяет добавлять, обновлять и удалять разные цены товара за один запрос.
Параметры
fields
object
обязательный
Объект с данными для модификации цен (подробное описание)
Параметр fields
product
object
обязательный
Данные товара и его цен (подробное описание)
Параметр product
id
catalog_product.id
обязательный
Идентификатор товара, можно получить методами catalog.product.list, catalog.product.offer.list, catalog.product.service.list, catalog.product.sku.list
prices
array
обязательный
Массив цен товара (подробное описание)
Параметр prices
id
catalog_price.id
необязательный
Идентификатор цены. Если указан, то цена будет обновлена. Если не указан, то будет создана новая цена. Цена, идентификатор которой не был передан, будет удалена. Получить идентификаторы цен можно методом catalog.price.list
catalogGroupId
catalog_price_type.id
обязательный
Идентификатор типа цены, можно получить методом catalog.priceType.list
price
double
обязательный
Значение цены
currency
string
обязательный
Идентификатор валюты, можно получить методом crm.currency.list
Примеры запроса
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"fields":{"product":{"id":8,"prices":[{"catalogGroupId":1,"currency":"RUB","price":2001},{"catalogGroupId":3,"currency":"RUB","price":2001},{"catalogGroupId":5,"currency":"RUB","price":2001,"id":122}]}}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/catalog.price.modify
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"fields":{"product":{"id":8,"prices":[{"catalogGroupId":1,"currency":"RUB","price":2001},{"catalogGroupId":3,"currency":"RUB","price":2001},{"catalogGroupId":5,"currency":"RUB","price":2001,"id":122}]},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/catalog.price.modify
// This snippet is an ES module: top-level await requires type="module" or a bundler.
// $b24 is an already-initialized SDK instance (see the SDK "Get started" guide).
import { Text } from '@bitrix24/b24jssdk'
import type { B24Frame, ISODate } from '@bitrix24/b24jssdk'
declare const $b24: B24Frame
// Shape of the payload returned in result (match the "response handling" section of the page)
type ModifyPricesResult = {
prices: {
catalogGroupId: number
currency: string
extraId: string | null
id: number
price: number
priceScale: number
productId: number
quantityFrom: number | null
quantityTo: number | null
timestampX: ISODate | null
}[]
}
try {
const response = await $b24.actions.v2.call.make<ModifyPricesResult>({
method: 'catalog.price.modify',
params: {
fields: {
product: {
id: 8,
prices: [
{
catalogGroupId: 1,
currency: 'RUB',
price: 2001,
},
{
catalogGroupId: 3,
currency: 'RUB',
price: 2001,
},
{
catalogGroupId: 5,
currency: 'RUB',
price: 2001,
id: 122,
},
],
},
},
},
requestId: Text.getUuidRfc4122()
})
// The payload is available only on a successful response
if (!response.isSuccess) {
console.error(response.getErrorMessages().join('; '))
} else {
const result = response.getData()!.result
console.info('Modified prices:', result.prices)
}
} catch (error) {
// Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
console.error(error)
}
<!-- Load the SDK (UMD build); it is exposed as the global B24Js -->
<script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script>
<script>
async function modifyPrices() {
try {
// Initialize the SDK inside a Bitrix24 frame
const $b24 = await B24Js.initializeB24Frame()
const response = await $b24.actions.v2.call.make({
method: 'catalog.price.modify',
params: {
fields: {
product: {
id: 8,
prices: [
{
catalogGroupId: 1,
currency: 'RUB',
price: 2001,
},
{
catalogGroupId: 3,
currency: 'RUB',
price: 2001,
},
{
catalogGroupId: 5,
currency: 'RUB',
price: 2001,
id: 122,
},
],
},
},
},
requestId: B24Js.Text.getUuidRfc4122()
})
// The payload is available only on a successful response
if (!response.isSuccess) {
console.error(response.getErrorMessages().join('; '))
return
}
const result = response.getData().result
console.info('Modified prices:', result.prices)
} catch (error) {
// Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
console.error(error)
}
}
document.addEventListener('DOMContentLoaded', modifyPrices)
</script>
from b24pysdk.errors import BitrixAPIError, BitrixSDKException
try:
bitrix_response = client.catalog.price.modify(
fields={
"product": {
"id": 8,
"prices": [
{
"catalogGroupId": 1,
"currency": "RUB",
"price": 2001,
},
{
"catalogGroupId": 3,
"currency": "RUB",
"price": 2001,
},
{
"catalogGroupId": 5,
"currency": "RUB",
"price": 2001,
"id": 122,
},
],
},
},
).response
result = bitrix_response.result
print(result)
except BitrixAPIError as error:
print(
"Ошибка Bitrix API",
f"error: {error.error}",
f"error_description: {error.error_description}",
sep="\n",
)
except BitrixSDKException as error:
print(f"Ошибка Bitrix SDK: {error.message}")
except Exception as error:
print(f"Непредвиденная ошибка: {error}")
try {
$response = $b24Service
->core
->call(
'catalog.price.modify',
[
'fields' => [
'product' => [
'id' => 8,
'prices' => [
[
'catalogGroupId' => 1,
'currency' => 'RUB',
'price' => 2001
],
[
'catalogGroupId' => 3,
'currency' => 'RUB',
'price' => 2001
],
[
'catalogGroupId' => 5,
'currency' => 'RUB',
'price' => 2001,
'id' => 122
]
]
]
]
]
);
$result = $response
->getResponseData()
->getResult();
if ($result->error()) {
error_log($result->error());
} else {
echo 'Success: ' . print_r($result->data(), true);
}
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error modifying prices: ' . $e->getMessage();
}
BX24.callMethod(
'catalog.price.modify',
{
fields: {
product: {
id: 8,
prices: [
{
catalogGroupId: 1,
currency: 'RUB',
price: 2001
},
{
catalogGroupId: 3,
currency: 'RUB',
price: 2001
},
{
catalogGroupId: 5,
currency: 'RUB',
price: 2001,
id: 122
},
]
},
}
},
function(result)
{
if(result.error())
console.error(result.error().ex);
else
console.log(result.data());
}
);
require_once('crest.php');
$result = CRest::call(
'catalog.price.modify',
[
'fields' => [
'product' => [
'id' => 8,
'prices' => [
[
'catalogGroupId' => 1,
'currency' => 'RUB',
'price' => 2001
],
[
'catalogGroupId' => 3,
'currency' => 'RUB',
'price' => 2001
],
[
'catalogGroupId' => 5,
'currency' => 'RUB',
'price' => 2001,
'id' => 122
],
]
],
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
// client и ctx уже созданы — см. раздел «SDK для Go»
res, err := client.Core().Call(ctx, "catalog.price.modify", b24.Params{
"fields": b24.Params{
"product": b24.Params{
"id": 8,
"prices": []b24.Params{
{
"catalogGroupId": 1,
"currency": "RUB",
"price": 2001,
},
{
"catalogGroupId": 3,
"currency": "RUB",
"price": 2001,
},
{
"catalogGroupId": 5,
"currency": "RUB",
"price": 2001,
"id": 122,
},
},
},
},
})
if err != nil {
return fmt.Errorf("catalog.price.modify: %w", err)
}
// Метод заворачивает ответ в объект с ключом "prices".
raw, ok := b24.Unwrap(res.Result, "prices")
if !ok {
return fmt.Errorf("в ответе нет ключа prices")
}
var items []struct {
CatalogGroupID b24.ID `json:"catalogGroupId"`
Currency string `json:"currency"`
ID b24.ID `json:"id"`
Price int `json:"price"`
PriceScale int `json:"priceScale"`
ProductID b24.ID `json:"productId"`
}
if err := json.Unmarshal(raw, &items); err != nil {
return fmt.Errorf("разбор ответа: %w", err)
}
for _, it := range items {
fmt.Println(it.CatalogGroupID)
}
Ответ
HTTP-статус: 200
{
"result": {
"prices": [
{
"catalogGroupId": 1,
"currency": "RUB",
"extraId": null,
"id": 123,
"price": 2001,
"priceScale":2001,
"productId": 8,
"quantityFrom": null,
"quantityTo": null,
"timestampX": "2024-05-27T16:29:35+02:00"
},
{
"catalogGroupId": 3,
"currency": "RUB",
"extraId": null,
"id": 124,
"price": 2001,
"priceScale":2001,
"productId": 8,
"quantityFrom": null,
"quantityTo": null,
"timestampX": "2024-05-27T16:29:35+02:00"
},
{
"catalogGroupId": 5,
"currency": "RUB",
"extraId": null,
"id": 122,
"price": 2001,
"priceScale":2001,
"productId": 8,
"quantityFrom": null,
"quantityTo": null,
"timestampX": "2024-05-27T16:29:35+02:00"
}
]
},
"time": {
"start": 1712327086.69665,
"finish": 1712327086.95303,
"duration": 0.256376028060913,
"processing": 0.0112268924713135,
"date_start": "2024-05-27T16:29:35+02:00",
"date_finish": "2024-05-27T16:29:35+02:00",
"operating": 0
}
}
Возвращаемые данные
result
object
Корневой элемент ответа
prices
catalog_price[]
Массив объектов с информацией о ценах товара
time
time
Информация о времени выполнения запроса
Обработка ошибок
HTTP-статус: 400
{
"error": 0,
"error_description": "Required fields: price, currency"
}
| Код | Описание | Значение |
|---|---|---|
200040300020 |
Access Denied | Недостаточно прав на редактирование цены |
200040300030 |
Access Denied | Недостаточно прав на редактирование товара |
100 |
Could not find value for parameter {fields} | Не указан или пустой параметр fields |
0 |
Required fields: | Не переданы обязательные поля |
0 |
Validate price error. Catalog price group is wrong | Неправильный тип цены |
0 |
Validate price error. Catalog product is allowed has only single price without ranges in price group | Дублирование типа цены. Были переданы в массиве prices две или более записей с одинаковым catalogGroupId |
0 |
Другие ошибки |

