Для AI-агентов: markdown этой страницы — /docs-content/apps/placements/bind.md индекс документации — /llms.txt

Привязать место встраивания

POST /v1/placements/bind

Регистрирует приложение в выбранной точке интерфейса Битрикс24 на аккаунте — вкладке карточки, пункте меню, панели чата. После вызова точка появляется в интерфейсе с той подписью, которая передана в запросе.

Предусловия вызова — что нужно до привязки.

Поля запроса (body)

Поле Тип Обяз. Описание
placement string да Код места встраивания. Перечень кодов, доступных аккаунту — Доступные места
handler string да Абсолютный адрес страницы приложения, которая откроется в этом месте
title string да Подпись места в интерфейсе аккаунта, от 1 до 255 символов
options object нет Настройки места встраивания. Кроме перечисленных ниже полей принимаются любые другие — например context, role, extranet у места IM_CONTEXT_MENU. Значение каждого поля — строка, число или логическое значение, вложенные объекты и массивы не принимаются
options.iconName string нет Имя значка, от 1 до 255 символов. Битрикс24 требует его местам IM_SIDEBAR, IM_NAVIGATION, IM_TEXTAREA, но платформа подставляет значок сама, если поле не передано, и сообщает об этом полем optionsDefaulted в ответе. Своё значение всегда важнее подставленного. Месту IM_CONTEXT_MENU значок не нужен
options.errorHandlerUrl string нет Адрес страницы ошибки для места PAGE_BACKGROUND_WORKER. Если поле не передано, платформа подставляет действующий адрес обработчика
options.iconSvg string нет Значок в формате SVG, до 10 000 символов
options.width number нет Ширина области встраивания. Целое положительное число
options.height number нет Высота области встраивания. Целое положительное число
options.color string нет Имя цвета из палитры чата Битрикс24 — например AZURE, GREEN, PURPLE. Не шестнадцатеричный код, до 64 символов

Примеры

curl — OAuth-приложение

Terminal
curl -X POST https://vibecode.bitrix24.tech/v1/placements/bind \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "placement": "CRM_DEAL_DETAIL_TAB",
    "handler": "https://example.com/deal-tab",
    "title": "Аналитика по сделке"
  }'

JavaScript — OAuth-приложение

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/placements/bind', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    placement: 'CRM_DEAL_DETAIL_TAB',
    handler: 'https://example.com/deal-tab',
    title: 'Аналитика по сделке',
  }),
})

const { data } = await res.json()
console.log('Зарегистрированный адрес обработчика:', data.handler)

Поля ответа

Поле Тип Описание
success boolean true при успешной привязке
data.placement string Код привязанного места встраивания
data.handler string Адрес обработчика, зарегистрированный на аккаунте
data.title string Подпись места в интерфейсе аккаунта
data.options object Действующий набор настроек места. Приходит, когда настройки переданы в запросе или подставлены платформой
data.alreadyBound boolean true, когда место уже числилось привязанным и регистрация выполнена заново
data.handlerRewritten boolean true, когда переданный адрес обработчика заменён на платформенный
data.requestedHandler string Адрес обработчика из запроса. Приходит вместе с handlerRewritten

Пример ответа

Переданный адрес обработчика заменён на платформенный:

JSON
{
  "success": true,
  "data": {
    "placement": "CRM_DEAL_DETAIL_TAB",
    "handler": "https://vibecode.bitrix24.tech/v1/bitrix-handler",
    "title": "Аналитика по сделке",
    "requestedHandler": "https://app-a1b2c3d4.vibecode.bitrix24.tech/deal-tab",
    "handlerRewritten": true
  }
}

Повторная привязка того же кода:

JSON
{
  "success": true,
  "data": {
    "placement": "CRM_DEAL_DETAIL_TAB",
    "handler": "https://example.com/deal-tab",
    "title": "Сделка: сводка",
    "alreadyBound": true
  }
}

Привязка места PAGE_BACKGROUND_WORKER без options — платформа подставила адрес страницы ошибки:

JSON
{
  "success": true,
  "data": {
    "placement": "PAGE_BACKGROUND_WORKER",
    "handler": "https://example.com/worker",
    "title": "Фоновый сценарий",
    "options": {
      "errorHandlerUrl": "https://example.com/worker"
    }
  }
}

Пример ответа при ошибке

400 — в теле запроса нет обязательного поля:

JSON
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "title: Required"
  }
}

Ошибки

