Установить раскладку карточки
PUT /v1/crm/card-config/:entityTypeId
Записывает раскладку секций и полей карточки для указанной области. Полностью заменяет прежнюю раскладку этой области. Тело содержит массив секций data — каждая секция описывает блок карточки и его поля.
Параметр пути
| Параметр | Тип | Описание |
|---|---|---|
entityTypeId |
number | Тип CRM-объекта:1 — лид2 — сделка3 — контакт4 — компания7 — предложение31 — счётсмарт-процесс — числовой ID типа из `GET /v1/smart-processes`, поле entityTypeId |
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
data |
array | да | Массив секций раскладки в порядке отображения |
data[].name |
string | да | Внутреннее имя секции |
data[].title |
string | да | Отображаемое название секции |
data[].type |
string | да | Всегда section |
data[].elements |
array | да | Поля секции в порядке отображения |
data[].elements[].name |
string | да | Имя поля CRM в формате Битрикс24: TITLE, NAME, PHONE, UF_CRM_1234567890 для пользовательских полей. Источник для пользовательских полей: `GET /v1/userfields/:entity` |
data[].elements[].optionFlags |
number | нет | Флаг поля: 0 — обычное, 1 — поле клиента |
data[].elements[].options |
object | нет | Параметры конкретного поля, например defaultCountry для PHONE или defaultAddressType для ADDRESS |
scope |
string | нет | Область раскладки: P — личная (по умолчанию), C — общая |
userId |
number | нет | Сотрудник, чью личную раскладку записать. По умолчанию — владелец API-ключа. Имеет смысл только при scope=P. Источник: `GET /v1/users` |
dealCategoryId |
number | нет | Воронка сделок, только для сделок (entityTypeId=2). Источник: `GET /v1/categories/2` |
categoryId |
number | нет | Воронка смарт-процесса, только для смарт-процессов. Источник: `GET /v1/categories/:entityTypeId` |
leadCustomerType |
number | нет | Тип лида, только для лидов (entityTypeId=1): 1 — простой, 2 — повторный |
Примеры
curl — личный ключ
curl -X PUT "https://vibecode.bitrix24.tech/v1/crm/card-config/3" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"scope": "C",
"data": [
{
"name": "section_1",
"title": "Личные данные",
"type": "section",
"elements": [
{ "name": "NAME", "optionFlags": 1 },
{ "name": "LAST_NAME", "optionFlags": 1 }
]
}
]
}'
curl — OAuth-приложение
curl -X PUT "https://vibecode.bitrix24.tech/v1/crm/card-config/3" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"scope": "C",
"data": [
{
"name": "section_1",
"title": "Личные данные",
"type": "section",
"elements": [
{ "name": "NAME", "optionFlags": 1 },
{ "name": "LAST_NAME", "optionFlags": 1 }
]
}
]
}'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/crm/card-config/3', {
method: 'PUT',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
scope: 'C',
data: [
{
name: 'section_1',
title: 'Личные данные',
type: 'section',
elements: [
{ name: 'NAME', optionFlags: 1 },
{ name: 'LAST_NAME', optionFlags: 1 },
],
},
],
}),
})
const { success, data } = await res.json()
console.log('Раскладка обновлена:', data.updated)
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/crm/card-config/3', {
method: 'PUT',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
scope: 'C',
data: [
{
name: 'section_1',
title: 'Личные данные',
type: 'section',
elements: [
{ name: 'NAME', optionFlags: 1 },
{ name: 'LAST_NAME', optionFlags: 1 },
],
},
],
}),
})
const { success, data } = await res.json()
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data |
object | Результат записи |
data.entityTypeId |
number | Тип объекта из пути |
data.scope |
string | Область, в которую записана раскладка: P или C |
data.updated |
boolean | Всегда true при успехе |
Пример ответа
{
"success": true,
"data": {
"entityTypeId": 3,
"scope": "C",
"updated": true
}
}
Пример ответа при ошибке
400 — тело без data:
{
"success": false,
"error": {
"code": "INVALID_DATA",
"message": "data must be a non-empty array of section objects. Each section: { name, title, type: \"section\", elements: [...] }."
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | INVALID_ENTITY_TYPE_ID |
entityTypeId в пути не является положительным целым числом |
| 400 | INVALID_DATA |
data отсутствует, не является массивом или является пустым массивом |
| 400 | INVALID_SCOPE |
scope не равен P или C |
| 400 | INVALID_USER_ID |
userId не является положительным целым числом |
| 400 | INVALID_DEAL_CATEGORY_ID |
dealCategoryId не является положительным целым числом |
| 400 | INVALID_CATEGORY_ID |
categoryId не является положительным целым числом |
| 400 | INVALID_LEAD_CUSTOMER_TYPE |
leadCustomerType не равен 1 или 2 |
| 502 | CRM_CARD_CONFIG_SET_FAILED |
Битрикс24 не подтвердил запись — например, недостаточно прав или целевая область недоступна |
| 422 | BITRIX_ERROR |
Битрикс24 отклонил тело — например, секция без name или title, элемент без name. Сообщение — в error.message |
| 403 | WRITE_BLOCKED_READONLY_KEY |
Ключ приложения в режиме «только чтение» — запись заблокирована |
| 403 | SCOPE_DENIED |
API-ключ не имеет скоупа crm |
| 401 | TOKEN_MISSING |
API-ключ не имеет настроенных токенов |
Полный список общих ошибок API — Ошибки.
Известные особенности
Запись полностью заменяет раскладку области. PUT перезаписывает всю раскладку выбранной области целиком, а не отдельные секции. Чтобы изменить часть карточки, прочитайте текущую раскладку через `GET`, измените массив и запишите его обратно.
Флаг optionFlags в теле передаётся числом. При записи используется число (0 или 1). В ответе `GET` для сохранённой раскладки тот же флаг возвращается строкой.