# sale.order.update

URL: https://chugunov.pro/api-bitrix24/sale/order/sale-order-update/
Проверено на Битрикс24 REST API, обновлено 11.09.2026 (ревизия источника fb39d6c).
Источник: официальная документация Битрикс24 (bitrix-tools/b24-rest-docs, лицензия MIT, © Bitrix). Справочник независимый, официальной документацией не является.

Изменить заказ
Scope: `sale`
Кто может выполнять метод: администратор

## Описание

Метод `sale.order.update` обновляет поля заказа.

## Параметры

- `price` `double` — необязательный. Цена
- `discountValue` `double` — необязательный. Значение скидки
- `statusId` `sale_status.id` — необязательный. Идентификатор статуса заказа
- `empStatusId` `user.id` — необязательный. Идентификатор пользователя, изменившего статус заказа
- `dateInsert` `datetime` — необязательный. Дата создания заказа
- `marked` `string` — необязательный. Флаг маркировки. Признак того, является ли отгрузка отмеченной как проблемная. Значение `Y` ставится автоматически, если при сохранении произошла ошибка.
  - `Y` — да
  - `N` — нет
  По умолчанию устанавливается `N`
- `empMarkedId` `user.id` — необязательный. Идентификатор пользователя, поставившего маркировку
- `reasonMarked` `string` — необязательный. Причина, по которой заказ был промаркирован
- `userDescription` `string` — необязательный. Комментарий покупателя к заказу
- `additionalInfo` `string` — необязательный. Устаревший.
  Дополнительная информация
- `comments` `string` — необязательный. Комментарий менеджера к заказу
- `responsibleId` `user.id` — необязательный. Идентификатор пользователя, ответственного за заказ
- `recurringId` `integer` — необязательный. Идентификатор продления подписки
- `lockedBy` `user.id` — необязательный. Актуально только для коробочной версии.
  Идентификатор пользователя, заблокировавшего заказ. Заказ блокируется в административной панели, когда пользователь открывает детальную карточку заказа
- `recountFlag` `string` — необязательный. Устаревший.
  Флаг пересчёта.
  - `Y` — да
  - `N` — нет
  По умолчанию устанавливается Y
- `affiliateId` `integer` — необязательный. Актуально только для коробочной версии.
  Идентификатор аффилиата
- `updated1c` `string` — необязательный. Обновлён ли через 1С.
  - `Y` — да
  - `N` — нет
  По умолчанию устанавливается `N`
- `orderTopic` `string` — необязательный. Устаревший.
  Тема заказа
- `xmlId` `string` — необязательный. Внешний идентификатор
- `id1c` `string` — необязательный. Идентификатор в 1С
- `version1c` `string` — необязательный. Версия в 1с
- `externalOrder` `string` — необязательный. Заказ из внешней системы или нет.
  - `Y` — да
  - `N` — нет
  По умолчанию устанавливается `N`
- `canceled` `string` — необязательный. Был ли отменен заказ.
  - `Y` — да
  - `N` — нет
  По умолчанию устанавливается `N`
- `empCanceledId` `user.id` — необязательный. Идентификатор пользователя, отменившего заказ
- `reasonCanceled` `string` — необязательный. Причина отмены

## Ответ

HTTP-статус: 200

```json
{
    "result": {
        "order": {
            "accountNumber": "456",
            "additionalInfo": "",
            "affiliateId": 1,
            "canceled": "Y",
            "clients": [],
            "comments": "",
            "companyId": 1,
            "currency": "RUB",
            "dateCanceled": "2024-04-12T14:06:05+03:00",
            "dateInsert": "2024-03-01T13:00:00+03:00",
            "dateLock": null,
            "dateMarked": "2024-04-15T10:21:14+03:00",
            "dateStatus": "2024-04-12T14:06:04+03:00",
            "dateUpdate": "2024-04-15T10:21:15+03:00",
            "deducted": "N",
            "discountValue": 10,
            "empCanceledId": 1,
            "empMarkedId": 1,
            "empStatusId": 1,
            "externalOrder": "N",
            "id": 300,
            "id1c": "",
            "lid": "s1",
            "lockedBy": "1",
            "marked": "N",
            "orderTopic": "",
            "payed": "N",
            "personTypeId": 1,
            "personTypeXmlId": "",
            "price": 100,
            "reasonCanceled": "",
            "reasonMarked": "",
            "recountFlag": "N",
            "recurringId": "1",
            "requisiteLink": [],
            "responsibleId": 1,
            "statusId": "N",
            "statusXmlId": "",
            "taxValue": null,
            "updated1c": "N",
            "userDescription": "",
            "userId": 1,
            "version": 3,
            "version1c": "",
            "xmlId": ""
        }
    },
    "time": {
        "start": 1713169274.29568,
        "finish": 1713169275.698528,
        "duration": 1.4028480052947998,
        "processing": 0.9852678775787354,
        "date_start": "2024-04-15T11:21:14+03:00",
        "date_finish": "2024-04-15T11:21:15+03:00"
    }
}
```

