Для AI-агентов: markdown этой страницы — /docs-content/apps/update.md индекс документации — /llms.txt
Обновить приложение
PATCH /v1/apps/:id
Изменяет свойства приложения. Передавайте только те поля, которые нужно изменить.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
id (path) |
string | да | Идентификатор приложения из создания или списка |
Поля запроса (body)
| Поле | Тип | Описание |
|---|---|---|
title |
string | Название, от 1 до 255 символов. У приложения в каталоге предел — 100 символов |
description |
string | null | Описание, до 2000 символов |
appUrl |
string | Адрес приложения, только http:// или https://. Пустая строка сохраняется как null |
scopes |
array | Набор скоупов приложения, минимум один. Изменение платформенных скоупов vibe:* переносится в активные ключи приложения — см. «Известные особенности». Право портала Битрикс24 к уже созданному приложению не добавляется, снятие прав проходит |
redirectUris |
array | Адреса перенаправления для OAuth |
placements |
array | Места встраивания. Список кодов — Доступные места. Привязать или снять место по одному, не публикуя приложение заново, — Места встраивания |
placementResizeEnabled |
boolean | Подстраивать высоту iframe встройки под контент приложения. Значение по умолчанию — false. Перед включением разрешите источник платформы в своей директиве frame-ancestors — условие описано в разделе Приложение в Битрикс24 |
handlerUrl менять нельзя — поле в теле приводит к 400 HANDLER_URL_READONLY.
Примеры
curl — личный ключ
curl -X PATCH https://vibecode.bitrix24.tech/v1/apps/APP_ID \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "appUrl": "https://app-abc12345.vibecode.bitrix24.tech/dashboard" }'
curl — OAuth-приложение
curl -X PATCH https://vibecode.bitrix24.tech/v1/apps/APP_ID \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "appUrl": "https://app-abc12345.vibecode.bitrix24.tech/dashboard" }'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/apps/APP_ID', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
appUrl: 'https://app-abc12345.vibecode.bitrix24.tech/dashboard',
}),
})
const { data } = await res.json()
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/apps/APP_ID', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
appUrl: 'https://app-abc12345.vibecode.bitrix24.tech/dashboard',
}),
})
const { data } = await res.json()
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
data |
object | Приложение после обновления. Набор полей совпадает с ответом создания, без rawKey |
data.updatedAt |
string | Дата изменения, ISO 8601 |
warnings |
array | Появляется при частичной синхронизации мест встраивания — это коды, которые не удалось привязать, а также места, которые не удалось снять. Про снятие строка приходит по-разному в зависимости от раскатки — разбор во врезке под таблицей ошибок. Отдельная строка приходит, когда новое название потеряло не-ASCII символы по дороге: она называет поле, а само переименование выполняется. Набор строк открытый — незнакомую строку показывайте как есть, а не отбрасывайте |
Пример ответа
{
"success": true,
"data": {
"id": "33c4d5e6-f7a8-49b0-1234-5c6d7e8f9012",
"title": "Дашборд продаж",
"description": "Обновлено",
"scopes": ["crm", "user", "placement"],
"handlerUrl": "https://vibecode.bitrix24.tech/v1/bitrix-handler",
"appUrl": "https://app-abc12345.vibecode.bitrix24.tech/dashboard",
"redirectUris": [
"https://vibecode.bitrix24.tech/oauth/complete",
"http://localhost"
],
"bitrixClientId": "local.7c3d4e5f6a7b80.55556666",
"prefix": "vibe_app_local_7c3",
"suffix": "6666",
"authorId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"portalId": "8b1f0e2a-3c4d-5e6f-7a8b-9c0d1e2f3a4b",
"createdAt": "2026-06-24T09:12:45.781Z",
"updatedAt": "2026-06-24T09:13:36.974Z",
"placements": []
}
}
Пример ответа при ошибке
404 — приложение не найдено:
{
"success": false,
"error": {
"code": "APP_NOT_FOUND",
"message": "Application not found"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | HANDLER_URL_READONLY |
В теле передан handlerUrl — поле задаёт платформа и менять его нельзя |
| 400 | NO_USER_TOKEN |
Смена placements или переименование опубликованного приложения без токена пользователя на облачном портале |
| 400 | TITLE_TOO_LONG_FOR_CATALOG |
Новое название длиннее 100 символов у приложения, добавленного в каталог |
| 403 | INFRA_FORBIDDEN_FOR_COWORK_KEY |
Вызов сделан ключом Cowork/Code — такой ключ работает только с данными, изменяющие операции ему закрыты. Что делать — Проектный ключ для деплоя |
| 403 | UNAUTHORIZED |
Вызов сделан ключом авторизации vibe_app_…, выписанным на другое приложение. Таким ключом меняют только своё приложение, даже если оба приложения создал один автор |
| 403 | UNAUTHORIZED |
Ключ не принадлежит автору или владельцу приложения |
| 403 | OAUTH_SCOPE_CHANGE_REQUIRES_REISSUE |
Запрос добавляет в scopes право портала Битрикс24, которого у приложения не было. Набор прав портала фиксируется при авторизации приложения, поэтому добавление отклоняется, а снятие прав проходит. Нужное право объявляется при создании приложения — Создать приложение |
| 403 | WRITE_BLOCKED_READONLY_KEY |
Запрос меняет scopes, а идёт ключом в режиме «только чтение». Остальные поля такой ключ менять может. Подробнее — Режим доступа |
| 403 | SCOPE_GRANT_REQUIRES_CONSENT |
Запрос идёт ключом с зафиксированным набором прав и добавляет в scopes платформенный скоуп vibe:*, которого у самого вызывающего ключа нет. Список таких скоупов приходит в error.details.unconsented. Снятие скоупов проходит всегда, добавление — только в пределах прав вызывающего ключа. Набор зафиксирован у партнёрского ключа, проектного ключа Cowork, личного ключа из формы кабинета и ключа, выписанного с exactScopes: true — Менеджмент-ключи. Как отличить такой ключ — Создать приложение |
| 404 | APP_NOT_FOUND |
Приложения с указанным id нет |
| 502 | BITRIX_PARTIAL_REBIND |
Битрикс24 отклонил новое название места встраивания при переименовании через ключ разработчика. Новое имя не записано. error.restored содержит места, которым возвращено прежнее название; error.unbound — места, требующие проверки на портале: оставшиеся снятыми, а также те, по которым Битрикс24 не подтвердил снятие прежней привязки. Диагностика отказов приходит в параллельных массивах error.bitrixCodes и error.bitrixStatuses |
| 502 | PLACEMENT_UNBIND_FAILED |
Аккаунт не подтвердил снятие мест встраивания, убранных из placements. Остальные поля запроса и перепривязка названия не применяются, коды перечислены в error.placements. Поле placements при этом уже перезаписано и отражает фактическое состояние аккаунта — перечитайте приложение. Приходит только после включения проверки — см. врезку ниже |
| 503 | NETWORK_DEVKEY_REQUIRED |
Аккаунт переведён на транспорт ключа разработчика, а у автора приложения такого ключа нет. Повтор не поможет — попросите автора переподключить аккаунт. Приходит только после включения проверки — см. врезку ниже |
Полный список общих ошибок API — Ошибки.
Проверка снятия мест встраивания на стороне аккаунта сейчас раскатывается по аккаунтам, поэтому вариантов два:
- Пока возможность не включена на аккаунте —
PATCHс уменьшенным наборомplacementsотвечает200, даже если снять лишние места на аккаунте не удалось. Неснятый код при этом ОСТАЁТСЯ вplacementsприложения, а причина приходит строкойFailed to unbind <код>вwarnings. Это единственный признак расхождения списка с аккаунтом, поэтому сейчасwarningsнадо разбирать. КодовPLACEMENT_UNBIND_FAILEDиNETWORK_DEVKEY_REQUIREDу этого эндпоинта не бывает. - После включения — неподтверждённое снятие отвечает
502 PLACEMENT_UNBIND_FAILED, и остальная часть запроса не применяется: ни перепривязка названия, ни прочие поля. Повторите запрос — перечисленные вerror.placementsместа на аккаунте остались. Ответ502здесь не означает «ничего не изменилось»: списокplacementsуже перезаписан снятым набором, поэтому перечитайте приложение через данные приложения, а не полагайтесь на список, который был у вас до вызова. Ответа200с неснятым местом на этом пути не бывает — про снятие вwarningsуспешного ответа остаются пояснения о подтверждении. Остальные строки набора включение не меняет — отказы привязки и прочие поводы из таблицыwarningsвыше приходят и на этом пути.
Известные особенности
- Переименование приложения в каталоге меняет и подписи на портале. Новое
titleуходит в карточку каталога (полеcatalogTitleпишется вместе сtitle) и в места встраивания — пункт левого меню и вкладки CRM. Поэтому переименование обращается к Битрикс24 и может вернуть400 NO_USER_TOKENили502 BITRIX_PARTIAL_REBIND. При отказе название не записывается. В BOX и пути ключа разработчика после успешного снятия и отказа новой привязки платформа один раз возвращает прежнее название. Успешно восстановленные места перечислены вerror.restored; их не нужно чинить вручную, но переименование всё равно не принято. Проверить нужно только места изerror.unbound: они либо остались снятыми, либо Битрикс24 не подтвердил, что прежняя привязка снята. Восстановите их черезPOST /v1/placements/bind, затем повторите PATCH. Пара массивовerror.bitrixCodesиerror.bitrixStatusesперечисляет код и HTTP-статус каждого отклонённого вызова: сначала с новым, затем со старым названием; недостающие значения замененыB24_ERRORи0, а исходный текст отказа и URL ключа наружу не возвращаются. У облачной OAuth-перепривязки компенсации нет, но она тоже отказывает, если Битрикс24 не подтвердил ни снятия прежней привязки, ни новой: такое место попадает вerror.unbound, ответ — 502, имя не записывается. Портал кэширует левое меню — новое имя видно после перезагрузки страницы с очисткой кэша. У приложения вне каталога переименование меняет толькоtitle. - Смена
scopesпереносит платформенные скоупыvibe:*в ключи приложения. Обновление сравнивает старый и новый набор и применяет разницу поvibe:*ко всем активным ключам приложения — добавленныйvibe:aiпоявляется у ключей, снятыйvibe:infraу них снимается. Скоупы портала Битрикс24 (crm,userи прочие) в ключи не переносятся: их набор фиксируется при выпуске ключа и меняется только перевыпуском. - Ключ с зафиксированным набором прав платформенные скоупы через перенос не получает. Такой набор у парного ключа приложения, созданного партнёрским ключом, проектным ключом Cowork, личным ключом из формы кабинета или ключом с
exactScopes: true— Создать приложение. Снятие скоупов доходит до него как до остальных, а добавление — нет:vibe:infra, дописанный вscopesприложения, у такого ключа не появится, иPOST /v1/infra/serversпродолжит отвечать403 INFRA_SCOPE_REQUIRED. Нужное право объявляется вscopesпри создании приложения. - Расхождение между скоупами приложения и его ключа чинится двумя запросами. Бывает, что в
scopesприложения стоитvibe:infra, которого у ключа нет, — ключ отвечает403на создание сервера. Снимитеvibe:infraизscopesпервым запросом и верните вторым: перенос применяет именно разницу, поэтому вторая правка добавляет скоуп в ключ. На ключ с зафиксированным набором прав это не действует — см. абзац выше. Итоговый набор ключа показываетGET /v1/meв полеdata.scopes, вызванный этим ключом. - Смена
placementsу опубликованного приложения запускает синхронизацию мест встраивания на портале. Привязка и отвязка проходят прямо на портале Битрикс24, и часть кодов может не привязаться — тогда ответ несётwarningsсо списком таких кодов. На облачном портале без токена пользователя синхронизация невозможна, запрос возвращает400 NO_USER_TOKEN. У приложения в статусеPRIVATEplacementsпишутся в базу без обращения к порталу. - Правка
appUrlдоезжает до карточки приложения в каталоге Битрикс24 сама. Карточка ставится в очередь на обновление этим же запросом, отдельного вызова не нужно. Открывается она по полному адресу приложения вместе с подпутём, параметрами запроса и якорем, когда адрес указывает на тот же поддомен Black Hole, что и сервер карточки. В остальных случаях карточка открывает корень сервера — в том числе при другом поддомене, своём домене, другой схеме, пустом или неразбираемом адресе, имени пользователя перед хостом и адресе длиннее 512 символов, куда засчитываются и параметры запроса. Отдельно от карточки действует ограничение шлюза: на первом заходе за сессию посетитель приземляется в корень поддомена независимо от адреса карточки — Деплой приложения. - Кириллица в
titleиз Windows PowerShell. Отправленная без явной сериализации в UTF-8, она сохраняется знаками вопроса (?): байты теряются на стороне клиента, до отправки запроса. Готовый вызов сUTF8.GetBytes— Windows / PowerShell и UTF-8.