Для 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 — личный ключ

Terminal
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-приложение

Terminal
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 — личный ключ

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-приложение

javascript
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

Пример ответа

JSON
{
  "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 — новый ключ не прошёл верификацию у провайдера:

JSON
{
  "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.

Смотрите также