### Возвращаемые данные

- `result` `object`. Корневой элемент ответа
- `order` `sale_order`. Объект с информацией об обновленном заказе
- `time` `time`. Информация о времени выполнения запроса

## Ошибки

HTTP-статус: 400

```json
{
    "error":200540400001
    "error_description":"order is not exists"
}
```

- `200540400001` — Обновляемый заказ не найден
- `200040300020` — Недостаточно прав для обновления заказа
- `100` — Не указан параметр `id`
- `100` — Не указан или пустой параметр `fields`
- `0` — Другие ошибки (например, фатальные ошибки)

## Примеры запроса

### cURL (Webhook)

```bash
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"id":300,"fields":{"price":100,"discountValue":10,"statusId":"N","empStatusId":1,"dateInsert":"2024-03-01T14:00:00","marked":"Y","empMarkedId":1,"reasonMarked":"","userDescription":"","additionalInfo":"","comments":"","companyId":1,"responsibleId":1,"recurringId":1,"lockedBy":1,"recountFlag":"N","affiliateId":1,"updated1c":"N","orderTopic":"","xmlId":"","id1c":"","version1c":"","externalOrder":"N","canceled":"Y","empCanceledId":1,"reasonCanceled":""}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/sale.order.update
```

### cURL (OAuth)

```bash
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"id":300,"fields":{"price":100,"discountValue":10,"statusId":"N","empStatusId":1,"dateInsert":"2024-03-01T14:00:00","marked":"Y","empMarkedId":1,"reasonMarked":"","userDescription":"","additionalInfo":"","comments":"","companyId":1,"responsibleId":1,"recurringId":1,"lockedBy":1,"recountFlag":"N","affiliateId":1,"updated1c":"N","orderTopic":"","xmlId":"","id1c":"","version1c":"","externalOrder":"N","canceled":"Y","empCanceledId":1,"reasonCanceled":""},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/sale.order.update
```

### JS (TS)

```ts
// 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 OrderUpdateResult = {
  order: {
    accountNumber: string
    additionalInfo: string
    affiliateId: number
    canceled: string
    clients: unknown[]
    comments: string
    companyId: number
    currency: string
    dateCanceled: ISODate | null
    dateInsert: ISODate | null
    dateLock: ISODate | null
    dateMarked: ISODate | null
    dateStatus: ISODate | null
    dateUpdate: ISODate | null
    deducted: string
    discountValue: number
    empCanceledId: number
    empMarkedId: number
    empStatusId: number
    externalOrder: string
    id: number
    id1c: string
    lid: string
    lockedBy: string
    marked: string
    orderTopic: string
    payed: string
    personTypeId: number
    personTypeXmlId: string
    price: number
    reasonCanceled: string
    reasonMarked: string
    recountFlag: string
    recurringId: string
    requisiteLink: unknown[]
    responsibleId: number
    statusId: string
    statusXmlId: string
    taxValue: number | null
    updated1c: string
    userDescription: string
    userId: number
    version: number
    version1c: string
    xmlId: string
  }
}

try {
  const response = await $b24.actions.v2.call.make<OrderUpdateResult>({
    method: 'sale.order.update',
    params: {
      id: 300,
      fields: {
        price: 100,
        discountValue: 10,
        statusId: 'N',
        empStatusId: 1,
        dateInsert: '2024-03-01T14:00:00',
        marked: 'Y',
        empMarkedId: 1,
        reasonMarked: '',
        userDescription: '',
        additionalInfo: '',
        comments: '',
        companyId: 1,
        responsibleId: 1,
        recurringId: 1,
        lockedBy: 1,
        recountFlag: 'N',
        affiliateId: 1,
        updated1c: 'N',
        orderTopic: '',
        xmlId: '',
        id1c: '',
        version1c: '',
        externalOrder: 'N',
        canceled: 'Y',
        empCanceledId: 1,
        reasonCanceled: '',
      },
    },
    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(result.order.id, result.order.statusId, result.order.price)
  }
} catch (error) {
  // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
  console.error(error)
}
```

