Для AI-агентов: markdown этой страницы — /docs-content/entities/deals/fields.md индекс документации — /llms.txt
Поля сделки
GET /v1/deals/fields
Возвращает полный список доступных полей, включая пользовательские (ufCrm*).
Примеры
curl — личный ключ
curl "https://vibecode.bitrix24.tech/v1/deals/fields" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth-приложение
curl "https://vibecode.bitrix24.tech/v1/deals/fields" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/deals/fields', {
headers: {
'X-Api-Key': 'YOUR_API_KEY',
},
})
const { success, data } = await res.json()
console.log('Полей:', Object.keys(data.fields).length)
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/deals/fields', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { success, data } = await res.json()
Поля ответа
Подписи полей label и description приходят на русском языке, а те, что платформа берёт напрямую с портала, — на языке портала. Заголовками запроса язык не переключается. У значений enum подпись label английская, русская — в labelRu.
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data |
object | Схема полей сделки и операции, доступные со сделкой. Ключи — в строках ниже |
data.fields |
object | Схема полей сделки: имя поля → объект с type, readonly и label. У части полей есть description и дополнительные признаки, например nullable, multiple, enum, items. Стандартные поля перечислены ниже, к ним добавляются пользовательские ufCrm* этого портала |
data.relations |
object | Связи: contact — все привязанные к сделке контакты и операции с ними, company — компания сделки. Подробнее — Контакты сделки |
data.products |
object | Операции с товарными позициями сделки, предупреждение setWarning о полной замене позиций и схема полей позиции. Подробнее — Поля товаров сделки |
data.activities |
object | Дела сделки: операции list и create и типы дел call, meeting, email, task. Подробнее — Список дел у карточки CRM и Создать дело у карточки CRM |
data.actions |
object | Действия над сделкой: move — метод, путь и параметры перевода на другую стадию. Подробнее — Перевести сделку на другую стадию |
data.aggregatable |
array | Стандартные поля, допустимые в groupBy агрегации: amount, stageId, stageSemanticId, categoryId, assignedById, sourceId |
data.batch |
array | Операции записи сделки, доступные в пакетных вызовах: create, update, delete |
data.import |
object | Метод, путь и потолок пакета для импорта записей |
data.include |
array | Имена, которые принимает параметр include: contact, company |
Стандартные поля сделки
| Поле | Тип | RO | Описание |
|---|---|---|---|
id |
number | да | ID сделки |
title |
string | Название | |
amount |
number | Сумма | |
currency |
string | Валюта. Список: GET /v1/currencies |
|
stageId |
string | Стадия воронки. Набор стадий и их идентификаторы настраиваются на стороне портала и отличаются между воронками. Актуальный список — GET /v1/statuses?filter[entityId]=DEAL_STAGE для основной воронки, GET /v1/statuses?filter[entityId]=DEAL_STAGE_{N} для воронки с categoryId={N} (значение categoryId берётся из GET /v1/deal-categories) |
|
categoryId |
number | ID воронки (0 = основная). Список: GET /v1/deal-categories |
|
stageSemanticId |
string | да | Смысловая категория текущей стадии: P — в работе, S — успех, F — провал |
companyId |
number | ID компании. Поиск: GET /v1/companies |
|
contactId |
number | ID основного контакта. Поиск: GET /v1/contacts |
|
contactIds |
number[] | да | Все привязанные контакты. Поиск: GET /v1/contacts |
assignedById |
number | Ответственный. Список: GET /v1/users |
|
createdBy |
number | да | Создатель. Поиск: GET /v1/users |
updatedBy |
number | да | Кто изменил. Поиск: GET /v1/users |
createdAt |
datetime | да | Дата создания |
updatedAt |
datetime | да | Дата изменения |
closedAt |
datetime | Дата закрытия | |
closed |
boolean | да | Закрыта ли сделка |
isWon |
boolean | да | Находится ли сделка на выигранной стадии (stageSemanticId = S). Вычисляет Битрикс24; приходит только в списке или поиске с явным select (см. ниже). В фильтре не принимается — 400 UNKNOWN_FILTER_FIELD, фильтруйте по stageSemanticId; сортировка работает |
isLose |
boolean | да | Находится ли сделка на проигранной стадии (stageSemanticId = F). Как isWon: только в явном select, в фильтре не принимается, сортировка работает |
isWork |
boolean | да | Находится ли сделка на стадии в работе (stageSemanticId = P). Как isWon: только в явном select, в фильтре не принимается, сортировка работает |
hasProducts |
boolean | да | Есть ли у сделки хотя бы одна товарная позиция (GET /v1/deals/{id}/products). Только в явном select, как isWon. В фильтре не принимается (400 UNKNOWN_FILTER_FIELD): Битрикс24 сравнивает флаг только с булевым значением, форма Y/N не совпадает ни с одной записью, а замены в фильтре нет — читайте select=hasProducts или товарные позиции; сортировка работает |
receivedAmount |
number | да | Сумма, засчитанная как полученная, в учётной валюте портала: пока сделка на выигранной стадии, равна amount, пересчитанной по курсу портала (совпадает с amount, если currency — учётная валюта), иначе 0. Вычисляет Битрикс24; приходит только в явном select (см. ниже). Фильтр (в том числе $gt/$lt) и сортировка работают |
lostAmount |
number | да | Сумма, засчитанная как потерянная, в учётной валюте портала: пока сделка на проигранной стадии, равна amount, пересчитанной по курсу портала, иначе 0. Как receivedAmount: только в явном select, фильтр и сортировка работают |
sourceId |
string | Источник. Список: GET /v1/statuses?filter[entityId]=SOURCE |
|
sourceDescription |
string | Описание источника | |
probability |
number | Вероятность успеха (%) | |
opened |
boolean | Доступна для всех | |
comments |
string | Комментарий | |
observers |
number[] | Наблюдатели. Список: GET /v1/users |
|
typeId |
string | Тип записи. Список: GET /v1/statuses?filter[entityId]=DEAL_TYPE |
|
isReturning |
boolean | Повторная сделка | |
leadId |
number | Лид, из которого создана сделка. Приходит null, если сделка не создавалась конвертацией лида. Поиск: GET /v1/leads |
|
quoteId |
number | Предложение, из которого создана сделка. Приходит null, если сделка создана не из предложения. Поиск: GET /v1/quotes |
|
taxValue |
number | да | Сумма налога по сделке, в валюте сделки. Приходит 0, если налога нет. Считается Битрикс24 по товарным позициям и не принимается ни на одной двери записи. Замерено 2026-09-11 на живых порталах обеих платформ: создание и изменение в обоих режимах суммы, импорт в обоих режимах — чтение назад даёт 0 всегда. Поэтому объявлено только для чтения: попытка записи отклоняется, а не отвечает успехом с потерей значения. Налог задаётся через товарные позиции |
originId |
string | Идентификатор этой сделки во внешней системе, из которой она импортирована. Приходит null у сделок, созданных в Битрикс24 |
|
originatorId |
string | Внешняя система, из которой импортирована сделка. Приходит null у сделок, созданных в Битрикс24 |
|
additionalInfo |
string | Произвольная дополнительная информация по сделке. Приходит null, если не заполнено |
|
lastActivityBy |
number | Пользователь, совершивший последнюю активность в таймлайне сделки. Приходит 0, если активности не было. Поиск: GET /v1/users |
Семь полей выше — leadId, quoteId, taxValue, originId, originatorId, additionalInfo и lastActivityBy — принимаются в filter и в сортировке, в том числе в GET /v1/deals, POST /v1/deals/search и POST /v1/deals/aggregate. У пяти из них (leadId, quoteId, originId, originatorId, additionalInfo) значение может прийти null, и у трёх строковых пустая строка от Битрикс24 приводится к null — сравнивайте с пустым значением, а не с "".
Шесть вычисляемых полей — isWon, isLose, isWork, hasProducts, receivedAmount, lostAmount — Битрикс24 считает только для списка, поиска или действия list общего пакета POST /v1/batch, где поле названо в select явно и без * (GET /v1/deals?select=id,isWon,receivedAmount, POST /v1/deals/search с select). Одиночный GET /v1/deals/{id}, список без select и действие list пакета сущности (его select — проекция, на портал не уходит) отдают по ним null — это не «пусто», а «не запрошено». Все шесть только для чтения: присланное значение отклоняется (создание и изменение — 400 READONLY_FIELD, импорт — 400 IMPORT_ITEM_VALIDATION, пакет сущности — 400 BATCH_ITEM_VALIDATION, общий пакет — READONLY_FIELD под вызовом). Четыре флага в filter не принимаются (400 UNKNOWN_FILTER_FIELD): булев фильтр уходит в Битрикс24 в форме Y/N, а эти флаги портал сравнивает только с булевым значением — по трём флагам стадии строка Y даёт обратный набор, по hasProducts не совпадает ни с одной записью; для стадии фильтруйте по stageSemanticId, для товаров замены нет. Сортировка по всем шести работает; receivedAmount и lostAmount принимаются и в sum/avg/min/max POST /v1/deals/aggregate — итог в учётной валюте портала, в отличие от sum(amount), который складывает суммы в валютах сделок как есть.
UTM-поля (utmSource, utmMedium, utmCampaign, utmContent, utmTerm) возвращаются при чтении, но ни в фильтре, ни в сортировке не принимаются. Запрос отклоняется кодом 400 UNKNOWN_FILTER_FIELD или 400 UNKNOWN_SORT_FIELD до обращения к Битрикс24, а причина по каждому полю приходит в его description в ответе этого же эндпоинта. Для контактов фильтруйте по contactId (основной контакт) или по contactIds (любой из привязанных).
Пользовательские поля (ufCrm*) также возвращаются в ответах и принимаются при создании/обновлении. У поля типа enumeration в ответе этого эндпоинта по пути data.fields.<имя поля>.items приходит массив вариантов вида { "ID": "3983", "VALUE": "warm" }. Это не ключ enum объявленных полей с элементами value и label: для записи в пользовательское поле берётся ID, а VALUE — подпись варианта для показа. Подпись, отправленная вместо идентификатора, теряется без ошибки. Подробнее — Формат значения по типам.
Пример ответа
{
"success": true,
"data": {
"fields": {
"id": { "type": "number", "readonly": true, "label": "ID сделки", "description": "Уникальный числовой идентификатор сделки." },
"title": { "type": "string", "readonly": false, "label": "Название", "description": "Название сделки." },
"assignedById": { "type": "number", "readonly": false, "label": "Ответственный", "description": "ID ответственного пользователя. Список: GET /v1/users." },
"stageSemanticId": { "type": "string", "readonly": true, "label": "Семантика стадии", "description": "Смысловая категория текущей стадии — коды расшифрованы в enum.", "enum": [{ "value": "P", "label": "In progress", "labelRu": "В работе" }, { "value": "S", "label": "Success", "labelRu": "Успех" }, { "value": "F", "label": "Failure", "labelRu": "Провал" }] }
},
"relations": {
"contact": { "type": "many", "entity": "contacts", "operations": ["list", "add", "remove", "set", "clear"] },
"company": { "type": "one", "entity": "companies", "includable": true }
},
"activities": { "operations": ["list", "create"], "types": ["call", "meeting", "email", "task"] },
"actions": {
"move": { "description": "Change deal stage", "method": "POST", "path": "/v1/deals/{id}/move", "params": { "stageId": { "type": "string", "required": true }, "categoryId": { "type": "string", "required": false } } }
},
"aggregatable": ["amount", "stageId", "stageSemanticId", "categoryId", "assignedById", "sourceId"],
"batch": ["create", "update", "delete"],
"import": { "method": "POST", "path": "/v1/deals/import", "maxItems": 100 },
"include": ["contact", "company"]
}
}
Показаны четыре поля из data.fields и остальные ключи data. Блок data.products в примере опущен, полный состав полей — в таблицах выше.
Что делать с именами из data.include, разобрано на странице Получить сделку. Подробнее о параметре include — Связанные данные.
Пример ответа при ошибке
403 — у ключа нет скоупа crm:
{
"success": false,
"error": {
"code": "SCOPE_DENIED",
"message": "This endpoint requires 'crm' scope",
"hint": "This request needs the 'crm' scope, which the calling key does not carry. Add 'crm' to this key in the developer cabinet (or through the management API), then repeat the call.",
"cause": "key_scope_missing",
"requiredScope": "crm",
"keyScopes": ["task", "im"],
"fix": { "action": "edit_key_scopes", "via": "cabinet" },
"userMessage": "Ключу приложения не хватает права «CRM». Добавить его можно в настройках ключа в кабинете разработчика."
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 403 | SCOPE_DENIED |
API-ключ не имеет скоупа crm |
| 401 | TOKEN_MISSING |
API-ключ не имеет настроенных токенов |
| 429 | RATE_LIMITED |
Превышен лимит запросов: 300 в минуту на портал, все API-ключи портала делят один лимит. Точное значение — в заголовке x-ratelimit-limit (потолок делится на реплики). Повторите после срока из заголовка Retry-After |
Полный список общих ошибок API — Ошибки.