Обновить элемент crm.item.update

Выберите инструмент для разработки с AI-агентом:

  • используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
  • используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации

Scope: crm

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

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

При обновлении элемента производится стандартный ряд проверок, модификаций и автоматических действий:

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

Параметры метода

Обязательные параметры отмечены *

Название
тип

Описание

entityTypeId*
integer

Идентификатор системного или пользовательского типа, чей элемент мы хотим изменить.

Числовые значения для системных типов (Лид — 1, Сделка — 2, Контакт — 3, Компания — 4, Счет — 31 и др.) приведены в справочнике типов объектов CRM. Идентификатор смарт-процесса можно узнать методом crm.type.list

id*
integer

Идентификатор элемента, который мы хотим изменить.

Можно получить методом crm.item.list или crm.item.add

fields*
object

Объект формата

{
    field_1: value_1,
    field_2: value_2,
    ...,
    field_n: value_n,
}

где

  • field_n — название поля
  • value_n — новое значение поля

У каждого типа объекта CRM свой набор полей. Это значит, что набор полей для изменения Лида не обязан подходить набору полей для изменения Контакта или Смарт-процесса.

Список доступных полей относительно каждого типа объекта описан ниже.

Некорректное поле в fields будет проигнорировано.

Примечание

В fields нужно передавать только те поля, которые нужно изменить

useOriginalUfNames
boolean

Параметр для управления форматом имен пользовательских полей в запросе и ответе.
Возможные значения:

  • Y — оригинальные имена пользовательских полей, например UF_CRM_2_1639669411830
  • N — имена пользовательских полей в camelCase, например ufCrm2_1639669411830

По умолчанию — N

Параметр fields

Обязательные параметры отмечены *

Идентификатор объекта CRM entityTypeId: 1

Название
тип

Описание

title
string

Название элемента

honorific
crm_status

Строковый идентификатор обращения лида (например 'HNR_RU_1' = 'г-н').

Список доступных обращений можно узнать с помощью crm.status.list применив фильтр { ENTITY_ID: "HONOFIRIC" }

name
string

Имя

secondName
string

Отчество

lastName
string

Фамилия

birthdate
date

Дата рождения

companyTitle
string

Название компании

sourceId
crm_status

Строковый идентификатор источника.

Например 'CALL' = 'Звонок'.

Список доступных источников можно узнать с помощью crm.status.list применив фильтр { ENTITY_ID: "SOURCE" }

sourceDescription
text

Дополнительно об источнике

stageId
crm_status

Строковый идентификатор стадии элемента.

Например 'NEW' = 'Не обработан'.

Список доступных стадий можно узнать с помощью crm.status.list применив фильтр { ENTITY_ID: "STATUS" }

statusDescription
text

Дополнительно о стадии

post
string

Должность

currencyId
crm_currency

Идентификатор валюты элемента

isManualOpportunity
boolean

Режим расчета суммы. Возможные значения:

  • Y — ручной
  • N — автоматический

opportunity
double

Сумма

opened
boolean

Является ли элемент доступным для всех. Возможные значения:

  • Y — да
  • N — нет

comments
text

Комментарий

assignedById
user

Идентификатор ответственного за элемент

companyId
crm_company

Идентификатор компании привязанный к элементу.

Список компании можно получить с помощью метода crm.item.list по entityTypeId = 4

contactId
crm_contact

Идентификатор контакта привязанный к элементу.

Список контактов можно получить с помощью метода crm.item.list по entityTypeId = 3

contactIds
crm_contact[]

Список идентификаторов контакта привязанных к элементу.

Список контактов можно получить с помощью метода crm.item.list по entityTypeId = 3

originatorId
string

Внешний источник

originId
string

Идентификатор элемента во внешнем источнике

webformId
integer

Идентификатор CRM Формы

observers
user[]

Массив идентификаторов пользователей, которые будут являться Наблюдателями в элементе

utmSource
string

Рекламная система. Например: Yandex-Direct, Google-Adwords и другие

utmMedium
string

Тип трафика. Возможные значения:

  • CPC — объявления
  • CPM — баннеры

utmCampaign
string

