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

Поля счёта

GET /v1/invoices/fields

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

Примеры

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

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

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

Terminal
curl -X GET https://vibecode.bitrix24.tech/v1/invoices/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/invoices/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/invoices/fields', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

const { success, data } = await res.json()

Поля ответа

Подписи полей label и description приходят на русском языке, а те, что платформа берёт напрямую с портала, — на языке портала. Заголовками запроса язык не переключается.

Поле Тип Описание
success boolean Всегда true при успехе
data.fields object Схема полей счёта: имя поля → type, readonly, label, description. Стандартные поля перечислены ниже, к ним добавляются пользовательские ufCrm_* этого портала
data.relations object Связанные сущности с признаком includable — contact, company и deal
data.products object Операции над товарными позициями и схема их полей. Подробнее — Поля товаров
data.aggregatable array Стандартные поля, допустимые в groupBy агрегации: opportunity, stageId, assignedById
data.batch array Операции счёта, доступные в POST /v1/batch: create, update, delete
data.import object Метод, путь и потолок пакета для импорта записей
data.include array Имена, которые принимает параметр include

Стандартные поля счёта

Поле Тип Только чтение Описание
id number да ID счёта
title string Название счёта
stageId string Стадия. Формат: DT31_{categoryId}:{stage}. Список стадий: GET /v1/statuses?filter[entityId]=SMART_INVOICE_STAGE_{categoryId} — categoryId зависит от портала. Узнать: GET /v1/invoices?limit=1&select=categoryId или запросить у администратора
categoryId number ID воронки
assignedById number Ответственный. Список: GET /v1/users
contactId number ID контакта-плательщика. Поиск: GET /v1/contacts
companyId number ID компании-плательщика. Поиск: GET /v1/companies
mycompanyId number ID своей компании-продавца, выставляющей счёт. Поиск: GET /v1/companies
opportunity number Итоговая сумма счёта
currencyId string Валюта. Список: GET /v1/currencies
taxValue number да Сумма налога в валюте счёта; 0, если налога нет. Считает Битрикс24 по товарным позициям; присланное значение не сохраняется ни на одной двери записи, поэтому запись отклоняется. Налог задаётся через товарные позиции
begindate datetime Дата начала счёта
closedate datetime Дата закрытия счёта
accountNumber string Печатный номер счёта
comments string Произвольный комментарий
sourceId string Источник. Список: GET /v1/statuses?filter[entityId]=SOURCE
sourceDescription string Произвольное описание источника
utmSource string да Источник трафика (utm_source рекламной кампании). Проставляет Битрикс24; null, если не задан. Присланное значение не сохраняется, запись отклоняется. Явный select на списке и поиске это поле не приносит (см. ниже)
utmMedium string да Тип трафика рекламной кампании (utm_medium): cpc, banner, email и подобные. Проставляет Битрикс24; null, если не задан
utmCampaign string да Название рекламной кампании (utm_campaign). Проставляет Битрикс24; null, если не задано
utmContent string да Содержание рекламной кампании (utm_content). Проставляет Битрикс24; null, если не задано
utmTerm string да Поисковая фраза рекламной кампании (utm_term). Проставляет Битрикс24; null, если не задана
xmlId string Внешний идентификатор для сопоставления при интеграции
opened boolean Доступен ли счёт всем сотрудникам, а не только ответственному
isManualOpportunity boolean Ручной режим суммы
isRecurring boolean Счёт-шаблон повторяющегося счёта
observers array Наблюдатели (ID сотрудников). Список: GET /v1/users. Передавайте полный список: изменение заменяет набор, а не дополняет его; пустой список снимает наблюдателей на PATCH /v1/invoices/{id} — пакетные двери пустой список передать не могут и отклоняют его: пакет сущности — 400 BATCH_ITEM_VALIDATION, общий пакет — INVALID_PARAMS под вызовом в data.errors
contactIds array Все привязанные контакты (ID). Поиск: GET /v1/contacts. Передавайте полный список: изменение заменяет набор привязок, а не дополняет его; пустой список снимает привязки на PATCH /v1/invoices/{id} — пакетные двери пустой список передать не могут и отклоняют его: пакет сущности — 400 BATCH_ITEM_VALIDATION, общий пакет — INVALID_PARAMS под вызовом в data.errors
contacts array да Не возвращается (notReturned: true): item-API Битрикс24 не отдаёт этот ключ у счетов, хотя живые метаданные портала его перечисляют. Объявлено ради честного отказа на записи вместо сырой ошибки портала (создание и изменение — 400 READONLY_FIELD, импорт — 400 IMPORT_ITEM_VALIDATION, пакет сущности — 400 BATCH_ITEM_VALIDATION, общий пакет — READONLY_FIELD под вызовом); в select — предупреждение UNKNOWN_SELECT_FIELD, значение не приходит. Привязанные контакты — в contactIds
locationId string Идентификатор местоположения (тип location в Битрикс24). Портал сохраняет присланную строку как есть; null, если не задано
webformId number ID CRM-формы, которой создан счёт. У счетов доступно на запись: присланное значение сохраняется и читается назад
parentId2 crm_entity Связанная сделка. Поиск: GET /v1/deals
parentId7 crm_entity Связанное предложение. Поиск: GET /v1/quotes
createdBy number да ID создателя
createdTime datetime да Дата создания
updatedBy number да ID сотрудника, изменившего счёт последним
updatedTime datetime да Дата изменения
movedBy number да ID сотрудника, последним сменившего стадию
movedTime datetime да Дата последней смены стадии
previousStageId string да Стадия до текущей
lastActivityBy number да Автор последней активности в таймлайне; проставляет Битрикс24, присланное значение не сохраняется ни на одной двери записи, поэтому запись отклоняется. Поиск: GET /v1/users
lastActivityTime datetime да Дата и время последней активности по счёту; проставляет Битрикс24. Приходит в UTC, как остальные даты записи. В filter и order не принимается (см. ниже)
lastCommunicationTime datetime да Дата последней коммуникации любого канала
lastCommunicationCallTime datetime да Дата последнего звонка
lastCommunicationEmailTime datetime да Дата последнего письма
lastCommunicationImolTime datetime да Дата последней коммуникации в открытой линии
lastCommunicationWebformTime datetime да Дата последней коммуникации через веб-форму

