# crm.item.update

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

Обновить элемент
Scope: `crm`
Кто может выполнять метод: любой пользователь с правом «изменения» элементов объекта CRM

## Описание

Метод обновляет элемент определенного типа объекта CRM, задав ему новые значения из параметра `fields`.

При обновлении элемента производится стандартный ряд проверок, модификаций и автоматических действий:
- проверяются права доступа
- проверяется заполненность обязательных полей, если изменена стадия элемента в рамках того же направления
- проверяется заполненность зависимых от стадий обязательных полей, если изменена стадия элемента в рамках того же направления
- проверяется корректность заполнения полей
- полям присваиваются значения по умолчанию
- если перед сохранением оказывается, что никакие значения полей не были изменены, то сохранение **не производится**
- после сохранения запускаются роботы

## Параметры

- `entityTypeId` `integer` — обязательный. Идентификатор [системного](https://apidocs.bitrix24.ru/api-reference/crm/data-types.html#object_type) или [пользовательского типа](https://chugunov.pro/api-bitrix24/crm/universal/user-defined-object-types/), чей элемент мы хотим изменить.
  Числовые значения для системных типов (Лид — 1, Сделка — 2, Контакт — 3, Компания — 4, Счет — 31 и др.) приведены в [справочнике типов объектов CRM](https://apidocs.bitrix24.ru/api-reference/crm/data-types.html#object_type). Идентификатор смарт-процесса можно узнать методом [crm.type.list](https://chugunov.pro/api-bitrix24/crm/universal/user-defined-object-types/crm-type-list/)
- `id` `integer` — необязательный. Идентификатор элемента, который мы хотим изменить.
  Можно получить методом [`crm.item.list`](https://chugunov.pro/api-bitrix24/crm/universal/crm-item-list/) или [`crm.item.add`](https://chugunov.pro/api-bitrix24/crm/universal/crm-item-add/)
- `fields` `object` — обязательный. Объект формата
  ```
  {
      field_1: value_1,
      field_2: value_2,
      ...,
      field_n: value_n,
  }
  ```
  где
  - `field_n` — название поля
  - `value_n` — новое значение поля
  У каждого типа объекта CRM свой набор полей. Это значит, что набор полей для изменения Лида не обязан подходить набору полей для изменения Контакта или Смарт-процесса.
  Список доступных полей относительно каждого типа объекта описан [ниже](#parametr-fields).
  Некорректное поле в `fields` будет проигнорировано.
  В `fields` нужно передавать только те поля, которые нужно изменить
- `useOriginalUfNames` `boolean` — необязательный. Параметр для управления форматом имен пользовательских полей в запросе и ответе.   
  Возможные значения:
  - `Y` — оригинальные имена пользовательских полей, например `UF_CRM_2_1639669411830`
  - `N` — имена пользовательских полей в camelCase, например `ufCrm2_1639669411830`
  По умолчанию — `N`

## Ответ

HTTP-статус: 200

```json
{
    "result": {
        "item": {
            "id": 351,
            "createdTime": "2024-07-23T19:10:26+02:00",
            "dateCreateShort": null,
            "updatedTime": "2024-07-23T18:19:21+02:00",
            "dateModifyShort": null,
            "createdBy": 1,
            "updatedBy": 1,
            "assignedById": 6,
            "opened": "N",
            "leadId": null,
            "companyId": 0,
            "contactId": 0,
            "quoteId": null,
            "title": "REST Сделка #1",
            "productId": null,
            "categoryId": 9,
            "stageId": "C9:UC_NYL06U",
            "stageSemanticId": "P",
            "isNew": "N",
            "isRecurring": "N",
            "isReturnCustomer": "N",
            "isRepeatedApproach": "N",
            "closed": "N",
            "typeId": "SERVICE",
            "opportunity": 10000,
            "isManualOpportunity": "N",
            "taxValue": 0,
            "currencyId": "USD",
            "probability": null,
            "comments": "",
            "begindate": "2024-07-23T02:00:00+02:00",
            "begindateShort": null,
            "closedate": "2024-07-31T02:00:00+02:00",
            "closedateShort": null,
            "eventDate": null,
            "eventDateShort": null,
            "eventId": null,
            "eventDescription": null,
            "locationId": null,
            "webformId": 0,
            "sourceId": "",
            "sourceDescription": "",
            "originatorId": null,
            "originId": null,
            "additionalInfo": "Изменение сделки через REST",
            "searchContent": "351 Сделка #351 10200.00 Российский рубль Не Придумал Придумал Продажа Название2134234233 23.07.2024 31.07.2024",
            "orderStage": null,
            "movedBy": 1,
            "movedTime": "2024-07-23T18:19:21+02:00",
            "lastActivityBy": 1,
            "lastActivityTime": "2024-07-23T18:10:26+02:00",
            "isWork": null,
            "isWon": null,
            "isLose": null,
            "receivedAmount": null,
            "lostAmount": null,
            "hasProducts": null,
            "ufCrm_1721244707107": 200.05,
            "parentId1220": 2,
            "utmSource": "google",
            "utmMedium": null,
            "utmCampaign": null,
            "utmContent": null,
            "utmTerm": null,
            "observers": [
                1,
                2,
                3
            ],
            "contactIds": [],
            "entityTypeId": 2
        }
    },
    "time": {
        "start": 1721751560.824475,
        "finish": 1721751564.481578,
        "duration": 3.6571030616760254,
        "processing": 3.1893951892852783,
        "date_start": "2024-07-23T18:19:20+02:00",
        "date_finish": "2024-07-23T18:19:24+02:00",
        "operating": 3.1893470287323
    }
}
```

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

- `result` `object`. Корневой элемент ответа, содержит единственный ключ `item`
- `item` `item`. Информация об обновленном элементе, [описание полей](https://apidocs.bitrix24.ru/api-reference/crm/universal/object-fields.html)
- `time` `time`. Информация о времени выполнения запроса

## Ошибки

HTTP-статус: 400

```json
{
    "error": "NOT_FOUND",
    "error_description": "Смарт-процесс не найден"
}
```

- `403` — `allowed_only_intranet_user`. Действие разрешено только интранет-пользователям
- `400` — `NOT_FOUND`. Смарт-процесс не найден
- `400` — `ACCESS_DENIED`. Доступ запрещен
- `400` — `CRM_FIELD_ERROR_VALUE_NOT_VALID`. Неверное значение поля "`field`"
- `400` — `100`. Expected iterable value for multiple field, but got `type` instead
- `400` — `-`. Недостаточно прав на смену стадии
- `400` — `UPDATE_DYNAMIC_ITEM_RESTRICTED`. Вы не можете изменить элемент из-за ограничений вашего тарифа

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

### cURL (Webhook)

```bash
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"entityTypeId":2,"id":351,"fields":{"title":"REST Сделка #1","stageId":"C9:UC_NYL06U","assignedById":6,"observers":[1,2,3],"opened":"N","typeId":"SERVICE","opportunity":10000,"currencyId":"USD","additionalInfo":"Изменение сделки через REST","isManualOpportunity":"N","utmSource":"google","ufCrm_1721244707107":200.05,"parentId1220":2}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/crm.item.update
```

### cURL (OAuth)

```bash
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"entityTypeId":2,"id":351,"fields":{"title":"REST Сделка #1","stageId":"C9:UC_NYL06U","assignedById":6,"observers":[1,2,3],"opened":"N","typeId":"SERVICE","opportunity":10000,"currencyId":"USD","additionalInfo":"Изменение сделки через REST","isManualOpportunity":"N","utmSource":"google","ufCrm_1721244707107":200.05,"parentId1220":2},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/crm.item.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 } from '@bitrix24/b24jssdk'

declare const $b24: B24Frame

type CrmItem = {
  id: number
  title: string
}

// Shape of the payload returned in result (match the "response handling" section of the page)
type ItemUpdateResult = {
  item: CrmItem
}

try {
  const response = await $b24.actions.v2.call.make<ItemUpdateResult>({
    method: 'crm.item.update',
    params: {
      entityTypeId: 2,
      id: 351,
      fields: {
        title: 'REST Deal #1',
        stageId: 'C9:UC_NYL06U',
        assignedById: 6,
        observers: [1, 2, 3],
        opened: 'N',
        typeId: 'SERVICE',
        opportunity: 10000,
        currencyId: 'USD',
        additionalInfo: 'Update a deal via REST',
        isManualOpportunity: 'N',
        utmSource: 'google',
        ufCrm_1721244707107: 200.05,
        parentId1220: 2,
      },
    },
    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(`Updated item #${result.item.id} (${result.item.title})`)
  }
} 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 updateCrmItem() {
    try {
      // Initialize the SDK inside a Bitrix24 frame
      const $b24 = await B24Js.initializeB24Frame()

      const response = await $b24.actions.v2.call.make({
        method: 'crm.item.update',
        params: {
          entityTypeId: 2,
          id: 351,
          fields: {
            title: 'REST Deal #1',
            stageId: 'C9:UC_NYL06U',
            assignedById: 6,
            observers: [1, 2, 3],
            opened: 'N',
            typeId: 'SERVICE',
            opportunity: 10000,
            currencyId: 'USD',
            additionalInfo: 'Update a deal via REST',
            isManualOpportunity: 'N',
            utmSource: 'google',
            ufCrm_1721244707107: 200.05,
            parentId1220: 2,
          },
        },
        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(`Updated item #${result.item.id} (${result.item.title})`)
    } catch (error) {
      // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
      console.error(error)
    }
  }

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

### Python

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

try:
    bitrix_response = client.crm.item.update(
        entity_type_id=2,
        bitrix_id=351,
        fields={
            "title": "REST Сделка #1",
            "stageId": "C9:UC_NYL06U",
            "assignedById": 6,
            "observers": [
                1,
                2,
                3,
            ],
            "opened": "N",
            "typeId": "SERVICE",
            "opportunity": 10000,
            "currencyId": "USD",
            "additionalInfo": "Изменение сделки через REST",
            "isManualOpportunity": "N",
            "utmSource": "google",
            "ufCrm_1721244707107": 200.05,
            "parentId1220": 2,
        },
    ).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 {
    $entityTypeId = 1; // Set your entity type ID
    $id = 123; // Set the ID of the item to update
    $fields = [
        'TITLE' => 'Updated Title',
        'DATE_MODIFIED' => (new DateTime())->format(DateTime::ATOM), // Example DateTime field
        // Add other fields as necessary
    ];

    $itemService = $serviceBuilder->getCRMScope()->item();
    $updateResult = $itemService->update($entityTypeId, $id, $fields);

    if ($updateResult->isSuccess()) {
        print("Item updated successfully: " . json_encode($updateResult));
    } else {
        print("Failed to update item.");
    }
} catch (Throwable $e) {
    print("An error occurred: " . $e->getMessage());
}
```

### PHP CRest

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

$result = CRest::call(
    'crm.item.update',
    [
        'entityTypeId' => 2,
        'id' => 351,
        'fields' => [
            'title' => "REST Сделка #1",
            'stageId' => "C9:UC_NYL06U",
            'assignedById' => 6,
            'observers' => [1, 2, 3],
            'opened' => "N",
            'typeId' => "SERVICE",
            'opportunity' => 10000,
            'currencyId' => "USD",
            'additionalInfo' => "Изменение сделки через REST",
            'isManualOpportunity' => "N",
            'utmSource' => "google",
            'ufCrm_1721244707107' => 200.05,
            'parentId1220' => 2,
        ]
    ]
);

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

### Go

```go
// client и ctx уже созданы — см. раздел «SDK для Go»
res, err := client.Core().Call(ctx, "crm.item.update", b24.Params{
	"entityTypeId": 2,
	"id":           351,
	"fields": b24.Params{
		"title":               "REST Сделка #1",
		"stageId":             "C9:UC_NYL06U",
		"assignedById":        6,
		"observers":           []int{1, 2, 3},
		"opened":              "N",
		"typeId":              "SERVICE",
		"opportunity":         10000,
		"currencyId":          "USD",
		"additionalInfo":      "Изменение сделки через REST",
		"isManualOpportunity": "N",
		"utmSource":           "google",
		"ufCrm_1721244707107": 200.05,
		"parentId1220":        2,
	},
})
if err != nil {
	return fmt.Errorf("crm.item.update: %w", err)
}

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

var item struct {
	ID           b24.ID `json:"id"`
	CreatedTime  string `json:"createdTime"`
	UpdatedTime  string `json:"updatedTime"`
	CreatedBy    int    `json:"createdBy"`
	UpdatedBy    int    `json:"updatedBy"`
	AssignedByID b24.ID `json:"assignedById"`
}
if err := json.Unmarshal(raw, &item); err != nil {
	return fmt.Errorf("разбор ответа: %w", err)
}
fmt.Println(item.ID, item.CreatedTime)
```

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