Обозначение рекламной кампании

utmContent
string

Содержание кампании. Например, для контекстных объявлений

utmTerm
string

Условие поиска кампании. Например, ключевые слова контекстной рекламы

ufCrm...
crm_userfield

Пользовательское поле.

О пользовательских полях читайте раздел Пользовательские поля в CRM: обзор методов

Значения множественных полей передаются в виде массива.

Чтобы загрузить файл, в качестве значения пользовательского поля необходимо передать массив, где первый элемент — это имя файла, а второй — это закодированный в base64 контент файла.

parentId...
crm_entity

Поле-родитель. Элемент другого типа объекта CRM, который привязан к данному элементу.

Каждое такое поле имеет код parentId + {parentEntityTypeId}

fm
crm_multifield[]

Массив мультиполей.

Подробнее о мультиполях можно почитать в разделе crm_multifield

Структура мультиполя:

  • id — Уникальный идентификатор мультиполя. Если не существует мультиполя с данным id, то будет создано новое мультиполе
  • typeId — Тип мультиполя
  • valueType — Тип значения
  • value — Значение

Пример:

  fm: {
      "15": {
          "valueType": "WORK",
          "value": "+79999999",
          "typeId": "PHONE"
      },
      "16": {
          "valueType": "WORK",
          "value": "bitrix@bitrix.ru",
          "typeId": "EMAIL"
      }
  }

По умолчанию — null

Идентификатор объекта CRM entityTypeId: 2

Название
тип

Описание

title
string

Название элемента

typeId
crm_status

Строковый идентификатор типа объекта.

Например для сделки: 'SALE' = 'Продажа'

Список доступных типов объекта можно узнать с помощью crm.status.list применив фильтр { ENTITY_ID: "DEAL_TYPE" }

categoryId
integer

Идентификатор направления (воронки) сделки

stageId
crm_status

Строковый идентификатор стадии элемента.

Например 'NEW' = 'Не обработан'.

Список доступных стадий можно узнать с помощью crm.status.list применив фильтр:

  • Если сделка находится в общей воронке (направления) — { ENTITY_ID: "DEAL_STAGE" }
  • Если сделка находится не в общей воронке (направления) — { ENTITY_ID: "DEAL_STAGE_{categoryId}" }, где
    categoryId это идентификатор воронки (направления) сделки

isRecurring
boolean

Является ли сделка регулярной. Возможные значения:

  • Y — да
  • N — нет

probability
integer

Вероятность %

currencyId
crm_currency

Идентификатор валюты элемента

isManualOpportunity
boolean

Режим расчета суммы. Возможные значения:

  • Y — ручной
  • N — автоматический

opportunity
double

Сумма

taxValue
double

Сумма налога

companyId
crm_company

Идентификатор компании привязанный к элементу.

Список компании можно получить с помощью метода crm.item.list по entityTypeId = 4

contactId
crm_contact

Идентификатор контакта привязанный к элементу.

Список контактов можно получить с помощью метода crm.item.list по entityTypeId = 3

contactIds
crm_contact[]

Список идентификаторов контакта привязанных к элементу.

Список контактов можно получить с помощью метода crm.item.list по entityTypeId = 3

quoteId
crm_quote

Идентификатор предложения, который будет привязан к сделке

begindate
date

Дата начала элемента

closedate
date

Дата окончания элемента

opened
boolean

Является ли элемент доступным для всех. Возможные значения:

  • Y — да
  • N — нет

comments
text

Комментарий

assignedById
user

Идентификатор ответственного за элемент

sourceId
crm_status

Строковый идентификатор источника.

Например 'CALL' = 'Звонок'.

Список доступных источников можно узнать с помощью crm.status.list применив фильтр { ENTITY_ID: "SOURCE" }

sourceDescription
text

Дополнительно об источнике

leadId
crm_lead

Идентификатор лида, на основании, которого создается элемент

additionalInfo
string

Дополнительная информация

originatorId
string

Внешний источник

originId
string

Идентификатор элемента во внешнем источнике

observers
user[]

Массив идентификаторов пользователей, которые будут являться Наблюдателями в элементе