HTTP Код Описание
400 OAUTH_APP_REQUIRED Вызов сделан личным ключом. Привязка работает только с ключом авторизации приложения
400 VALIDATION_ERROR Тело запроса не прошло проверку — пропущено обязательное поле или код места не входит в перечень допустимых
400 PLATFORM_HANDLER_UNRESOLVABLE Переданный адрес указывает на технический адрес сервера приложения, а платформенный обработчик определить не удалось. Место не зарегистрировано
400 APP_NOT_REGISTERED У приложения нет идентификатора приложения Битрикс24
400 BOX_NO_DEVELOPER_KEY У автора приложения не настроен ключ разработчика
401 SESSION_REQUIRED Не передан заголовок Authorization: Bearer с токеном сессии
403 PLACEMENT_SCOPE_MISSING У ключа нет скоупа placement
403 WRITE_BLOCKED_READONLY_KEY Ключ работает в режиме только чтения. Переключите его на чтение и запись
403 BOX_WEBHOOK_NOT_DEVELOPER_KEY Ключ разработчика, которым идёт привязка, не имеет права rest.developer. Права ключа фиксируются при выписке — переподключите аккаунт, чтобы ключ выписался заново. Отдаётся до проверки подписки: нехватка права — не вопрос подписки
403 SESSION_REQUIRES_ADMIN Ключ разработчика принадлежит пользователю без прав администратора аккаунта
403 PLACEMENT_APP_GRANT_MISSING Место недоступно приложению Битрикс24: у приложения нет нужного права. В details приходят требуемое право requiredScope, места, которые приложению доступны (availablePlacements, availablePlacementsTotal), и путь расширения прав в remediation. Права приложения фиксируются при установке — расширить их можно только перевыпуском ключа авторизации или созданием приложения, запрашивающего право сразу. Права ключа платформы Вайбкод на это не влияют
400 PLACEMENT_OPTIONS_REQUIRED У места есть обязательная настройка, которой нет в запросе и которую платформа не смогла подставить. В details приходит missing — список таких полей
400 PLACEMENT_NOT_REST_BINDABLE Место нельзя привязать через API: Битрикс24 не объявляет его точкой встраивания. Выберите другой код из доступных мест — там такие места отмечены полем restBindable: false
403 B24_MARKET_SUBSCRIPTION_REQUIRED Нужна активная подписка BitrixGPT + Маркетплейс. Ссылка на оформление — в error.details.upgradeUrl
403 B24_MARKET_TRIAL_USED Пробный период подписки BitrixGPT + Маркетплейс уже использован — нужна платная подписка. Ссылка на оформление — в error.details.upgradeUrl
403 B24_EMBEDDING_INSTALL_DENIED Битрикс24 отказал в установке встройки при действующей подписке: у пользователя, чьим ключом разработчика идёт вызов, нет права ставить локальные приложения и/или нет доступа к самому приложению. Подписка считается действующей в двух случаях — её подтвердил Битрикс24 либо проверку выполнить не удалось, а аккаунт уже числится подписанным в Вайбкод. Если действующей подписки нет ни по одному из источников, тот же отказ приходит как 502
403 INT_TARIFF_REQUIRED Аккаунт получает доступ по тарифу Битрикс24, а не по подписке — нужен коммерческий тариф. Приходит вместо двух кодов выше, а также когда модель доступа аккаунта определить не удалось. error.details.upgradeUrl не передаётся
404 APP_NOT_FOUND К ключу не привязано приложение
404 B24_EMBEDDING_APP_NOT_FOUND Битрикс24 не знает идентификатор приложения: локальное приложение на аккаунте удалили или переустановили. Создайте локальное приложение заново и вызовите POST /v1/apps/:id/relink-oauth с новыми bitrixClientId и bitrixClientSecret. Не путать с APP_NOT_FOUND — тот про связку ключа и приложения на стороне платформы Вайбкод
413 PAYLOAD_TOO_LARGE Тело отправлено не как JSON и длиннее одного байта. Укажите заголовок Content-Type: application/json
415 FST_ERR_CTP_INVALID_MEDIA_TYPE Тело отправлено не как JSON и равно одному байту — та же причина, другая ветка проверки
502 BITRIX_UNAVAILABLE Битрикс24 отклонил регистрацию места, и причину назвать не удалось. Код и статус ответа Битрикс24 приходят в details; там же placementInAppList, если место приложению доступно, и diagnostics"placement_list_skipped", если уточнить причину у аккаунта не получилось, либо "placement_list_empty", если аккаунт ответил пустым списком и ответ ничего не доказывает
503 NETWORK_DEVKEY_REQUIRED Ключ разработчика для автора приложения ещё не выдан

Полный список общих ошибок API — Ошибки.

Известные особенности

  • Место может требовать права у приложения Битрикс24, а не у ключа. Битрикс24 предлагает точку встраивания только приложениям, чьи права покрывают нужный модуль: вкладки задач требуют право задач, пункты профиля — право пользователей, и так далее. Требуемое право по каждому коду приходит в доступных местах полем requiredScope, а сводка гейтов — в данных ключа блоком placements.bindPrerequisite. Права приложения фиксируются при установке: изменить их у живого приложения нельзя, нужен перевыпуск ключа авторизации.
  • Обязательные настройки места платформа подставляет сама. Значок чат-виджета и адрес страницы ошибки фонового обработчика подставляются, если вы их не передали; список подставленных полей приходит в ответе полем optionsDefaulted.
  • Повторная привязка перерегистрирует место. Вызов для уже привязанного кода не отклоняется: платформа снимает прежнюю регистрацию и привязывает место заново, поэтому новые адрес обработчика и подпись вступают в силу. Это единственный способ изменить подпись уже привязанного места.
  • Технический адрес сервера приложения заменяется платформенным. Если handler указывает на технический адрес сервера приложения, на аккаунте регистрируется платформенный обработчик приложения. Внешние адреса регистрируются без изменений.
  • Битрикс24 дополняет options своими значениями. Для виджетов чата аккаунт хранит рядом с переданными настройками собственные — область показа, роль и признак экстранета. Они приходят в привязанных местах даже тогда, когда вы их не передавали.
  • Подпись одна для всех языков интерфейса. Значение title уходит на аккаунт единственной подписью, отдельный перевод этим вызовом не задаётся. В привязанных местах поле langAll возвращает эту же подпись для каждого языка.

Смотрите также