Для AI-агентов: markdown этой страницы — /docs-content/apps/placements.md индекс документации — /llms.txt
Места встраивания
Место встраивания — точка интерфейса Битрикс24, в которой открывается ваше приложение: вкладка в карточке сделки, пункт левого меню, кнопка на панели списка, панель в чате. Привязка регистрирует приложение в такой точке на аккаунте, отвязка убирает его оттуда.
Скоуп: placement | Базовый URL: https://vibecode.bitrix24.tech/v1 | Авторизация: X-Api-Key (ключ авторизации приложения)
Привязанные места
GET /v1/placements
Возвращает места встраивания, которые числятся привязанными у приложения. Когда вместе с ключом приложения передан токен сессии, Вайбкод сверяет этот перечень с аккаунтом Битрикс24 и сообщает исход сверки отдельным полем — совпало, расходится или свериться не удалось.
Предусловия вызова — что нужно до привязки.
Примеры
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.placements |
string[] | Коды мест встраивания, привязанных приложением |
data.appId |
string | Идентификатор приложения. Список приложений — GET /v1/apps |
data.appTitle |
string | Название приложения |
data.handlers |
array | Данные обработчиков, полученные от аккаунта. Поле необязательное — приходит, когда ответ аккаунта получен. Исход сверки читайте по 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 | Подписи места по языкам. Ключ — код языка, значения — 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"]
}
}
Токен сессии не передан — сверки не было, 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 | Код | Описание |
|---|---|---|
| 400 | OAUTH_APP_REQUIRED |
Запрос выполнен личным ключом vibe_api_ |
| 401 | MISSING_API_KEY |
Не передан заголовок X-Api-Key |
| 401 | INVALID_API_KEY |
Ключ не опознан: такой строки на платформе нет |
| 404 | APP_NOT_FOUND |
К ключу не привязано приложение |
Полный список общих ошибок API — Ошибки.
Известные особенности
- Расхождение определяется по
portalSync, а не по наличию или длинеhandlers. Отсутствие поляhandlersи пустой массивhandlers— разные состояния. Пустой массив приходит, когда ответ аккаунта получен и ни одного привязанного кода в нём нет. Отсутствие поля означает, что ответ аккаунта не читался. Вердикт в обоих случаях берите изportalSync, а не из массива: у снятого с каталога приложения пустойhandlersприходит вместе сunknown, а не сdrift. 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, если приложение снято с каталога. Вызов Привязать место подставит платформенный адрес обработчика вместо технического адреса сервера приложения.