Обновить заказ
PATCH /v1/orders/:id
Обновляет поля существующего заказа. Передавайте только изменяемые поля плоско в корне JSON — без обёртки fields.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
id (path) |
number | да | Идентификатор заказа |
Поля запроса (body)
| Поле | Тип | Описание |
|---|---|---|
statusId |
string | Новый статус заказа. Список: `GET /v1/order-statuses?filter[type]=O`. Усекается до 2 символов без ошибки |
discountValue |
number | Значение скидки |
canceled |
boolean | Отменён ли заказ |
reasonCanceled |
string | Причина отмены |
comments |
string | Комментарий менеджера |
userDescription |
string | Комментарий покупателя |
responsibleId |
number | Ответственный сотрудник |
userId |
number | Пользователь Битрикс24 — покупатель. Существование не проверяется |
companyId |
number | Идентификатор CRM-компании заказа. Источник: `GET /v1/companies`. Приходит null, если компания не задана |
xmlId |
string | Внешний идентификатор |
Полный список редактируемых полей — `GET /v1/orders/fields` (поля без флага readonly).
price, marked и reasonMarked на обновлении игнорируются. Запрос вернёт 200, но эти поля не сохранятся — они применяются только при создании. price пересчитывается из позиций корзины: переданная вручную сумма игнорируется, при пустой корзине становится 0. Чтобы изменить сумму, меняйте позиции корзины. payed доступен только для чтения — управляется подсистемой оплат, попытка передать его вернёт 400 READONLY_FIELD.
Примеры
curl — личный ключ
curl -X PATCH "https://vibecode.bitrix24.tech/v1/orders/845" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"statusId": "F",
"comments": "Закрыт после полной оплаты"
}'
curl — OAuth-приложение
curl -X PATCH "https://vibecode.bitrix24.tech/v1/orders/845" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"statusId": "F",
"comments": "Закрыт после полной оплаты"
}'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/orders/845', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
statusId: 'F',
comments: 'Закрыт после полной оплаты',
}),
})
const { success, data } = await res.json()
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/orders/845', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
statusId: 'F',
comments: 'Закрыт после полной оплаты',
}),
})
const { success, data } = await res.json()
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data |
object | Обновлённый объект заказа со всеми полями (см. Поля заказа) |
Пример ответа
{
"success": true,
"data": {
"id": 845,
"accountNumber": "443",
"statusId": "F",
"price": 100,
"currency": "RUB",
"payed": true,
"canceled": false,
"comments": "Закрыт после полной оплаты",
"dateInsert": "2026-04-21T06:48:16.000Z",
"dateUpdate": "2026-05-13T11:45:32.000Z",
"dateStatus": "2026-05-13T11:45:32.000Z",
"userId": 1,
"companyId": 15,
"clients": [
{ "entityTypeId": 3, "entityId": 2471, "isPrimary": true, "roleId": 0, "sort": 0 },
{ "entityTypeId": 4, "entityId": 15, "isPrimary": true, "roleId": 0, "sort": 0 }
],
"responsibleId": 1
}
}
Пример ответа при ошибке
422 — заказ не найден:
{
"success": false,
"error": {
"code": "BITRIX_ERROR",
"message": "order is not exists"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 422 | BITRIX_ERROR |
Заказ с таким ID не найден |
| 400 | BITRIX_ERROR |
Некорректное значение поля — например, неизвестный statusId |
| 400 | READONLY_FIELD |
Передано поле только для чтения — например accountNumber. Номер заказа присваивается автоматически |
| 403 | SCOPE_DENIED |
API-ключ не имеет скоупа sale |
| 401 | TOKEN_MISSING |
API-ключ не имеет настроенных токенов |
Полный список общих ошибок API — Ошибки.
Известные особенности
Дата dateStatus обновляется автоматически. При изменении statusId поле dateStatus получает текущее время — не передавайте его в запросе.
Поля accountNumber, dateInsert, personTypeXmlId, statusXmlId и другие системные — только для чтения. Попытка передать их на обновлении отклоняется с 400 READONLY_FIELD.