Для AI-агентов: markdown этой страницы — /docs-content/apps/placements.md индекс документации — /llms.txt
Места встраивания
Место встраивания — точка интерфейса Битрикс24, в которой открывается ваше приложение: вкладка в карточке сделки, пункт левого меню, кнопка на панели списка, панель в чате. Привязка регистрирует приложение в такой точке на аккаунте, отвязка убирает его оттуда.
Скоуп: placement | Базовый URL: https://vibecode.bitrix24.tech/v1 | Авторизация: X-Api-Key (ключ авторизации приложения)
Привязанные места
GET /v1/placements
Возвращает места встраивания, которые числятся привязанными у приложения. Когда вместе с ключом приложения передан токен сессии, Вайбкод сверяет этот перечень с аккаунтом Битрикс24 и сообщает исход сверки отдельным полем — совпало, расходится или свериться не удалось.
Предусловия вызова — что нужно до привязки.
Примеры
Личный ключ vibe_api_… получает 400 OAUTH_APP_REQUIRED. Используйте ключ OAuth-приложения vibe_app_….
curl — OAuth-приложение
curl https://vibecode.bitrix24.tech/v1/placements \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/placements', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { data } = await res.json()
console.log('Подтверждено аккаунтом:', data.handlers)
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
Полеsuccess |
Типboolean | ОписаниеВсегда true при успехе |
Полеdata |
Типobject | ОписаниеСохранённые места приложения и результат сверки с аккаунтом |
Полеdata.placements |
Типstring[] | ОписаниеКоды мест встраивания, привязанных приложением |
Полеdata.appId |
Типstring | ОписаниеИдентификатор приложения. Список приложений — GET /v1/apps |
Полеdata.appTitle |
Типstring | ОписаниеНазвание приложения |
Полеdata.handlers |
Типobject[] | ОписаниеДанные обработчиков, полученные от аккаунта. Поле отсутствует, если ответ аккаунта не прочитан. Пустой массив означает, что ответ получен, но привязанные коды в нём не найдены. Исход сверки читайте по data.portalSync, а не по наличию или длине этого массива |
Полеdata.handlers[].placement |
Типstring | ОписаниеКод места встраивания |
Полеdata.handlers[].handler |
Типstring | ОписаниеАдрес обработчика, зарегистрированный на аккаунте |
Полеdata.handlers[].misbound |
Типboolean | Описаниеtrue, когда обработчик зарегистрирован на технический адрес сервера приложения. Такое место не пройдёт авторизацию внутри Битрикс24 |
Полеdata.handlers[].title |
Типstring | ОписаниеПодпись места. Приходит, если аккаунт вернул её строкой |
Полеdata.handlers[].options |
Типarray | object | ОписаниеНастройки места, если аккаунт их вернул. Пустой массив — настроек нет |
Полеdata.handlers[].langAll |
Типobject | array | ОписаниеПодписи места по языкам, если аккаунт их вернул. У объекта ключ — код языка, значение — объект с полями TITLE, DESCRIPTION, GROUP_NAME |
Полеdata.portalSync |
Типstring | ОписаниеИсход сверки с аккаунтом. ok — аккаунт вернул все привязанные коды, drift — часть кодов аккаунт не вернул, unknown — сверка не выполнялась. Приходит в каждом успешном ответе |
Полеdata.portalSyncReason |
Типstring | ОписаниеПочему portalSync не равен ok. no_oauth_session — токен сессии не передан, empty_vibe_list — у приложения нет привязанных мест, b24_unreachable — ответ аккаунта получить не удалось, unpublished — приложение снято с каталога, снятые места расхождением не считаются, missing_on_portal — аккаунт не вернул часть кодов. Отсутствует при ok |
Полеdata.missingOnPortal |
Типstring[] | ОписаниеКоды, которые числятся привязанными в Вайбкод и не вернулись от аккаунта. Приходит только при portalSync равном drift |
Полеwarnings |
Типstring[] | ОписаниеПоявляется, когда хотя бы у одного места misbound равен true или когда portalSync равен drift |
Пример ответа
Токен сессии передан, аккаунт вернул оба привязанных кода — portalSync равен ok:
{
"success": true,
"data": {
"placements": ["LEFT_MENU", "CRM_DEAL_DETAIL_TAB"],
"appId": "3d5f7a91-2b4c-4e8f-9a01-6c7d8e9f0a1b",
"appTitle": "Дашборд продаж",
"handlers": [
{
"placement": "CRM_DEAL_DETAIL_TAB",
"handler": "https://example.com/tab",
"misbound": false,
"title": "Документы по сделке",
"options": [],
"langAll": {
"en": { "TITLE": "Документы по сделке", "DESCRIPTION": "", "GROUP_NAME": "" },
"ru": { "TITLE": "Документы по сделке", "DESCRIPTION": "", "GROUP_NAME": "" }
}
},
{
"placement": "LEFT_MENU",
"handler": "https://example.com/menu",
"misbound": false,
"title": "Дашборд продаж",
"options": [],
"langAll": {}
}
],
"portalSync": "ok"
}
}
Аккаунт не вернул привязанный код — расхождение, код назван в missingOnPortal:
{
"success": true,
"data": {
"placements": ["LEFT_MENU"],
"appId": "3d5f7a91-2b4c-4e8f-9a01-6c7d8e9f0a1b",
"appTitle": "Дашборд продаж",
"handlers": [],
"portalSync": "drift",
"portalSyncReason": "missing_on_portal",
"missingOnPortal": ["LEFT_MENU"]
},
"warnings": [
"Placements LEFT_MENU are listed as bound but were not returned by the Bitrix24 account; re-bind via POST /v1/placements/bind to restore them on the portal."
]
}
Токен сессии не передан — сверки не было, handlers отсутствует:
{
"success": true,
"data": {
"placements": ["LEFT_MENU"],
"appId": "3d5f7a91-2b4c-4e8f-9a01-6c7d8e9f0a1b",
"appTitle": "Дашборд продаж",
"portalSync": "unknown",
"portalSyncReason": "no_oauth_session"
}
}
Пример ответа при ошибке
400 — запрос выполнен личным ключом:
{
"success": false,
"error": {
"code": "OAUTH_APP_REQUIRED",
"message": "Placement management is only available for OAuth app keys"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | КодOAUTH_APP_REQUIRED |
ОписаниеЗапрос выполнен личным ключом vibe_api_ |
| HTTP401 | КодMISSING_API_KEY |
ОписаниеНе передан заголовок X-Api-Key |
| HTTP401 | КодINVALID_API_KEY |
ОписаниеКлюч не опознан: такой строки на платформе нет |
| HTTP404 | КодAPP_NOT_FOUND |
ОписаниеК ключу не привязано приложение |
Полный список общих ошибок API — Ошибки.
Известные особенности
unknownне равнозначноok. Значение говорит, что привязка не подтверждена, и распадается на два случая. Аккаунт не читался — причиныno_oauth_session,empty_vibe_list,b24_unreachable, поляhandlersв ответе нет. Аккаунт прочитан, но его состояние не сопоставляется с нашим списком — причинаunpublished, и тогдаhandlersв ответе есть.- Снятое с каталога приложение расхождением не считается. При
unpublishedвердикт подавлен: снятые места — ожидаемое следствие операции. Аккаунт при этом всё равно опрашивается, потому что снятие с публикации не гарантирует, что все места действительно ушли, — поэтомуhandlersи признакmisboundв ответе остаются. Что остаётся вplacementsпосле снятия и как убрать остаток, разобрано на странице самой операции. - Расхождение восстанавливается повторной привязкой. Коды из
missingOnPortalвозвращаются на аккаунт вызовом Привязать место. - Коды, которых нет в
data.placements, расхождением не считаются. Аккаунт может держать места других приложений, и наportalSyncэто не влияет. - Место с
misboundравнымtrue— отдельное состояние, не расхождение. Аккаунт такое место вернул, поэтому вmissingOnPortalон не попадает, аportalSyncостаётсяok— либоunknownс причинойunpublished, если приложение снято с каталога. Вызов Привязать место подставит платформенный адрес обработчика вместо технического адреса сервера приложения.