### JS (UMD)

```html
<!-- 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 updateOrder() {
    try {
      // Initialize the SDK inside a Bitrix24 frame
      const $b24 = await B24Js.initializeB24Frame()

      const response = await $b24.actions.v2.call.make({
        method: 'sale.order.update',
        params: {
          id: 300,
          fields: {
            price: 100,
            discountValue: 10,
            statusId: 'N',
            empStatusId: 1,
            dateInsert: '2024-03-01T14:00:00',
            marked: 'Y',
            empMarkedId: 1,
            reasonMarked: '',
            userDescription: '',
            additionalInfo: '',
            comments: '',
            companyId: 1,
            responsibleId: 1,
            recurringId: 1,
            lockedBy: 1,
            recountFlag: 'N',
            affiliateId: 1,
            updated1c: 'N',
            orderTopic: '',
            xmlId: '',
            id1c: '',
            version1c: '',
            externalOrder: 'N',
            canceled: 'Y',
            empCanceledId: 1,
            reasonCanceled: '',
          },
        },
        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(result.order.id, result.order.statusId, result.order.price)
    } catch (error) {
      // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
      console.error(error)
    }
  }

  document.addEventListener('DOMContentLoaded', updateOrder)
</script>
```

### Python

```python
from b24pysdk.errors import BitrixAPIError, BitrixSDKException

fields = {
    "price": 100,
    "discountValue": 10,
    "statusId": "N",
    "empStatusId": 1,
    "dateInsert": "2024-03-01T14:00:00",
    "marked": "Y",
    "empMarkedId": 1,
    "reasonMarked": "",
    "userDescription": "",
    "additionalInfo": "",
    "comments": "",
    "companyId": 1,
    "responsibleId": 1,
    "recurringId": 1,
    "lockedBy": 1,
    "recountFlag": "N",
    "affiliateId": 1,
    "updated1c": "N",
    "orderTopic": "",
    "xmlId": "",
    "id1c": "",
    "version1c": "",
    "externalOrder": "N",
    "canceled": "Y",
    "empCanceledId": 1,
    "reasonCanceled": "",
}

try:
    bitrix_response = client.sale.order.update(
        bitrix_id=300,
        fields=fields,
    ).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}")
```

### PHP

```php
try {
    $response = $b24Service
        ->core
        ->call(
            'sale.order.update',
            [
                'id' => 300,
                'fields' => [
                    'price'           => 100,
                    'discountValue'   => 10,
                    'statusId'        => 'N',
                    'empStatusId'     => 1,
                    'dateInsert'      => '2024-03-01T14:00:00',
                    'marked'          => 'Y',
                    'empMarkedId'     => 1,
                    'reasonMarked'    => '',
                    'userDescription' => '',
                    'additionalInfo'  => '',
                    'comments'        => '',
                    'companyId'       => 1,
                    'responsibleId'   => 1,
                    'recurringId'     => 1,
                    'lockedBy'        => 1,
                    'recountFlag'     => 'N',
                    'affiliateId'     => 1,
                    'updated1c'       => 'N',
                    'orderTopic'      => '',
                    'xmlId'           => '',
                    'id1c'            => '',
                    'version1c'       => '',
                    'externalOrder'   => 'N',
                    'canceled'        => 'Y',
                    'empCanceledId'   => 1,
                    'reasonCanceled'  => '',
                ],
            ]
        );

    $result = $response
        ->getResponseData()
        ->getResult();

    echo 'Success: ' . print_r($result, true);

} catch (Throwable $e) {
    error_log($e->getMessage());
    echo 'Error updating sale order: ' . $e->getMessage();
}
```