locationId
location

Идентификатор местоположения. Служебное поле

utmSource
string

Рекламная система. Yandex-Direct, Google-Adwords и другие

utmMedium
string

Тип трафика. Возможные значения:

  • CPC — объявления
  • CPM — баннеры

utmCampaign string

Обозначение рекламной кампании

utmContent
string

Содержание кампании. Например, для контекстных объявлений

utmTerm
string

Условие поиска кампании. Например, ключевые слова контекстной рекламы

ufCrm...
crm_userfield

Пользовательское поле. Смотрите раздел Пользовательские поля в CRM: обзор методов

  • Значения множественных полей передаются в виде массива
  • Чтобы загрузить файл, в качестве значения пользовательского поля необходимо передать массив, где первый элемент — это имя файла, а второй — это закодированный в base64 контент файла.

parentId...
crm_entity

Поле-родитель. Элемент другого типа объекта CRM, который привязан к данному элементу.

Каждое такое поле имеет код parentId + {parentEntityTypeId}

Идентификатор объекта CRM entityTypeId: 3

Название
тип

Описание

honorific
crm_status

Строковый идентификатор обращения контакта.

Например 'HNR_RU_1' = 'г-н'.

Список доступных обращений можно узнать с помощью crm.status.list применив фильтр { ENTITY_ID: "HONOFIRIC" }

name
string

Имя

secondName
string

Отчество

lastName
string

Фамилия

photo
file

Фотография

birthdate
date

Дата рождения

typeId
crm_status

Строковый идентификатор типа объекта.

Например для сделки: 'SALE' = 'Продажа'.

Список доступных типов объекта можно узнать с помощью crm.status.list применив фильтр { ENTITY_ID: "CONTACT_TYPE" }

sourceId
crm_status

Строковый идентификатор источника.

Например 'CALL' = 'Звонок'.

Список доступных источников можно узнать с помощью crm.status.list применив фильтр { ENTITY_ID: "SOURCE" }

sourceDescription
text

Дополнительно об источнике

post
string

Должность

comments
text

Комментарий

opened
boolean

Является ли элемент доступным для всех. Возможные значения:

  • Y — да
  • N — нет

export
boolean

Участвует ли контакт в экспорте

assignedById
user

Идентификатор ответственного за элемент

companyId
crm_company

Идентификатор компании привязанный к элементу.

Список компаний можно получить с помощью метода crm.item.list по entityTypeId = 4

companyIds
crm_company

Массив идентификаторов компаний, которые будут привязаны к элементу

leadId
crm_lead

Идентификатор лида, на основании, которого создается элемент

originatorId
string

Внешний источник

originId
string

Идентификатор элемента во внешнем источнике

originVersion
string

Версия оригинала

observers
user[]

Массив идентификаторов пользователей, которые будут являться Наблюдателями в элементе

utmSource
string

Рекламная система. Yandex-Direct, Google-Adwords и другие

utmMedium
string

Тип трафика. Возможные значения:

  • CPC — объявления
  • CPM — баннеры

utmCampaign
string

Обозначение рекламной кампании

utmContent
string

Содержание кампании. Например, для контекстных объявлений

utmTerm
string

Условие поиска кампании. Например, ключевые слова контекстной рекламы

ufCrm...
crm_userfield

Пользовательское поле. Смотрите раздел Пользовательские поля в CRM: обзор методов

  • Значения множественных полей передаются в виде массива
  • Чтобы загрузить файл, в качестве значения пользовательского поля необходимо передать массив, где первый элемент — это имя файла, а второй — это закодированный в base64 контент файла.

parentId...
crm_entity

Поле-родитель. Элемент другого типа объекта CRM, который привязан к данному элементу.

Каждое такое поле имеет код parentId + {parentEntityTypeId}

fm
crm_multifield[]

Массив мультиполей (телефоны, e-mail, мессенджеры).

Структура каждого элемента:

  • typeId — тип мультиполя: PHONE, EMAIL, WEB, IM
  • valueType — подтип значения: WORK, MOBILE, HOME, MAILING, OTHER
  • value — значение

Ключ элемента в объекте определяет операцию:

