#Создать поле
POST /v1/userfields/:entity
Создаёт новое пользовательское поле для CRM-сущности. Возвращает HTTP 201 Created с числовым id нового поля. Поля передаются плоско в корне JSON — без обёртки fields.
#Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
:entity (path) |
string | да | Сущность: deals, leads, contacts, companies, quotes, requisites |
#Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
userTypeId |
string | да | Тип поля. Список допустимых значений — `GET /v1/userfields/:entity/types`. Примеры: string, enumeration, integer, double, datetime |
fieldName |
string | нет | Суффикс системного имени. Итоговое имя формируется как UF_CRM_<FIELD_NAME> (для реквизитов — UF_REQUISITE_<FIELD_NAME>). Если не передать, Битрикс24 сгенерирует имя автоматически |
label |
string | нет | Подпись поля для отображения. Значение автоматически распространяется на все языки портала в editFormLabel, listColumnLabel, listFilterLabel, errorMessage, helpMessage. Для задания разных подписей по языкам используйте объект editFormLabel |
editFormLabel |
object | нет | Подпись в форме редактирования по языкам. Пример: { "ru": "Проект", "en": "Project" }. Значения устанавливаются для указанных языков; остальные локали заполняются по правилам Битрикс24 |
sort |
string | нет | Порядок сортировки в интерфейсе Битрикс24. По умолчанию "100" |
multiple |
string | нет | Разрешить несколько значений: "Y" или "N". По умолчанию "N" |
mandatory |
string | нет | Обязательное при заполнении: "Y" или "N". По умолчанию "N" |
showFilter |
string | нет | Отображать в фильтре: "N" — нет, "I" — точное значение, "E" — маска, "S" — диапазон |
showInList |
string | нет | Показывать в списке записей: "Y" или "N" |
editInList |
string | нет | Разрешить редактирование прямо из списка: "Y" или "N" |
isSearchable |
string | нет | Участвует в полнотекстовом поиске: "Y" или "N" |
xmlId |
string | нет | Внешний идентификатор для интеграций |
settings |
object | нет | Настройки поля, специфичные для userTypeId. Для string — SIZE, ROWS, REGEXP, MIN_LENGTH, MAX_LENGTH, DEFAULT_VALUE. Состав зависит от типа |
list |
array | нет | Варианты для поля типа enumeration. Каждый элемент: { "VALUE": "Название", "SORT": 10 }. Для других типов игнорируется |
#Примеры
#curl — личный ключ
curl -X POST "https://vibecode.bitrix24.tech/v1/userfields/deals" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userTypeId": "enumeration",
"fieldName": "PROJECT_STATUS",
"label": "Статус проекта",
"sort": "200",
"showFilter": "I",
"showInList": "Y",
"list": [
{ "VALUE": "Новый", "SORT": 10 },
{ "VALUE": "В работе", "SORT": 20 },
{ "VALUE": "Завершён", "SORT": 30 }
]
}'
#curl — OAuth-приложение
curl -X POST "https://vibecode.bitrix24.tech/v1/userfields/deals" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"userTypeId": "enumeration",
"fieldName": "PROJECT_STATUS",
"label": "Статус проекта",
"sort": "200",
"showFilter": "I",
"showInList": "Y",
"list": [
{ "VALUE": "Новый", "SORT": 10 },
{ "VALUE": "В работе", "SORT": 20 },
{ "VALUE": "Завершён", "SORT": 30 }
]
}'
#JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/userfields/deals', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
userTypeId: 'enumeration',
fieldName: 'PROJECT_STATUS',
label: 'Статус проекта',
sort: '200',
showFilter: 'I',
showInList: 'Y',
list: [
{ VALUE: 'Новый', SORT: 10 },
{ VALUE: 'В работе', SORT: 20 },
{ VALUE: 'Завершён', SORT: 30 },
],
}),
})
const { success, data } = await res.json()
console.log('Создано поле с id:', data.id)
#JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/userfields/deals', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
userTypeId: 'enumeration',
fieldName: 'PROJECT_STATUS',
label: 'Статус проекта',
sort: '200',
showFilter: 'I',
showInList: 'Y',
list: [
{ VALUE: 'Новый', SORT: 10 },
{ VALUE: 'В работе', SORT: 20 },
{ VALUE: 'Завершён', SORT: 30 },
],
}),
})
const { success, data } = await res.json()
#Поля ответа
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data.id |
number | Числовой идентификатор созданного поля |
#Пример ответа
{
"success": true,
"data": {
"id": 7115
}
}
#Пример ответа при ошибке
400 — не передан обязательный параметр userTypeId:
{
"success": false,
"error": {
"code": "MISSING_FIELD",
"message": "userTypeId is required (e.g. \"string\", \"enumeration\", \"integer\", \"double\", \"datetime\")"
}
}
#Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | MISSING_FIELD |
Не передан обязательный параметр userTypeId |
| 400 | INVALID_REQUEST |
Тело запроса не является объектом |
| 400 | UNKNOWN_ENTITY |
:entity не входит в список поддерживаемых сущностей |
| 422 | BITRIX_ERROR |
Передан неизвестный userTypeId — не из каталога `/types` |
| 422 | BITRIX_ERROR |
Другие ошибки Битрикс24: дублирующее имя поля, некорректные настройки settings |
| 403 | SCOPE_DENIED |
API-ключ не имеет скоупа crm |
| 401 | TOKEN_MISSING |
API-ключ не имеет настроенных токенов |
| 401 | MISSING_API_KEY |
Отсутствует заголовок X-Api-Key |
Полный список общих ошибок API — Ошибки.
#Известные особенности
Автораспространение label. При передаче строки label значение автоматически появляется во всех языковых полях editFormLabel, listColumnLabel, listFilterLabel, errorMessage, helpMessage. Чтобы задать разные подписи для разных языков, передайте объект editFormLabel: { "ru": "Проект", "en": "Project" }.
#Смотрите также
- Каталог типов полей — список допустимых
userTypeId - Получить поле — полное описание созданного поля
- Обновить поле — изменить параметры поля
- Удалить поле — удалить поле
- Поля CRM-сущностей — маппинг полей и поддерживаемые сущности
- Пользовательские поля — обзор раздела