Пользовательские поля (ufCrm_*) возвращаются в ответе наравне со стандартными и доступны для записи. Их состав и количество зависят от портала, поэтому в таблице их нет — читайте живой ответ.

Не всякое поле из таблицы принимается в filter и order. Двенадцать полей — taxValue, observers, contactIds, locationId, webformId, lastActivityBy, lastActivityTime, utmSource, utmMedium, utmCampaign, utmContent, utmTerm — приходят в ответе, но в фильтре дают 400 UNKNOWN_FILTER_FIELD, а в сортировке 400 UNKNOWN_SORT_FIELD; так же отклоняется и невозвращаемое contacts. В select первые семь работают на всех дверях чтения; пять utm* приходят только в полной записи (без select) и в GET /v1/invoices/{id} — в явном select списка и поиска Битрикс24 игнорирует их имена, и ключей в строках не будет. Поля связей parentId2 и parentId7 фильтруются, но не сортируются. Брать имена для этих двух осей нужно не из таблицы выше, а из текста самой ошибки: он перечисляет допустимые.

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

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." }
    },
    "relations": {
      "contact": { "type": "one", "entity": "contacts", "includable": true },
      "company": { "type": "one", "entity": "companies", "includable": true },
      "deal": { "type": "one", "entity": "deals", "includable": true }
    },
    "aggregatable": ["opportunity", "stageId", "assignedById"],
    "batch": ["create", "update", "delete"],
    "import": { "method": "POST", "path": "/v1/invoices/import", "maxItems": 100 },
    "include": ["contact", "company", "deal"]
  }
}

Показаны три поля из data.fields и остальные ключи data. Блок data.products в примере опущен, полный состав полей — в таблицах выше.

Связь deal читает ID сделки из динамического поля счёта parentId2. Поле приходит из живых метаданных портала и при предупреждении fields_partial может отсутствовать в data.fields.

Что делать с именами из data.include, разобрано на странице Получить счёт.

Пример ответа при ошибке

403 — у ключа нет нужного скоупа:

JSON
{
  "success": false,
  "error": {
    "code": "SCOPE_DENIED",
    "message": "This endpoint requires 'crm' scope"
  }
}

Ошибки

HTTP Код Описание
403 SCOPE_DENIED API-ключ не имеет скоупа crm
401 TOKEN_MISSING API-ключ не имеет настроенных токенов
429 RATE_LIMITED Превышен лимит запросов: 300 в минуту на портал, все API-ключи портала делят один лимит. Точное значение — в заголовке x-ratelimit-limit (потолок делится на реплики). Повторите после срока из заголовка Retry-After

Полный список общих ошибок API — Ошибки.

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