Добавить новое значение — использовать ключи n0, n1, n2 ...:

"fm": {
    "n0": { "typeId": "PHONE", "valueType": "WORK", "value": "+79991234567" },
    "n1": { "typeId": "EMAIL", "valueType": "WORK", "value": "new@example.com" }
}

Обновить существующее значение — использовать числовой id записи (берется из ответа crm.item.get в поле fm):

"fm": {
    "15": { "typeId": "PHONE", "valueType": "MOBILE", "value": "+79990000000" }
}

Удалить значение — передать числовой id записи с пустым value:

"fm": {
    "16": { "typeId": "EMAIL", "value": "" }
}

Операции можно комбинировать в одном запросе.

По умолчанию — null

Идентификатор объекта CRM entityTypeId: 4

Название
тип

Описание

title
string

Название элемента

typeId
crm_status

Строковый идентификатор типа объекта.

Например для сделки: 'SALE' = 'Продажа'.

Список доступных типов объекта можно узнать с помощью crm.status.list применив фильтр { ENTITY_ID: "COMPANY_TYPE" }

logo
file

Логотип

bankingDetails
string

Банковские реквизиты

industry
crm_status

Строковый идентификатор типа индустрии.

Например 'IT' = 'Информационные технологии'.

Список доступных типов индустрий можно узнать с помощью метода crm.status.list применив фильтр { ENTITY_ID: "INDUSTRY"}

employees
crm_status

Строковый идентификатор типа количества сотрудников.

Значение берется из списка доступных, например 'EMPLOYEES_1' = 'менее 50'.

Список доступных типов количеств сотрудников можно узнать с помощью метода crm.status.list применив фильтр { ENTITY_ID: "EMPLOYEES" }

currencyId
crm_currency

Идентификатор валюты элемента

revenue
double

Годовой оборот

opened
boolean

Является ли элемент доступным для всех. Возможные значения:

  • Y — да
  • N — нет

comments
text

Комментарий

isMyCompany
boolean

Является ли компания моей компанией

assignedById
user

Идентификатор ответственного за элемент

contactIds
crm_contact[]

Список идентификаторов контакта привязанных к элементу.

Список контактов можно получить с помощью метода crm.item.list по entityTypeId = 3.

leadId
crm_lead

Идентификатор лида, на основании, которого создается элемент.

originatorId
string

Внешний источник

originId
string

Идентификатор элемента во внешнем источнике

originVersion
string

Версия оригинала

observers
user[]

Массив идентификаторов пользователей, которые будут являться Наблюдателями в элементе

utmSource
string

Рекламная система. Yandex-Direct, Google-Adwords и другие

utmMedium
string

Тип трафика Возможные значения:

  • CPC — объявления
  • CPM — баннеры

utmCampaign
string

Обозначение рекламной кампании

utmContent
string

Содержание кампании. Например, для контекстных объявлений

utmTerm
string

Условие поиска кампании. Например, ключевые слова контекстной рекламы

ufCrm...
crm_userfield

Пользовательское поле. Смотрите раздел Пользовательские поля в CRM: обзор методов

  • Значения множественных полей передаются в виде массива
  • Чтобы загрузить файл, в качестве значения пользовательского поля необходимо передать массив, где первый элемент — это имя файла, а второй — это закодированный в base64 контент файла

parentId...
crm_entity

Поле-родитель. Элемент другого типа объекта CRM, который привязан к данному элементу.

Каждое такое поле имеет код parentId + {parentEntityTypeId}

fm
crm_multifield[]

Массив мультиполей (телефоны, e-mail, мессенджеры).

Структура каждого элемента:

  • typeId — тип мультиполя: PHONE, EMAIL, WEB, IM
  • valueType — подтип значения: WORK, MOBILE, HOME, MAILING, OTHER
  • value — значение

Ключ элемента в объекте определяет операцию:

Добавить новое значение — использовать ключи n0, n1, n2 ...:

"fm": {
    "n0": { "typeId": "PHONE", "valueType": "WORK", "value": "+79991234567" },
    "n1": { "typeId": "EMAIL", "valueType": "WORK", "value": "new@example.com" }
}

