Для AI-агентов: markdown этой страницы — /docs-content/ai/credentials/update.md индекс документации — /llms.txt
Обновить ключ провайдера
PATCH /v1/ai/credentials/:id
Обновляет имя, флаг isDefault и/или сам ключ. Если в запросе передано поле credentials — новый ключ перепроверяется у провайдера до сохранения. Непрошедший проверку ключ не сохраняется, в базе ничего не меняется. Поля name и isDefault обновляются без верификации.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
Параметрid (path) |
Типstring | Обяз.да | ОписаниеID ключа из GET /v1/ai/credentials |
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
Полеname |
Типstring | Обяз.нет | ОписаниеНовое имя ключа |
ПолеisDefault |
Типboolean | Обяз.нет | ОписаниеСделать ключ ключом по умолчанию для провайдера |
Полеcredentials.apiKey |
Типstring | Обяз.нет | ОписаниеНовый ключ от провайдера |
Полеcredentials.baseUrl |
Типstring | Обяз.нет | ОписаниеНовый адрес API провайдера. Принимается только для custom-openai-compat, где обязателен, если передано поле credentials; у остальных провайдеров отклоняется |
Примеры
curl — личный ключ
curl -X PATCH https://vibecode.bitrix24.tech/v1/ai/credentials/cred_abc123def456 \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "OpenAI (новое имя)",
"credentials": {
"apiKey": "YOUR_NEW_API_KEY"
}
}'
curl — OAuth-приложение
curl -X PATCH https://vibecode.bitrix24.tech/v1/ai/credentials/cred_abc123def456 \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "OpenAI (новое имя)",
"credentials": {
"apiKey": "YOUR_NEW_API_KEY"
}
}'
JavaScript — личный ключ
const id = 'cred_abc123def456'
const res = await fetch(`https://vibecode.bitrix24.tech/v1/ai/credentials/${id}`, {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'OpenAI (новое имя)',
credentials: { apiKey: 'YOUR_NEW_API_KEY' },
}),
})
const { success, data } = await res.json()
if (success) console.log('Ключ обновлён в', data.updatedAt)
JavaScript — OAuth-приложение
const id = 'cred_abc123def456'
const res = await fetch(`https://vibecode.bitrix24.tech/v1/ai/credentials/${id}`, {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'OpenAI (новое имя)',
credentials: { apiKey: 'YOUR_NEW_API_KEY' },
}),
})
const { success, data } = await res.json()
if (success) console.log('Ключ обновлён в', data.updatedAt)
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
Полеsuccess |
Типboolean | ОписаниеВсегда true при успехе |
Полеdata.id |
Типstring | ОписаниеID ключа |
Полеdata.providerId |
Типstring | ОписаниеID провайдера |
Полеdata.provider.slug |
Типstring | ОписаниеСистемное имя провайдера |
Полеdata.provider.name |
Типstring | ОписаниеНазвание провайдера |
Полеdata.name |
Типstring | ОписаниеТекущее имя ключа |
Полеdata.isDefault |
Типboolean | ОписаниеФлаг ключа по умолчанию |
Полеdata.lastError |
Типstring | null | ОписаниеСбрасывается в null при успешном обновлении ключа |
Полеdata.lastErrorAt |
Типstring | null | ОписаниеСбрасывается в null при успешном обновлении ключа |
Полеdata.createdAt |
Типstring | ОписаниеВремя создания в ISO 8601 |
Полеdata.updatedAt |
Типstring | ОписаниеВремя последнего обновления в ISO 8601 |
Пример ответа
{
"success": true,
"data": {
"id": "cred_abc123def456",
"providerId": "openai",
"provider": {
"slug": "openai",
"name": "OpenAI"
},
"name": "OpenAI (новое имя)",
"isDefault": true,
"lastError": null,
"lastErrorAt": null,
"createdAt": "2026-04-15T10:00:00.000Z",
"updatedAt": "2026-04-27T11:35:00.000Z"
}
}
Пример ответа при ошибке
422 credential_invalid — новый ключ не прошёл верификацию у провайдера:
{
"success": false,
"error": {
"code": "credential_invalid",
"message": "OpenAI API 401: Incorrect API key provided"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | Кодinvalid_request |
ОписаниеНарушена схема body |
| HTTP400 | Кодno_key |
ОписаниеВ credentials нет поля apiKey |
| HTTP400 | Кодbase_url_not_supported |
Описаниеcredentials.baseUrl передан ключу провайдера, у которого нет своего адреса эндпоинта. Поле принимает только custom-openai-compat |
| HTTP400 | Кодbase_url_required |
ОписаниеКлюч провайдера custom-openai-compat: в credentials нет baseUrl или он пустой |
| HTTP400 | Кодbase_url_invalid |
ОписаниеНовый baseUrl использует не http/https или некорректен |
| HTTP400 | Кодbase_url_private |
ОписаниеНовый baseUrl указывает на приватную сеть или его доменное имя не удаётся преобразовать в IP-адрес |
| HTTP400 | Кодbase_url_redirect |
ОписаниеПровайдер, совместимый с OpenAI, ответил на проверку ключа HTTP-перенаправлением. Для custom-openai-compat укажите в baseUrl конечный адрес API |
| HTTP404 | Кодnot_found |
ОписаниеКлюч с таким id не найден или не принадлежит вам |
| HTTP404 | Кодprovider_not_found |
ОписаниеПровайдер ключа удалён |
| HTTP422 | Кодcredential_invalid |
ОписаниеНовый ключ не прошёл верификацию у провайдера |
| HTTP422 | Кодprovider_geoblocked |
ОписаниеПровайдер отклонил проверку ключа по региону нашего сервера. Подключите свой прокси или перейдите на OpenRouter. Ответ несёт поле suggestions |
| HTTP403 | Кодscope_missing |
ОписаниеAPI-ключу не хватает скоупа vibe:ai |
Полный список общих ошибок API — Ошибки.
Известные особенности
Верификация только при изменении credentials. Если в запросе нет поля credentials (обновляются только name или isDefault) — провайдер не вызывается, поля lastError/lastErrorAt не сбрасываются.
Пустое тело запроса допустимо. PATCH с пустым телом {} не меняет имя, флаг и ключ и возвращает ключ. Для проверки ключа такой вызов не подходит: это всё равно изменение, и оно расходует лимит на изменение ключа. Прочитать ключ, ничего не меняя, — GET /v1/ai/credentials.
Доступ только к своим ключам. Эндпоинт работает только с USER-ключами текущего пользователя. Попытка обновить чужой ключ или PORTAL-ключ вернёт 404.