Для AI-агентов: markdown этой страницы — /docs-content/userfields/users/create.md индекс документации — /llms.txt
Создать поле сотрудника
POST /v1/userfields/users
Создаёт новое пользовательское поле сотрудника. Свойства поля передаются плоско в корне JSON — без обёртки fields.
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
userTypeId |
string | да | Тип поля. Допустимые значения — Типы полей. Примеры: string, enumeration, integer, double, datetime |
fieldName |
string | да | Системное имя поля. Хранится в верхнем регистре с префиксом UF_USR_: передайте UF_USR_BADGE_NO или badge_no — в обоих случаях поле получит имя UF_USR_BADGE_NO. Под этим именем поле стоит в схеме сотрудника GET /v1/users/fields и принимается в запросах к сотрудникам |
label |
string | нет | Подпись поля. Подставляется в editFormLabel, listColumnLabel и listFilterLabel, если они не переданы явно. В ответах раздела подписи не возвращаются — Подписи поля |
editFormLabel |
object | нет | Подпись в форме редактирования по языкам портала. Пример: { "ru": "Табельный номер", "en": "Badge number" }. Именно эта подпись приходит в схеме сотрудника как label |
sort |
string | нет | Порядок сортировки в интерфейсе Битрикс24. По умолчанию "100" |
multiple |
boolean | нет | Разрешить несколько значений: true / false или "Y" / "N". По умолчанию выключено. Задаётся только при создании — обновлением не меняется |
showFilter |
boolean | нет | Показывать в фильтре: true или "Y" — да, false или "N" — нет. По умолчанию выключено. Включённый фильтр читается как "E" |
xmlId |
string | нет | Внешний идентификатор для интеграций |
settings |
object | нет | Настройки поля, специфичные для userTypeId. Для string — SIZE, ROWS, REGEXP, MIN_LENGTH, MAX_LENGTH, DEFAULT_VALUE. Для double — PRECISION, число знаков после запятой. Наборы для других типов — Получить поле |
list |
array | нет | Варианты для поля типа enumeration. Каждый элемент: { "VALUE": "Название", "SORT": 10 }. Для других типов игнорируется |
mandatory, isSearchable, showInList, editInList |
boolean | нет | Принимаются, но к полю сотрудника не применяются: поле всегда читается с mandatory: "N", isSearchable: "N", showInList: "Y", editInList: "Y" — Какие свойства применяются |
Примеры
curl — личный ключ
curl -X POST "https://vibecode.bitrix24.tech/v1/userfields/users" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userTypeId": "enumeration",
"fieldName": "UF_USR_SHIFT",
"label": "Смена",
"sort": "200",
"showFilter": true,
"list": [
{ "VALUE": "Утро", "SORT": 10 },
{ "VALUE": "Вечер", "SORT": 20 },
{ "VALUE": "Ночь", "SORT": 30 }
]
}'
curl — OAuth-приложение
curl -X POST "https://vibecode.bitrix24.tech/v1/userfields/users" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"userTypeId": "enumeration",
"fieldName": "UF_USR_SHIFT",
"label": "Смена",
"sort": "200",
"showFilter": true,
"list": [
{ "VALUE": "Утро", "SORT": 10 },
{ "VALUE": "Вечер", "SORT": 20 },
{ "VALUE": "Ночь", "SORT": 30 }
]
}'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/userfields/users', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
userTypeId: 'enumeration',
fieldName: 'UF_USR_SHIFT',
label: 'Смена',
sort: '200',
showFilter: true,
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/users', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
userTypeId: 'enumeration',
fieldName: 'UF_USR_SHIFT',
label: 'Смена',
sort: '200',
showFilter: true,
list: [
{ VALUE: 'Утро', SORT: 10 },
{ VALUE: 'Вечер', SORT: 20 },
{ VALUE: 'Ночь', SORT: 30 },
],
}),
})
const { success, data } = await res.json()
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data.id |
number | Числовой идентификатор созданного поля |
Ответ приходит с HTTP-статусом 201 Created. Полное описание созданного поля — GET /v1/userfields/users/:id.
Пример ответа
{
"success": true,
"data": {
"id": 6007923
}
}
Пример ответа при ошибке
400 — не передан обязательный параметр fieldName:
{
"success": false,
"error": {
"code": "MISSING_FIELD",
"message": "fieldName is required. Employee custom fields use the UF_USR_ prefix, e.g. \"UF_USR_BADGE_NO\"."
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | MISSING_FIELD |
Не передан userTypeId — сообщение перечисляет примеры типов |
| 400 | MISSING_FIELD |
Не передан fieldName — сообщение называет префикс UF_USR_ |
| 400 | INVALID_REQUEST |
Тело запроса не является объектом |
| 422 | BITRIX_ERROR |
Передан неизвестный userTypeId — сообщение Указан неверный пользовательский тип. Текст приходит на языке портала |
| 422 | BITRIX_ERROR |
Поле с таким именем уже есть — сообщение Поле UF_USR_SHIFT для объекта USER уже существует. Текст приходит на языке портала |
| 403 | SCOPE_DENIED |
API-ключ не имеет скоупа user.userfield |
| 401 | TOKEN_MISSING |
API-ключ не имеет настроенных токенов |
| 401 | MISSING_API_KEY |
Отсутствует заголовок X-Api-Key |
Полный список общих ошибок API — Ошибки.
Известные особенности
Новое поле сразу видно в схеме сотрудника. После создания поле появляется в GET /v1/users/fields без задержки — под именем UF_USR_*, с типом и подписью, а для enumeration и с массивом items вариантов. Значение полю записывается вместе с карточкой сотрудника: PATCH /v1/users/:id.