Обновить существующее значение — использовать числовой id записи (берется из ответа crm.item.get в поле fm):

"fm": {
    "15": { "typeId": "PHONE", "valueType": "MOBILE", "value": "+79990000000" }
}

Удалить значение — передать числовой id записи с пустым value:

"fm": {
    "16": { "typeId": "EMAIL", "value": "" }
}

Операции можно комбинировать в одном запросе.

По умолчанию — null

Идентификатор объекта CRM entityTypeId: 7

Название
тип

Описание

title
string

Название элемента

assignedById
user

Идентификатор ответственного за элемент

opened
boolean

Является ли элемент доступным для всех. Возможные значения:

  • Y — да
  • N — нет

content
text

Содержание

terms
text

Условия

comments
text

Комментарий

dealId
crm_deal

Идентификатор привязанной сделки

leadId
crm_lead

Идентификатор лида, на основании, которого создается элемент

storageTypeId
integer

Идентификатор типа хранения Возможные значения:

  • 1 — файл
  • 2 — WebDAV
  • 3 — диск

storageElementIds
integer

Массив файлов

webformId
integer

Идентификатор CRM Формы

companyId
crm_company

Идентификатор компании привязанный к элементу.

Список компании можно получить с помощью метода crm.item.list по entityTypeId = 4

contactId
crm_contact

Идентификатор контакта привязанный к элементу.

Список контактов можно получить с помощью метода crm.item.list по entityTypeId = 3

contactIds
crm_contact[]

Список идентификаторов контакта привязанных к элементу.

Список контактов можно получить с помощью метода crm.item.list по entityTypeId = 3

locationId
location

Идентификатор местоположения. Служебное поле

currencyId
crm_currency

Идентификатор валюты элемента

isManualOpportunity
boolean

Режим расчета суммы.

  • Y — ручной
  • N — автоматический

opportunity
double

Сумма

taxValue
double

Сумма налога

stageId
crm_status

Строковый идентификатор стадии элемента.

Например 'DRAFT' = 'Новое'.

Список доступных стадий можно узнать с помощью crm.status.list применив фильтр { ENTITY_ID: "QUOTE_STATUS" }

begindate
date

Дата начала элемента

closedate
date

Дата окончания элемента

actualDate
date

Актуально до

mycompanyId
crm_company

Идентификатор моей компании

utmSource
string

Рекламная система. Yandex-Direct, Google-Adwords и другие

utmMedium
string

Тип трафика.

  • CPC — объявления
  • CPM — баннеры

utmCampaign
string

Обозначение рекламной кампании

utmContent
string

Содержание кампании. Например, для контекстных объявлений

utmTerm
string

Условие поиска кампании. Например, ключевые слова контекстной рекламы

ufCrm...
crm_userfield

Пользовательское поле. Смотрите раздел Пользовательские поля в CRM: обзор методов.

  • Значения множественных полей передаются в виде массива
  • Чтобы загрузить файл, в качестве значения пользовательского поля необходимо передать массив, где первый элемент — это имя файла, а второй — это закодированный в base64 контент файла.

parentId...
crm_entity

Поле-родитель. Элемент другого типа объекта CRM, который привязан к данному элементу.

Каждое такое поле имеет код parentId + {parentEntityTypeId}

Идентификатор объекта CRM entityTypeId: 31

Название
тип

Описание

title
string

Название элемента

xmlId
string

Внешний код

assignedById
user

Идентификатор ответственного за элемент

opened
boolean

Является ли элемент доступным для всех. Возможные значения:

  • Y — да
  • N — нет

webformId
integer

Идентификатор CRM Формы

begindate
date

Дата начала элемента

closedate
date

Дата окончания элемента

companyId
crm_company

Идентификатор компании привязанный к элементу.

Список компании можно получить с помощью метода crm.item.list по entityTypeId = 4

contactId
crm_contact

Идентификатор контакта привязанный к элементу.

Список контактов можно получить с помощью метода crm.item.list по entityTypeId = 3

contactIds
crm_contact[]

Список идентификаторов контакта привязанных к элементу.

