
## Поля элемента смарт-процесса

`GET /v1/items/:entityTypeId/fields`

Возвращает описание всех полей для указанного типа смарт-процесса, включая пользовательские (`ufCrmN_*`) и родительские ссылки (`parentIdN`).

Набор полей зависит от `entityTypeId` — каждый тип смарт-процесса имеет собственные пользовательские поля.

## Примеры

В примерах `entityTypeId = 156` — замените на ID вашего смарт-процесса.

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

```bash
curl -X GET https://vibecode.bitrix24.tech/v1/items/156/fields \
  -H "X-Api-Key: YOUR_API_KEY"
```

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

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

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

## Поля ответа

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

| Поле | Тип | Только чтение | Описание |
|------|-----|:---:|---------|
| `id` | number | да | ID элемента |
| `title` | string | | Название |
| `xmlId` | string | | Внешний код |
| `stageId` | string | | Стадия. Формат: `DT{typeId}_{catId}:{stage}` |
| `categoryId` | number | | ID воронки. Список: `GET /v1/categories/:entityTypeId` |
| `assignedById` | number | | Ответственный. Список: `GET /v1/users` |
| `companyId` | number | | ID компании. Поиск: `GET /v1/companies`. Требует включённого блока «Клиент» у смарт-процесса, иначе `400 CLIENT_BLOCK_DISABLED` |
| `contactId` | number | | ID контакта. Поиск: `GET /v1/contacts`. Требует включённого блока «Клиент» у смарт-процесса, иначе `400 CLIENT_BLOCK_DISABLED` |
| `contactIds` | array | | Привязанные контакты. Передавайте полный список — набор привязок заменяется целиком, а не дополняется. Требует включённого блока «Клиент» у смарт-процесса, иначе `400 CLIENT_BLOCK_DISABLED` |
| `opportunity` | number | | Сумма |
| `currencyId` | string | | Валюта. Список: `GET /v1/currencies` |
| `opened` | boolean | | Доступен для всех |
| `begindate` | datetime | | Дата начала. Хранится без времени — переданное время отбрасывается |
| `closedate` | datetime | | Дата завершения. Хранится без времени — переданное время отбрасывается |
| `sourceId` | string | | Источник |
| `observers` | array | | Наблюдатели |
| `mycompanyId` | number | | ID своей компании |
| `createdBy` | number | да | Создатель |
| `updatedBy` | number | да | Последний редактор |
| `movedBy` | number | да | Переместил стадию |
| `createdTime` | datetime | да | Дата создания |
| `updatedTime` | datetime | да | Дата изменения |
| `movedTime` | datetime | да | Дата смены стадии |
| `isManualOpportunity` | boolean | | Сумма задана вручную (`Y`/`N` → `true`/`false`) |
| `isRecurring` | boolean | да | Признак регулярного элемента |
| `lastActivityTime` | datetime | да | Время последней активности |
| `entityTypeId` | number | да | ID типа смарт-процесса. Берётся из сегмента пути, в теле запроса не принимается |
| `utmSource` | string \| null | да | Метка `utm_source` источника трафика |
| `utmMedium` | string \| null | да | Метка `utm_medium` — канал трафика, например `cpc` или `email` |
| `utmCampaign` | string \| null | да | Метка `utm_campaign` — название рекламной кампании |
| `utmContent` | string \| null | да | Метка `utm_content` — содержание или вариант объявления |
| `utmTerm` | string \| null | да | Метка `utm_term` — ключевое слово объявления |

UTM-поля Битрикс24 отдаёт в `list`/`get`, но у элементов смарт-процессов не принимает их ни в теле запроса, ни в фильтре, ни в сортировке — поэтому они помечены «только чтение», а запрос с `filter[utmSource]` возвращает ошибку.

`isManualOpportunity` и `isRecurring` приходят от Битрикс24 строкой `"Y"`/`"N"` — платформа нормализует их в JSON-`boolean` на чтении (и принимает `true`/`false` на запись для `isManualOpportunity`), как и `opened`.

Пользовательские поля (`ufCrmN_*`) и родительские ссылки (`parentIdN`) зависят от конкретного смарт-процесса. Для полей типа `enumeration` ответ содержит массив `items` с доступными значениями.

> **Нульность.** Многие поля приходят `null`, когда не заполнены — в частности `xmlId`, `sourceDescription`, `lastActivityTime` и UTM-поля (`utmSource`/`utmMedium`/`utmCampaign`/`utmContent`/`utmTerm`, если включены на портале). Типобезопасным клиентам (TS) объявляйте такие поля как `T | null`.

> **`/fields` отражает живой контракт Битрикс24, а не форму платформенных доков.** Это сквозной проброс схемы полей Битрикс24 как есть: типы приходят в нотации Битрикс24 (`number`, `string`, `boolean`, `datetime`, `double`, `enumeration`, `crm_contact`, `crm_status`, `user` и другие), флаг — `readonly` (а не `isReadOnly`), у части полей есть `label`, отдельного `isRequired` или `title` нет. Привязанные контакты читаются и пишутся через `contactId` и `contactIds`. Служебное поле `contacts` из схемы Битрикс24 платформа в справочнике **не показывает**: значения по нему не приходит ни в списке, ни в карточке, а на запись Битрикс24 принимает только пустой массив — любое непустое значение он отклоняет ошибкой своего внутреннего слоя данных. Поле было бы обещанием, которое нечем выполнить. Системные поля, которые Битрикс24 отдаёт в list/get, но не описаны выше (`taxValue`, `previousStageId`, `lastActivityBy`, `lastCommunication*`), проходят сквозным проксированием. Поля из таблицы выше платформа описывает сама, поэтому у них есть `label` и `description`, написанные для чтения человеком.

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

```json
{
  "success": true,
  "data": {
    "fields": {
      "id": { "type": "number", "readonly": true },
      "title": { "type": "string", "readonly": false },
      "stageId": { "type": "string", "readonly": false },
      "begindate": { "type": "datetime", "readonly": false },
      "ufCrm156_custom": { "type": "string", "readonly": false },
      "parentId156": { "type": "number", "readonly": false }
    }
  }
}
```

Поля приходят внутри `data.fields`. Объект ответа также содержит `data.products` (схема товарных строк), `data.aggregatable` (поля, доступные в [агрегации](/docs/entities/items/aggregate)) и `data.batch`.


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

404 — не найден:

```json
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "Элемент не найден"
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |
| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |
| 400 | `INVALID_DYNAMIC_PARAM` | `entityTypeId` не является положительным целым или является зарезервированным (1, 2, 3, 4, 7, 31) |

Полный список общих ошибок API — [Ошибки](/docs/errors).

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

- [Создать элемент](/docs/entities/items/create)
- [Список элементов](/docs/entities/items/list)
- [Смарт-процессы](/docs/entities/smart-processes)
- [Entity API](/docs/entity-api)
