Для AI-агентов: markdown этой страницы — /docs-content/entities/deals/fields.md индекс документации — /llms.txt

Поля сделки

GET /v1/deals/fields

Возвращает полный список доступных полей, включая пользовательские (ufCrm*).

Примеры

curl — личный ключ

Terminal
curl "https://vibecode.bitrix24.tech/v1/deals/fields" \
  -H "X-Api-Key: YOUR_API_KEY"

curl — OAuth-приложение

Terminal
curl "https://vibecode.bitrix24.tech/v1/deals/fields" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"

JavaScript — личный ключ

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-приложение

javascript
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 — подпись варианта для показа. Подпись, отправленная вместо идентификатора, теряется без ошибки. Подробнее — Формат значения по типам.

Пример ответа

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

JSON
{
  "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 — Ошибки.

Смотрите также