Список контактов можно получить с помощью метода crm.item.list по entityTypeId = 3

observers
user[]

Массив идентификаторов пользователей, которые будут являться Наблюдателями в элементе

stageId
crm_status

Строковый идентификатор стадии элемента.

Например 'DT31_13:N' = 'Новый'.

Список доступных стадий можно узнать с помощью crm.status.list, применив фильтр: { ENTITY_ID: "SMART_INVOICE_STAGE_{categoryId}" }, где
categoryId — идентификатор воронки счетов по умолчанию. Его можно узнать с помощью crm.category.list по entityTypeId = 31

sourceId
crm_status

Строковый идентификатор источника.

Например 'CALL' = 'Звонок'.

Список доступных источников можно узнать с помощью crm.status.list применив фильтр { ENTITY_ID: "SOURCE" }

sourceDescription
text

Дополнительно об источнике

currencyId
crm_currency

Идентификатор валюты элемента

isManualOpportunity
boolean

Режим расчета суммы. Возможные значения:

  • Y — ручной
  • N — автоматический

opportunity
double

Сумма

taxValue
double

Сумма налога

mycompanyId
crm_company

Идентификатор моей компании

comments
text

Комментарий

locationId
location

Идентификатор местоположения. Служебное поле

ufCrm...
crm_userfield

Пользовательское поле. Смотрите раздел Пользовательские поля в CRM: обзор методов.

  • Значения множественных полей передаются в виде массива
  • Чтобы загрузить файл, в качестве значения пользовательского поля необходимо передать массив, где первый элемент — это имя файла, а второй — это закодированный в base64 контент файла.

parentId...
crm_entity

Поле-родитель. Элемент другого типа объекта CRM, который привязан к данному элементу.

Каждое такое поле имеет код parentId + {parentEntityTypeId}

Идентификатор объекта CRM entityTypeId: можно получить методом crm.type.list или создать новый методом crm.type.add

Название
тип

Описание

title
string

Название элемента

xmlId
string

Внешний код

assignedById
user

Идентификатор ответственного за элемент

opened
boolean

Является ли элемент доступным для всех.

  • Y — да
  • N — нет

webformId
integer

Идентификатор CRM Формы

begindate
date

Дата начала элемента.

Доступно лишь при включенной настройке isBeginCloseDatesEnabled у соответствующего смарт-процесса.

closedate
date

Дата окончания элемента.

Доступно лишь при включенной настройке isBeginCloseDatesEnabled у соответствующего смарт-процесса

companyId
crm_company

Идентификатор компании привязанный к элементу.

Список компании можно получить с помощью метода crm.item.list по entityTypeId = 4.

Доступно лишь при включенной настройке isClientEnabled у соответствующего смарт-процесса

contactId
crm_contact

Идентификатор контакта привязанный к элементу.

Список контактов можно получить с помощью метода crm.item.list по entityTypeId = 3.

Доступно лишь при включенной настройке isClientEnabled у соответствующего смарт-процесса

contactIds
crm_contact[]

Список идентификаторов контакта привязанных к элементу.

Список контактов можно получить с помощью метода crm.item.list по entityTypeId = 3.

Доступно лишь при включенной настройке isClientEnabled у соответствующего смарт-процесса

observers
user[]

Массив идентификаторов пользователей, которые будут являться Наблюдателями в элементе.

Доступно лишь при включенной настройке isObserversEnabled у соответствующего смарт-процесса

categoryId
crm_category

Идентификатор воронки элемента смарт-процесса.

Если идентификатор не указан, то смарт-процесс будет перемещен в основную воронку.

Список доступных воронок можно узнать с помощью crm.category.list применив соответсвующий entityTypeId

stageId
crm_status

Строковый идентификатор стадии элемента.

Например 'DT1220_30:NEW' = 'Начало'.

Список доступных стадий можно узнать с помощью crm.status.list применив фильтр { ENTITY_ID: "DYNAMIC_{entityTypeId}_STAGE_{categoryId}" }, где

  • entityTypeId — идентификатор типа смарт-процесса
  • categoryId — идентификатор воронки (направления) элемента смарт-процесса

