[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-apps\u002Fcreate":3,"docs-tabs-apps\u002Fcreate":6},{"content":4,"lastmod":5},"\n## Создать приложение\n\n`POST \u002Fv1\u002Fapps`\n\nРегистрирует OAuth-приложение на портале Битрикс24 и создаёт парный API-ключ. Тело передаётся плоско, без обёртки.\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| `title` | string | да | Название приложения, от 1 до 255 символов |\n| `scopes` | array | да | Набор скоупов, минимум один. Для будущей публикации в наборе нужен `placement`. Список — [Скоупы](\u002Fdocs\u002Fscopes) |\n| `description` | string | нет | Описание приложения, до 2000 символов |\n| `appUrl` | string | нет | Адрес приложения, только `http:\u002F\u002F` или `https:\u002F\u002F`. Пустая строка сохраняется как `null` |\n| `redirectUris` | array | нет | Адреса перенаправления для OAuth. По умолчанию — адрес завершения авторизации и `http:\u002F\u002Flocalhost` |\n| `mode` | string | нет | Режим доступа парного ключа: `READONLY` или `READWRITE`. По умолчанию берётся из политики портала |\n\n`handlerUrl` задаёт платформа — в теле он не принимается, через него идут обратные вызовы OAuth и открытие места встраивания. Разница между `appUrl` и `handlerUrl` — в разделе [Приложения](\u002Fdocs\u002Fapps#appurl-и-handlerurl-разные-адреса).\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fapps \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"title\": \"Дашборд продаж\",\n    \"scopes\": [\"crm\", \"user\", \"placement\"],\n    \"appUrl\": \"https:\u002F\u002Fapp-abc12345.vibecode.bitrix24.tech\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fapps \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"title\": \"Дашборд продаж\",\n    \"scopes\": [\"crm\", \"user\", \"placement\"],\n    \"appUrl\": \"https:\u002F\u002Fapp-abc12345.vibecode.bitrix24.tech\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fapps', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    title: 'Дашборд продаж',\n    scopes: ['crm', 'user', 'placement'],\n    appUrl: 'https:\u002F\u002Fapp-abc12345.vibecode.bitrix24.tech',\n  }),\n})\n\nconst { data } = await res.json()\n\u002F\u002F Сохраните data.rawKey сразу — он возвращается только один раз\nconsole.log('App ID:', data.id)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fapps', {\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({\n    title: 'Дашборд продаж',\n    scopes: ['crm', 'user', 'placement'],\n    appUrl: 'https:\u002F\u002Fapp-abc12345.vibecode.bitrix24.tech',\n  }),\n})\n\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `data.id` | string | Идентификатор приложения |\n| `data.title` | string | Название |\n| `data.description` | string \\| null | Описание |\n| `data.scopes` | array | Набор скоупов |\n| `data.handlerUrl` | string | Адрес обработчика, задан платформой |\n| `data.appUrl` | string \\| null | Адрес приложения |\n| `data.redirectUris` | array | Адреса перенаправления для OAuth |\n| `data.bitrixClientId` | string \\| null | Идентификатор OAuth-клиента на портале |\n| `data.prefix` | string | Префикс ключа |\n| `data.suffix` | string | Суффикс ключа |\n| `data.authorId` | string | Идентификатор автора |\n| `data.portalId` | string | Идентификатор портала |\n| `data.createdAt` | string | Дата создания, ISO 8601 |\n| `data.updatedAt` | string | Дата изменения, ISO 8601 |\n| `data.placements` | array | Места встраивания, до публикации пустой |\n| `data.rawKey` | string | Готовый ключ авторизации `vibe_app_…`. Возвращается только в этом ответе и больше не показывается |\n\n## Пример ответа\n\n`rawKey` показан с усечённым секретом — это не рабочее значение.\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"33c4d5e6-f7a8-49b0-1234-5c6d7e8f9012\",\n    \"title\": \"Дашборд продаж\",\n    \"description\": null,\n    \"scopes\": [\"crm\", \"user\", \"placement\"],\n    \"handlerUrl\": \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbitrix-handler\",\n    \"appUrl\": \"https:\u002F\u002Fapp-abc12345.vibecode.bitrix24.tech\",\n    \"redirectUris\": [\n      \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Foauth\u002Fcomplete\",\n      \"http:\u002F\u002Flocalhost\"\n    ],\n    \"bitrixClientId\": \"local.7c3d4e5f6a7b80.55556666\",\n    \"prefix\": \"vibe_app_local_7c3\",\n    \"suffix\": \"6666\",\n    \"authorId\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n    \"portalId\": \"8b1f0e2a-3c4d-5e6f-7a8b-9c0d1e2f3a4b\",\n    \"createdAt\": \"2026-06-24T09:12:45.781Z\",\n    \"updatedAt\": \"2026-06-24T09:12:45.781Z\",\n    \"placements\": [],\n    \"rawKey\": \"vibe_app_local_7c3d4e5f6a7b80_55556666_…_6666\"\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — нарушена валидация:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"title: Required\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `VALIDATION_ERROR` | Нарушена валидация тела: пропущено `title`, пустой `scopes`, недопустимый `appUrl` |\n| 403 | `APP_CREATION_RESTRICTED` | Создание приложений на портале ограничено списком, автор в него не входит |\n| 403 | `KEY_POLICY_READONLY_REQUIRED` | Политика портала разрешает только `READONLY`, запрошен `READWRITE` |\n| 409 | `KEY_LIMIT_REACHED` | Достигнут предел ключей на пользователя для портала |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **Ключ авторизации возвращается только один раз.** Поле `rawKey` присутствует в ответе создания и больше нигде не отдаётся — ни в [данных приложения](\u002Fdocs\u002Fapps\u002Fget), ни в [списке](\u002Fdocs\u002Fapps\u002Flist). Не сохранили при создании — пересоздайте приложение.\n- **Создаётся пара: приложение и API-ключ.** Регистрация заводит запись приложения и парный ключ авторизации в один приём. Это влияет на удаление: ключ освобождает слот в пределе на пользователя только после [удаления приложения](\u002Fdocs\u002Fapps\u002Fdelete).\n\n## Смотрите также\n\n- [Приложения](\u002Fdocs\u002Fapps)\n- [Обновить приложение](\u002Fdocs\u002Fapps\u002Fupdate)\n- [Удалить приложение](\u002Fdocs\u002Fapps\u002Fdelete)\n- [Опубликовать](\u002Fdocs\u002Fapps\u002Fpublish)\n- [Скоупы](\u002Fdocs\u002Fscopes)\n- [Ключи и авторизация](\u002Fdocs\u002Fkeys-auth)\n","2026-07-07",{}]