Для AI-агентов: markdown этой страницы — /docs-content/cowork/applications-create.md индекс документации — /llms.txt
Создать приложение из Cowork/Code
POST /v1/cowork/applications
Создаёт личное приложение и выписывает его ключ, который возвращается ровно один раз. Сервер при этом не создаётся: у личного приложения его нет по определению — сервер появляется от вашего деплоя и сам привязывается к карточке. Заголовок Idempotency-Key обязателен.
Скоуп: vibe:cowork (ключ Cowork/Code) | Базовый URL: https://vibecode.bitrix24.tech/v1 | Авторизация: X-Api-Key
Значения для полей запроса берите из параметров создания приложения — там же лежат наборы прав и режим доступа, который получит выданный ключ.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
ПараметрIdempotency-Key (header) |
Типstring | Обяз.да | ОписаниеСтрока от 1 до 255 символов из набора [A-Za-z0-9_.:-]. Область действия — вызывающий ключ, поэтому два разных клиента могут прислать одну и ту же строку. У ключа УСПЕШНОЙ попытки срока жизни нет — он живёт столько же, сколько созданное им приложение. Ключ ОТКАЗАВШЕЙ попытки (отказ пришёл при выписке ключа, обычно уже после обращения к Битрикс24) реплеится 20 минут, затем забывается. Подробнее — Идемпотентность |
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
Полеname |
Типstring | Обяз.да | ОписаниеНазвание приложения. От 2 до 100 символов, управляющие символы запрещены. Пробелы по краям обрезаются, и длина считается уже после обрезки, поэтому название из одного символа отвечает 400 и с пробелами вокруг |
Полеtype |
Типstring | Обяз.да | ОписаниеТип приложения. Работает значение personal. Значение external схема принимает, но эндпоинт отвечает 400 APP_TYPE_NOT_AVAILABLE |
Полеb24Scopes |
Типarray | Обяз.нет | ОписаниеПрава Битрикс24 для выписываемого ключа. Поле пропущено — ключ получает все права, которые может выдать этот аккаунт, а в warningCodes приходит B24_SCOPES_DEFAULTED_TO_ALL. Сузить права выданного ключа нечем, поэтому присылайте явный список, если полный набор вам не нужен. Пустой массив отбивается: он значил бы ключ без прав аккаунта. Значения берите из набора scopePresets в параметрах создания |
Полеmode |
Типstring | Обяз.нет | ОписаниеРежим доступа ключа — READONLY или READWRITE. Без поля ключ выдаётся в самом узком из режима аккаунта, режима вызывающего ключа и режима места Cowork/Code, если ключ принадлежит месту, — это значение приходит в mode параметров создания. Явное значение шире режима места выдаётся в режиме места, фактический режим приходит в data.mode ответа. Если аккаунт назначает новым ключам только чтение, значение READWRITE отвечает 403 — политика аккаунта сильнее запроса. Пока включён запрет записи для ключей «только чтение» (по умолчанию он включён), такому вызывающему ключу ключ не выдаётся ни с полем, ни без него: создание отвечает 403 WRITE_BLOCKED_READONLY_KEY раньше остальных проверок. Без запрета он получает ключ в режиме «только чтение», а явное READWRITE отвечает тем же 403 |
ПолеexpiresInDays |
Типnumber | null | Обяз.нет | ОписаниеСрок жизни ключа в днях, целое от 1. Без поля и при null ключ выписывается бессрочным — политика срока из параметров создания сама не применяется, см. «Известные особенности» |
Схема строгая: лишнее поле в теле отвечает 400 VALIDATION_ERROR и называет его. Размер тела ограничен 64 КБ.
Примеры
Эндпоинт принимает только ключ Cowork/Code, поэтому примеров два. У личного ключа и ключа OAuth-приложения нет скоупа vibe:cowork, отказ по скоупу — 403 INSUFFICIENT_SCOPE.
curl — ключ Cowork/Code
curl -X POST https://vibecode.bitrix24.tech/v1/cowork/applications \
-H "X-Api-Key: YOUR_COWORK_KEY" \
-H "Idempotency-Key: create-app-2026-08-25-01" \
-H "Content-Type: application/json" \
-d '{
"name": "Отчёт по сделкам",
"type": "personal",
"b24Scopes": ["crm"]
}'
JavaScript — ключ Cowork/Code
const res = await fetch('https://vibecode.bitrix24.tech/v1/cowork/applications', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_COWORK_KEY',
'Idempotency-Key': 'create-app-2026-08-25-01',
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Отчёт по сделкам',
type: 'personal',
b24Scopes: ['crm'],
}),
})
if (!res.ok) {
const { error } = await res.json()
throw new Error(`${res.status} ${error.code}`)
}
const { data } = await res.json()
// Сырой ключ приходит один раз — сохраните его сразу
if (data.rawApiKey === null) {
// Это повтор запроса: приложение уже создано, ключ заново не выдаётся
} else {
saveKey(data.rawApiKey, data.keyExpiresAt)
}
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
Полеsuccess |
Типboolean | ОписаниеВсегда true при успехе |
Полеdata.application |
Типobject | null | ОписаниеКарточка приложения — та же форма, что отдаёт GET /v1/applications/:id. Ниже перечислены поля, которые наполнены сразу после создания. Полный список — на странице карточки. null означает, что ключ уже выписан и привязан к приложению, но прочитать карточку не удалось: ответ всё равно 201 и содержит сырой ключ (он возвращается только раз), а в warningCodes приходит APPLICATION_CARD_UNAVAILABLE. Карточку можно прочитать через GET /v1/applications/:id |
Полеdata.application.id |
Типstring | ОписаниеИдентификатор приложения |
Полеdata.application.name |
Типstring | ОписаниеНазвание, которое вы передали |
Полеdata.application.type |
Типstring | ОписаниеPERSONAL для приложения, созданного этим эндпоинтом |
Полеdata.application.server |
Типobject | null | Описаниеnull на создающем ответе: сервера у личного приложения ещё нет. При повторе запроса поле отражает состояние НА МОМЕНТ ПОВТОРА, поэтому у приложения, которое успели задеплоить, здесь придёт объект сервера |
Полеdata.application.openUrl |
Типstring | null | Описаниеnull на создающем ответе: открывать пока нечем. При повторе — текущий адрес приложения, если он уже выдан |
Полеdata.applicationId |
Типstring | ОписаниеПовторяет application.id. Отдаётся отдельно, чтобы связать вашу локальную запись с карточкой, не разбирая её внутренности |
Полеdata.rawApiKey |
Типstring | null | ОписаниеСырой ключ приложения. Возвращается ОДИН раз, восстановить нельзя. Формат — vibe_api_, затем 32 символа латиницы и цифр, затем _ и 6 шестнадцатеричных символов в нижнем регистре, всего 48 символов. null при повторе запроса |
Полеdata.keyExpiresAt |
Типstring | null | ОписаниеСрок действия ключа, ISO 8601. null — ключ бессрочный. При повторе запроса поле ОТСУТСТВУЕТ, а не приходит пустым |
Полеdata.mode |
Типstring | ОписаниеРежим доступа выписанного ключа — READONLY или READWRITE. При повторе запроса поле ОТСУТСТВУЕТ |
Полеdata.warnings |
Типarray | ОписаниеПредупреждения текстом. Пустой, когда предупреждений нет |
Полеdata.warningCodes |
Типarray | ОписаниеКоды предупреждений. KEY_NOT_REPLAYABLE при повторе запроса. B24_SCOPES_DEFAULTED_TO_ALL, когда b24Scopes не прислан и ключ получил все права аккаунта. APPLICATION_CARD_UNAVAILABLE, когда ключ выписан и привязан, но карточку прочитать не удалось (data.application тогда null). Оба поля приходят всегда, даже пустыми — форма ответа одна для всех случаев |
Пример ответа
{
"success": true,
"data": {
"application": {
"id": "cmt8ht5u40005ensk4fp45ebx",
"name": "Отчёт по сделкам",
"description": null,
"type": "PERSONAL",
"iconUrl": null,
"createdAt": "2026-08-25T09:59:01.324Z",
"updatedAt": "2026-08-25T09:59:01.324Z",
"viewerState": "owner",
"pinned": false,
"author": { "name": "Автор приложений" },
"isEmbedded": false,
"openUrl": null,
"openTarget": null,
"server": null,
"sources": { "hasVersions": false, "latestVersionId": null, "latestSavedAt": null },
"activeOperation": null
},
"applicationId": "cmt8ht5u40005ensk4fp45ebx",
"rawApiKey": "vibe_api_…",
"keyExpiresAt": null,
"mode": "READWRITE",
"warnings": [],
"warningCodes": []
}
}
Пример ответа при ошибке
409 — квота ключей исчерпана:
{
"success": false,
"error": {
"code": "KEY_LIMIT_REACHED",
"message": "Maximum number of API keys reached",
"details": { "used": 40, "limit": 40, "requested": 1, "scope": "portal" }
}
}
Удаление выданного ключа в кабинете НЕ отменяет идемпотентность: карточка остаётся, а повтор с тем же ключом идемпотентности по-прежнему отвечает 201 с заголовком Idempotent-Replayed: true и warningCodes: ["KEY_NOT_REPLAYABLE"]. Нового ключа этот повтор не выпишет — сырой ключ отдаётся ровно один раз, при первом создании; получить рабочий ключ для существующего приложения можно через POST /v1/keys/:id/rotate.
Отказ, дошедший до обращения к Битрикс24, реплеится так же — см. «Повтор после отказа».
Ошибки
Перечень отказов самого эндпоинта исчерпывающий: кода, которого здесь нет, эндпоинт не отдаёт. Выписка ключа идёт через Битрикс24 Нетворк, и его отказы переподнимаются дословно — они в таблице тоже. У коробочного аккаунта выписка идёт своим каналом и приносит собственные коды, разобранные в Ключах и авторизации. Форма ответа та же, ветвитесь по error.code.
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | КодIDEMPOTENCY_KEY_REQUIRED |
ОписаниеЗаголовок Idempotency-Key не передан |
| HTTP400 | КодINVALID_IDEMPOTENCY_KEY |
ОписаниеЗаголовок передан, но не подходит по длине или набору символов |
| HTTP400 | КодVALIDATION_ERROR |
ОписаниеНарушена схема тела: длина name, управляющие символы в нём, неизвестное значение mode, expiresInDays меньше единицы, пустой b24Scopes или лишнее поле. Сообщение называет поле |
| HTTP400 | КодAPP_TYPE_NOT_AVAILABLE |
ОписаниеПередан type: "external" — в этой версии он недоступен |
| HTTP400 | КодINVALID_SCOPES |
ОписаниеВ b24Scopes есть право, которого нет в каталоге Битрикс24. Сообщение перечисляет непринятые значения |
| HTTP400 | КодPORTAL_NOT_LINKED |
ОписаниеАккаунт Битрикс24 не связан с Битрикс24 Нетворк, и выписать ключ нечем |
| HTTP400 | КодPERSONAL_KEY_WEBHOOK_SCOPES_INVALID |
ОписаниеВ b24Scopes не осталось ни одного права, которое можно привязать к аккаунту. Приходит, когда переданы ТОЛЬКО права placement, entity или userfieldtype — личный ключ их не исполняет. Добавьте хотя бы одно право доступа к данным, например crm |
| HTTP401 | КодMISSING_API_KEY |
ОписаниеНе передан заголовок X-Api-Key |
| HTTP401 | КодINVALID_API_KEY |
ОписаниеКлюч не опознан: такой строки на платформе нет |
| HTTP401 | КодKEY_INACTIVE |
ОписаниеКлюч выключен |
| HTTP401 | КодKEY_EXPIRED |
ОписаниеСрок действия вызывающего ключа истёк |
| HTTP402 | КодACCOUNT_FROZEN |
ОписаниеБаланс аккаунта исчерпан — пополните счёт |
| HTTP402 | КодMARKETPLACE_REQUIRED |
ОписаниеУ аккаунта подписочной модели нет активной подписки. Тело ответа содержит путь подключения, а если состояние аккаунта удалось прочитать, — ещё и блок error.details.activation той же формы, что activation в состоянии Коворка: marketTrial.available: true значит, что эту дверь откроет одноразовый пробный период Маркета — его включает человек в десктопе, подтвердив условия. Аккаунту на бесплатном тарифе Битрикс24 пробный период не предлагается. Повтор без изменения состояния аккаунта даёт тот же ответ |
| HTTP402 | КодKZ_PAID_ONLY · UZ_PAID_ONLY |
ОписаниеТот же отказ у аккаунтов ТАРИФНОЙ модели: подписки как продукта в этих странах нет, нужен платный или демо-тариф Битрикс24. Тариф выбирается на стороне Битрикс24, тело ответа содержит адрес |
| HTTP402 | КодBY_PAID_ONLY |
ОписаниеБелорусский аккаунт без оплаченного доступа. Доступ открывает платный или демо-тариф Битрикс24, и открывает его также платная подписка — в Беларуси она продаётся. Тариф выбирается на стороне Битрикс24, тело ответа содержит адрес. Код приходит, когда для аккаунта включена тарифная модель |
| HTTP403 | КодINSUFFICIENT_SCOPE |
ОписаниеУ ключа нет скоупа vibe:cowork |
| HTTP403 | КодSCOPE_NOT_AVAILABLE_ON_PORTAL |
ОписаниеВ b24Scopes есть право модуля, которого у аккаунта нет. Сообщение перечисляет такие права. Тот же отказ дают соседние эндпоинты выдачи ключей |
| HTTP403 | КодCOWORK_HARNESS_KEY_FORBIDDEN |
ОписаниеВызов сделан ключом стороннего агента, выписанным на подписку. Создавать приложения такому ключу нельзя — см. Свой агент на подписке |
| HTTP403 | КодCOWORK_NOT_ACTIVATED |
ОписаниеНет активной подписки Cowork/Code для пары сотрудник и аккаунт |
| HTTP403 | КодWRITE_BLOCKED_READONLY_KEY |
ОписаниеВызывающий ключ Cowork/Code выписан в режиме «только чтение», а создание приложения — запись. Отказ приходит раньше остальных проверок |
| HTTP403 | КодAPP_CREATION_RESTRICTED |
ОписаниеПолитика аккаунта ограничивает круг тех, кто создаёт приложения, и владелец ключа в него не входит. Подробнее — Права на создание |
| HTTP403 | КодKEY_POLICY_READONLY_REQUIRED |
ОписаниеАккаунт назначает новым ключам только чтение, а в теле передан mode: "READWRITE". Отказ безусловный: административного канала у этого ключа нет |
| HTTP409 | КодKEY_LIMIT_REACHED |
ОписаниеКвота ключей исчерпана. error.details содержит used, limit и requested; без scope это лимит пользователя на портале, а scope: "portal" означает портальный потолок платформы |
| HTTP409 | КодIDEMPOTENCY_KEY_BODY_MISMATCH |
ОписаниеТот же Idempotency-Key пришёл с другим телом |
| HTTP409 | КодIDEMPOTENCY_KEY_ALREADY_USED |
ОписаниеКлюч идемпотентности израсходован НАВСЕГДА: он принадлежит приложению, которое с тех пор удалили. Отказ попытки, дошедшей до обращения к Битрикс24, этот код больше не даёт — читайте «Повтор после отказа» |
| HTTP409 | КодIDEMPOTENCY_CONCURRENT_RETRY |
ОписаниеПараллельный запрос с тем же ключом идемпотентности ещё выполняется. Единственный из трёх отказов идемпотентности, где повтор осмыслен. Заявка на ключ занимается ДО выписки, поэтому такой отказ приходит раньше, чем создаётся ключ: второе приложение и второй ключ не появятся, сколько бы запросов ни ушло одновременно |
| HTTP415 | КодFST_ERR_CTP_INVALID_MEDIA_TYPE |
ОписаниеТело прислано с типом содержимого, который этот маршрут не разбирает. Отправляйте Content-Type: application/json |
| HTTP429 | КодRATE_LIMITED |
ОписаниеПревышен предел частоты на связку аккаунт и владелец ключа. Суммарный лимит платформы — 6 запросов в минуту. Действующее для вашего ключа значение приходит в заголовке x-ratelimit-limit |
| HTTP429 | КодQUOTA_EXCEEDED |
ОписаниеИсчерпана суточная бесплатная квота вызовов при нулевом балансе на предоплате |
| HTTP413 | КодPAYLOAD_TOO_LARGE |
ОписаниеТело запроса больше 64 КиБ. Достигается, например, очень длинным b24Scopes. Проверяется до разбора тела, поэтому ни заявка, ни ключ не создаются |
| HTTP500 | КодAPPLICATION_CREATE_FAILED |
ОписаниеНе удалась внутренняя запись или сам шаг выписки ключа, и различить, какая именно, по ответу нельзя. Возможны три состояния: (а) ключ уже выписан, а карточку записать не удалось — в разделе ключей кабинета появится лишний ключ, отзовите его; (б) сам шаг выписки бросил ошибку (например, таймаут базы) — ключа, как правило, нет; (в) не удалась вставка заявки на бронь, и не создано вообще ничего. В (а) и (б) исход записан: повтор с ТЕМ ЖЕ ключом идемпотентности в течение 20 минут получает этот же ответ (Idempotent-Replayed: true), поэтому повторённый 500 не доказывает, что лишний ключ есть. В (в) бронь не была занята, и повтор выполняется как совершенно новая попытка сразу, без этого заголовка. См. «Повтор после отказа» |
| HTTP502 | КодBITRIX_UNAVAILABLE |
ОписаниеБитрикс24 Нетворк отказал или был недоступен во время выписки ключа — это отказ уже ПОСЛЕ обращения к порталу, поэтому создание могло состояться на стороне Битрикс24. Повтор с ТЕМ ЖЕ ключом идемпотентности в течение 20 минут получает этот же ответ (Idempotent-Replayed: true) — см. «Повтор после отказа». Для повтора СПУСТЯ 20 минут учтите: смена значения Idempotency-Key от дубля не защищает — что старым, что новым ключом повтор в этом случае одинаково запускает совершенно новую попытку. На платформе при этом нечего проверить: заявка на бронь удаляется вместе с исходом отказа, а на этой стадии ключ не чеканится вовсе — если первая попытка всё же дошла до Битрикс24, возможный дубль ищите в самом портале Битрикс24. Считайте риск дубля частью цены повтора спустя окно и ограничивайте число попыток. Под этот же код попадает терминальный случай — истекла авторизация владельца ключа в Битрикс24 Нетворк, и лечит её только сам владелец, войдя в Битрикс24 Нетворк заново. Отличить одно от другого по ответу нельзя, отдельного поля нет — вместо повтора ради диагностики сразу покажите человеку, что владельцу ключа нужно войти в Битрикс24 Нетворк заново |
| HTTP503 | КодCOWORK_FEATURE_DISABLED |
ОписаниеCowork/Code отключён на уровне платформы |
| HTTP503 | КодAPP_CREATE_DISABLED |
ОписаниеСоздание приложений из Cowork/Code отключено. Заранее это видно по полю available в параметрах создания |
Полный список общих ошибок API — Ошибки.
Идемпотентность
Заголовок Idempotency-Key обязателен, и это отличие от создания сервера, где он необязателен. Причина в том, что эндпоинт выписывает ключ и занимает место в квоте: без защиты обрыв сети оставлял бы второе приложение и второй ключ.
Повтор запроса с тем же ключом и тем же телом отвечает 201, добавляет заголовок ответа Idempotent-Replayed: true и возвращает ту же карточку. Сырой ключ при этом приходит null, а в warningCodes появляется KEY_NOT_REPLAYABLE: у платформы лежит только хеш ключа, восстановить сам ключ нечем.
Потерянный ключ повтором не возвращается, и перевыпустить его этим ключом Cowork/Code нельзя — идентификатора выданного ключа в ответе нет, а раздел /v1/keys принимает только управляющий ключ. Практический путь один: создайте приложение заново с НОВЫМ значением Idempotency-Key и получите свежий ключ, а лишнюю карточку и её ключ уберите в кабинете платформы. Поэтому сохраняйте rawApiKey сразу, в том же обработчике ответа.
Отпечаток снимается с приведённого к общему виду тела: порядок полей и порядок значений внутри b24Scopes на сравнение не влияют, поэтому переставленные местами поля по-прежнему считаются тем же запросом. Пробелы по краям name тоже не влияют, а expiresInDays: null и отсутствие этого поля считаются одним и тем же. Другое тело с тем же ключом отвечает 409 IDEMPOTENCY_KEY_BODY_MISMATCH, а не отдаёт чужой результат.
Повторяйте то же тело, а не уточнённое. Опущенное необязательное поле и то же поле со значением, которое аккаунт подставил бы сам, дают РАЗНЫЕ отпечатки: если первый запрос шёл без mode, а повтор дописал mode, придёт 409 IDEMPOTENCY_KEY_BODY_MISMATCH. По той же причине различаются ["crm"] и ["crm", "crm"] — набор прав перед сравнением сортируется, но дубликаты из него не убираются.
Повтор после отказа
Если первая попытка отказала УЖЕ ПОСЛЕ обращения к Битрикс24 (коннектор недоступен, портал отказал, внутренняя ошибка записи), платформа хранит этот исход и в течение 20 минут отдаёт его дословно на повтор с тем же Idempotency-Key: тот же HTTP-статус, тот же error.code, то же тело, плюс заголовок Idempotent-Replayed: true. Ответ платформы неотличим от первого отказа, кроме этого заголовка — ориентируйтесь на него, если хотите отличить повтор от первой попытки.
Спустя 20 минут исход забывается: платформа освобождает ключ идемпотентности физически, и повтор с ним выполняется как совершенно новая попытка — со всеми проверками заново, включая шанс на успех. Тело повтора при этом обязано совпадать с телом первой попытки — иначе, как и всегда, придёт 409 IDEMPOTENCY_KEY_BODY_MISMATCH; исключение — если исход уже забыт (20 минут прошли), тогда сравнения тела с забытым отказом не происходит вовсе, и повтор с ЛЮБЫМ телом стартует как новая попытка.
Если первый отказ произошёл уже ПОСЛЕ обращения к Битрикс24 (например, 502 BITRIX_UNAVAILABLE), аккаунт мог уже получить вебхук от первой попытки — повтор спустя 20 минут этого не проверяет и может выписать ВТОРОЙ ключ поверх первого. Смена значения Idempotency-Key защиты здесь не даёт — что старым, что новым ключом повтор спустя окно одинаково запускает новую попытку. Как правило, на платформе при этом нечего проверить: неудавшаяся заявка на бронь удаляется вместе с исходом отказа, а ключ на большинстве стадий отказа не чеканится вовсе — возможный дубль в этом случае ищите в самом портале Битрикс24, если это возможно, и считайте риск частью цены повтора спустя окно. Исключение — 500 APPLICATION_CREATE_FAILED: там ключ иногда УЖЕ выписан (см. таблицу ошибок выше), и тогда лишний ключ можно найти и отозвать в разделе ключей кабинета платформы.
Отказ проверок, которые идут ДО того, как ключ идемпотентности занят (не прошла валидация тела, квота ключей исчерпана, портал не привязан к Нетворку, не пройдена проверка подписки или тарифа самой платформы), в эту гарантию не входит: ключ в этом случае не удерживается, и повтор с ним для платформы неотличим от первого запроса. Большинство отказов по подписке или тарифу приходит до того, как ключ занят, и не повторяется, но отказ, который портал Битрикс24 вернул уже при выписке ключа, сохраняется и повторяется 20 минут. По телу ответа их не отличить, ориентируйтесь на заголовок Idempotent-Replayed: его нет — ответ свежий.
Известные особенности
Срок жизни ключа по умолчанию не применяется — поле keyExpiresInDays из параметров создания это подсказка, а не значение по умолчанию. Если не передать expiresInDays, ключ выписывается бессрочным, и в ответе keyExpiresAt приходит null. Хотите ограничить срок — передайте число дней явно, а показать человеку можно значение из параметров создания.
Права placement, entity и userfieldtype на выписанном ключе не окажутся. В смешанном наборе они отбрасываются без отказа: личный ключ их не исполняет. Отказ приходит только тогда, когда кроме них в b24Scopes не передано ничего. Состав прав проверяйте по выданному ключу, а не по отправленному запросу.
Выписанный ключ не умеет обращаться к искусственному интеллекту и веб-поиску. Он несёт vibe:infra, vibe:storage и запрошенные права Битрикс24, а vibe:ai и vibe:search в него не попадают ни в строке прав, ни в правах во время работы. Приложение, созданное так, не сможет расходовать кошелёк аккаунта на модели и поиск.
Порядок отказов несущий: сначала права вызывающего ключа, потом состояние продукта, потом стоимость. Проверки идут так: сначала сам ключ — существование, срок, режим «только чтение», заморозка баланса. Затем скоуп vibe:cowork, класс ключа, отключение всего Cowork/Code, активность подписки, отключение самого мастера. Затем идемпотентность и схема тела. И только потом доступ аккаунта к платформе, политика создания приложений и квота ключей. Если нарушено несколько условий сразу, придёт первый отказ из этой цепочки.
Отказ 500 APPLICATION_CREATE_FAILED не показывает, успел ли выписаться ключ. Если ключ уже выписан, а карточку создать не удалось, место в квоте занято — найдите и отзовите лишний ключ. Если сам шаг выписки бросил ошибку, ключа, как правило, нет, но исход всё равно записан. В обоих случаях повтор с тем же ключом идемпотентности в течение 20 минут возвращает сохранённый отказ, а заголовок Idempotent-Replayed: true сам по себе не доказывает, что лишний ключ есть, — сверьтесь со списком ключей. Если не удалась сама вставка заявки на бронь, ни ключа, ни карточки нет — бронь не была занята, сохранённого исхода тоже нет, и повтор выполняется как новая попытка сразу.
Часть полей карточки эта ручка не наполняет — читайте их из витрины. Набор полей совпадает с GET /v1/applications/:id, но pinned здесь всегда false, а sources и activeOperation всегда пустые, даже если приложение уже задеплоено и человек закрепил его в кабинете. За этими признаками обращайтесь к витрине приложений, а из ответа создания берите идентификатор, имя и ключ.
Сервер к карточке привязывается сам. После создания приложения поднимайте сервер своим POST /v1/infra/servers с параметрами из блока server параметров создания. Отдельного вызова, связывающего сервер с карточкой, нет и не нужно.