Подробнее о воронках (направлениях).

Доступно лишь при включенной настройке isStagesEnabled у соответствующего смарт-процесса

sourceId
crm_status

Строковый идентификатор источника. (например 'CALL' = 'Звонок').

Список доступных источников можно узнать с помощью crm.status.list применив фильтр { ENTITY_ID: "SOURCE" }.

Доступно лишь при включенной настройке isSourceEnabled у соответствующего смарт-процесса

sourceDescription
text

Дополнительно об источнике.

Доступно лишь при включенной настройке isSourceEnabled у соответствующего смарт-процесса

currencyId
crm_currency

Идентификатор валюты элемента.

Доступно лишь при включенной настройке isLinkWithProductsEnabled у соответствующего смарт-процесса

isManualOpportunity
boolean

Режим расчета суммы. Возможные значения:

  • Y — ручной
  • N — автоматический

Доступно лишь при включенной настройке isLinkWithProductsEnabled у соответствующего смарт-процесса

opportunity
double

Сумма.

Доступно лишь при включенной настройке isLinkWithProductsEnabled у соответствующего смарт-процесса

taxValue
double

Сумма налога.

Доступно лишь при включенной настройке isLinkWithProductsEnabled у соответствующего смарт-процесса

mycompanyId
crm_company

Идентификатор моей компании.

Доступно лишь при включенной настройке isMycompanyEnabled у соответствующего смарт-процесса

ufCrm...
crm_userfield

Пользовательское поле. Смотрите раздел Пользовательские поля в CRM: обзор методов.

  • Значения множественных полей передаются в виде массива
  • Чтобы загрузить файл, в качестве значения пользовательского поля необходимо передать массив, где первый элемент — это имя файла, а второй — это закодированный в base64 контент файла.

parentId...
crm_entity

Поле-родитель. Элемент другого типа объекта CRM, который привязан к данному элементу.

Каждое такое поле имеет код parentId + {parentEntityTypeId}

Настройки смарт-процесса

Подробнее об управлении настройками смарт-процессов вы можете прочитать в Смарт-процессы: обзор методов и событий

Как обновить пользовательское поле типа file

  1. Загрузить новый файл вместо старого (не множественное поле)

    Чтобы заменить файл в одиночном поле, загрузите новый файл. Старый будет удален автоматически.

    {
        "fields": {
            "ufCrm1617027453943": [
                "myfile.pdf",
                "...base64_encoded_file_content..."
            ]
        }
    }
    
  2. Удалить значение пользовательского поля типа файл

    Для этого достаточно передать пустую строку ('') вместо значения.

  3. Оставить значение не множественного поля типа файл без изменений

    Самый простой вариант — не добавлять в fields ключ с этим полем.

    Но если надо и передать, и не изменить, то в качестве значения надо передать список, где по ключу id будет идентификатор файла.

    {
        "fields": {
            "ufCrm1617027453943": {
                "id": 433
            }
        }
    }
    

    Важно

    Если в id передать отличное от текущего значение, то значение поля обнулится и файл будет стерт.

  4. Работа с множественным полем типа файл

    Значение множественного поля — это массив. Каждый элемент массива подчиняется тем же правилам, что и для не множественных значений.

    Как частично перезаписать значения множественного поля типа файл

    Например, сейчас в множественном поле типа файл находятся значения [12, 255, 44].

    Необходимо оставить файлы 12 и 44, а вместо 255 загрузить новый.

    Запрос должен выглядеть следующим образом:

    {
        "fields": {
            "ufCrm1617027453943": [
                {
                    "id": 12
                },
                {
                    "id": 44
                },
                [
                    "myNewFile.pdf",
                    "...base64_encoded_file_content..."
                ]
            ]
        }
    }
    

Примеры кода

Обновить сделку с id = 351

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 -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
// 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)
}
<!-- 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>
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}")
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());
}
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>';
// 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)

Обработка ответа

HTTP-статус: 200

