[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-infra\u002Fevent-subscriptions\u002Fcreate":3,"docs-tabs-infra\u002Fevent-subscriptions\u002Fcreate":6},{"content":4,"lastmod":5},"\n## Создать подписку\n\n`POST \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Fevent-subscriptions`\n\nРегистрирует обработчик события Битрикс24 под OAuth-приложением сервера. После создания платформа доставляет каждое событие указанного типа в приложение по пути `appPath`. Сервер должен быть привязан к ключу авторизации `vibe_app_` — предусловия и порядок создания такого сервера описаны в разделе [Подписки на события портала](\u002Fdocs\u002Finfra\u002Fevent-subscriptions).\n\n## Параметры\n\n| Параметр | В | Тип | Обяз. | Описание |\n|----------|---|-----|:-----:|----------|\n| `id` | path | string (UUID) | да | ID сервера. Список: [`GET \u002Fv1\u002Finfra\u002Fservers`](\u002Fdocs\u002Finfra\u002Fservers) |\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|----------|\n| `event` | string | да | Код события Битрикс24. Формат `^[A-Z][A-Z0-9_]+$` — заглавные латинские буквы, цифры, подчёркивание. Примеры: `ONTASKADD`, `ONTASKUPDATE`, `ONCRMDEALADD` |\n| `appPath` | string | да | Путь на приложении, куда доставлять событие. Начинается с `\u002F`. Пример: `\u002Fapi\u002Fwebhooks\u002Fb24` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Fevent-subscriptions \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"event\": \"ONTASKADD\", \"appPath\": \"\u002Fapi\u002Fwebhooks\u002Fb24\" }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Fevent-subscriptions \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"event\": \"ONTASKADD\", \"appPath\": \"\u002Fapi\u002Fwebhooks\u002Fb24\" }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Fevent-subscriptions`,\n  {\n    method: 'POST',\n    headers: {\n      'X-Api-Key': 'YOUR_API_KEY',\n      'Content-Type': 'application\u002Fjson',\n    },\n    body: JSON.stringify({ event: 'ONTASKADD', appPath: '\u002Fapi\u002Fwebhooks\u002Fb24' }),\n  }\n)\nconst { success, data } = await res.json()\nconsole.log('ID подписки:', data.id, '— обработчик:', data.b24Handler)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Fevent-subscriptions`,\n  {\n    method: 'POST',\n    headers: {\n      'X-Api-Key': 'YOUR_APP_KEY',\n      'Authorization': 'Bearer USER_SESSION_TOKEN',\n      'Content-Type': 'application\u002Fjson',\n    },\n    body: JSON.stringify({ event: 'ONTASKADD', appPath: '\u002Fapi\u002Fwebhooks\u002Fb24' }),\n  }\n)\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|----------|\n| `success` | boolean | `true` при успехе |\n| `data.id` | string (UUID) | ID подписки |\n| `data.appId` | string | ID OAuth-приложения, под которым зарегистрирован обработчик |\n| `data.serverId` | string (UUID) | ID сервера |\n| `data.portalId` | string | ID портала Битрикс24 |\n| `data.event` | string | Код события |\n| `data.appPath` | string | Путь доставки на приложении |\n| `data.authType` | string | ID пользователя-установщика приложения в Битрикс24 |\n| `data.b24Handler` | string | URL обработчика на платформе, куда Битрикс24 шлёт событие |\n| `data.status` | string | Статус подписки: `ACTIVE`, `DISABLED`, `DEGRADED`. `DEGRADED` — после серии неудачных доставок |\n| `data.createdById` | string \\| null | ID пользователя Вайбкод, создавшего подписку |\n| `data.createdAt` | string | Дата создания (ISO 8601) |\n| `data.updatedAt` | string | Дата последнего изменения (ISO 8601) |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d\",\n    \"appId\": \"9a1c2b3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d\",\n    \"serverId\": \"e765edfc-ba0a-43de-b8ea-838dd872c522\",\n    \"portalId\": \"8b1f0e2a-3c4d-5e6f-7a8b-9c0d1e2f3a4b\",\n    \"event\": \"ONTASKADD\",\n    \"appPath\": \"\u002Fapi\u002Fwebhooks\u002Fb24\",\n    \"authType\": \"1\",\n    \"b24Handler\": \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fportal-events\u002F9a1c2b3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d\",\n    \"status\": \"ACTIVE\",\n    \"createdById\": \"7f3a1c2b-9d8e-4a6f-b1c2-3d4e5f6a7b8c\",\n    \"createdAt\": \"2026-06-07T10:00:00.000Z\",\n    \"updatedAt\": \"2026-06-07T10:00:00.000Z\"\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — сервер не привязан к OAuth-приложению:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"NOT_OAUTH_APP\",\n    \"message\": \"Server is not backed by an OAuth app with a B24 application token\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|----------|\n| 400 | `INVALID_EVENT` | Код события пуст или не соответствует формату `^[A-Z][A-Z0-9_]+$` |\n| 400 | `INVALID_APP_PATH` | `appPath` не начинается с `\u002F` либо содержит управляющие символы |\n| 400 | `NOT_OAUTH_APP` | Сервер не привязан к OAuth-приложению с `application_token`. Ответ содержит поле `hint` с порядком создания такого сервера |\n| 400 | `NO_USER_TOKEN` | У приложения нет OAuth-токена — сначала авторизуйте приложение на портале. Ответ содержит поле `hint` |\n| 404 | `NOT_FOUND` | Сервер не найден или принадлежит другому API-ключу |\n| 409 | `EVENT_BOUND_ELSEWHERE` | Это событие уже привязано к другому серверу того же приложения — сначала удалите прежнюю подписку |\n| 502 | `BIND_FAILED` | Битрикс24 отклонил регистрацию события — например, портал не на коммерческом тарифе |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **Повторный вызов с той же парой `(сервер, событие)` обновляет подписку.** Если подписка на это событие уже есть на этом же сервере, повторный вызов обновляет `appPath` и возвращает `200` — подходит для перезапуска скриптов настройки.\n\n## Смотрите также\n\n- [Подписки на события портала](\u002Fdocs\u002Finfra\u002Fevent-subscriptions)\n- [Список подписок](\u002Fdocs\u002Finfra\u002Fevent-subscriptions\u002Flist)\n- [Обработчик на стороне приложения](\u002Fdocs\u002Finfra\u002Fevent-subscriptions\u002Fhandler)\n- [Ключи и авторизация](\u002Fdocs\u002Fkeys-auth)\n- [Ошибки](\u002Fdocs\u002Ferrors)\n","2026-07-13",{}]