### BX24.js

```js
BX24.callMethod(
    'sale.order.update',
    {
        id: 300,
        fields: {
            price: 100,
            discountValue: 10,
            statusId: 'N',
            empStatusId: 1,
            dateInsert: '2024-03-01T14:00:00',
            marked: 'Y',
            empMarkedId: 1,
            reasonMarked: '',
            userDescription: '',
            additionalInfo: '',
            comments: '',
            companyId: 1,
            responsibleId: 1,
            recurringId: 1,
            lockedBy: 1,
            recountFlag: 'N',
            affiliateId: 1,
            updated1c: 'N',
            orderTopic: '',
            xmlId: '',
            id1c: '',
            version1c: '',
            externalOrder: 'N',
            canceled: 'Y',
            empCanceledId: 1,
            reasonCanceled: '',
        }
    },
    function(result)
    {
        if(result.error())
            console.error(result.error());
        else
            console.log(result.data());
    }
);
```

### PHP CRest

```php
require_once('crest.php');

$result = CRest::call(
    'sale.order.update',
    [
        'id' => 300,
        'fields' => [
            'price' => 100,
            'discountValue' => 10,
            'statusId' => 'N',
            'empStatusId' => 1,
            'dateInsert' => '2024-03-01T14:00:00',
            'marked' => 'Y',
            'empMarkedId' => 1,
            'reasonMarked' => '',
            'userDescription' => '',
            'additionalInfo' => '',
            'comments' => '',
            'companyId' => 1,
            'responsibleId' => 1,
            'recurringId' => 1,
            'lockedBy' => 1,
            'recountFlag' => 'N',
            'affiliateId' => 1,
            'updated1c' => 'N',
            'orderTopic' => '',
            'xmlId' => '',
            'id1c' => '',
            'version1c' => '',
            'externalOrder' => 'N',
            'canceled' => 'Y',
            'empCanceledId' => 1,
            'reasonCanceled' => '',
        ]
    ]
);

echo '<PRE>';
print_r($result);
echo '</PRE>';
```

### Go

```go
// client и ctx уже созданы — см. раздел «SDK для Go»
res, err := client.Core().Call(ctx, "sale.order.update", b24.Params{
	"id": 300,
	"fields": b24.Params{
		"price":           100,
		"discountValue":   10,
		"statusId":        "N",
		"empStatusId":     1,
		"dateInsert":      "2024-03-01T14:00:00",
		"marked":          "Y",
		"empMarkedId":     1,
		"reasonMarked":    "",
		"userDescription": "",
		"additionalInfo":  "",
		"comments":        "",
		"companyId":       1,
		"responsibleId":   1,
		"recurringId":     1,
		"lockedBy":        1,
		"recountFlag":     "N",
		"affiliateId":     1,
		"updated1c":       "N",
		"orderTopic":      "",
		"xmlId":           "",
		"id1c":            "",
		"version1c":       "",
		"externalOrder":   "N",
		"canceled":        "Y",
		"empCanceledId":   1,
		"reasonCanceled":  "",
	},
})
if err != nil {
	return fmt.Errorf("sale.order.update: %w", err)
}

// Метод заворачивает ответ в объект с ключом "order".
raw, ok := b24.Unwrap(res.Result, "order")
if !ok {
	return fmt.Errorf("в ответе нет ключа order")
}

var item struct {
	AccountNumber  string `json:"accountNumber"`
	AdditionalInfo string `json:"additionalInfo"`
	AffiliateID    b24.ID `json:"affiliateId"`
	Canceled       string `json:"canceled"`
	Comments       string `json:"comments"`
	CompanyID      b24.ID `json:"companyId"`
}
if err := json.Unmarshal(raw, &item); err != nil {
	return fmt.Errorf("разбор ответа: %w", err)
}
fmt.Println(item.AccountNumber, item.AdditionalInfo)
```

Оригинал в официальной документации: https://apidocs.bitrix24.ru/api-reference/sale/order/sale-order-update.html