{
    "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

Информация об обновленном элементе, описание полей

time
time

Информация о времени выполнения запроса

По умолчанию имена пользовательских полей передаются и возвращаются в camelCase, например ufCrm2_1639669411830.
При передаче параметра useOriginalUfNames со значением Y пользовательские поля будут возвращаться с оригинальными именами, например UF_CRM_2_1639669411830.

Обработка ошибок

HTTP-статус: 400, 403

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

Название
тип

Описание

error
string

Строковый код ошибки. Состоит из цифр, латинских букв и знака подчеркивания. Может прийти пустым — тогда причину показывает только error_description

error_description
string

Текст ошибки для разработчика. Не показывайте его конечному пользователю без обработки

Возможные коды ошибок

Статус

Код

Описание

Значение

403

allowed_only_intranet_user

Действие разрешено только интранет-пользователям

Пользователь не является интранет-пользователем

400

NOT_FOUND

Смарт-процесс не найден

Возникает, при передаче невалидного entityTypeId

400

ACCESS_DENIED

Доступ запрещен

У пользователя нет прав на изменение элементов типа entityTypeId

400

CRM_FIELD_ERROR_VALUE_NOT_VALID

Неверное значение поля "field"

Передано неправильное значения поля field

400

100

Expected iterable value for multiple field, but got type instead

В одно из множественных полей было передано значения типа type, хотя ожидался итерируемый тип

400

-

Недостаточно прав на смену стадии

Если пользователь пытается изменить стадию элемента, при том, что у него недостаточно прав

400

UPDATE_DYNAMIC_ITEM_RESTRICTED

Вы не можете изменить элемент из-за ограничений вашего тарифа

Ограничения тарифа не позволяют изменять элементы смарт-процессов

Статусы и коды системных ошибок

HTTP-статус: 4xx, 5xx

Описанные ниже ошибки возвращает сам REST API, а не логика конкретного метода. Они могут прийти в ответ на любой метод.

Статус

Код
Текст ошибки

Описание

500

INTERNAL_SERVER_ERROR
Internal server error

Возникла внутренняя ошибка сервера. Повторите вызов, а если ошибка сохраняется, обратитесь к администратору сервера или в техническую поддержку Битрикс24

500

ERROR_UNEXPECTED_ANSWER
Server returned an unexpected response

Сервер вернул неожиданный ответ. Повторите вызов, а если ошибка сохраняется, обратитесь к администратору сервера или в техническую поддержку Битрикс24

503

QUERY_LIMIT_EXCEEDED
Too many requests

Превышен лимит на интенсивность запросов

429

OPERATION_TIME_LIMIT
Method is blocked due to operation time limit

Метод заблокирован из-за превышения лимита на ресурсоемкость запросов. Блокировка снимается автоматически, когда накопленное время выполнения метода перестает превышать лимит

401

NO_AUTH_FOUND
Wrong authorization data

В запросе нет авторизационных данных: не передан ни access-токен, ни код вебхука

401

INVALID_REQUEST
Https required

Методы вызываются только по протоколу HTTPS

401

OVERLOAD_LIMIT
REST API is blocked due to overload

REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка. Чтобы ее снять, обратитесь в техническую поддержку Битрикс24

401

ACCESS_DENIED
REST is available only on commercial plans

REST API доступен только на коммерческих тарифах. У вебхука текст ошибки другой — REST is available only by subscription

401

INVALID_CREDENTIALS
Invalid request credentials

Не найден активный вебхук с указанным идентификатором пользователя и секретным кодом

404

ERROR_METHOD_NOT_FOUND
Method not found!

Метод с таким именем не найден. Имя написано с ошибкой, метода нет в REST API или он недоступен без нужного скоупа

401

insufficient_scope
The request requires higher privileges than provided by the webhook token

Запрос требует более широких прав, чем есть у токена: у вебхука это выданные ему права, у приложения — скоуп. У приложения текст ошибки заканчивается на provided by the access token

401

expired_token
The access token provided has expired

Срок действия access-токена истек

401

user_access_error
The user does not have access to the application

Приложение установлено, но администратор Битрикс24 открыл доступ к нему только конкретным пользователям

403

PORTAL_DELETED
Portal was deleted

Публичная часть сайта закрыта. Чтобы открыть ее на коробочной установке, отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта

Продолжите изучение