#Обновить ключ провайдера

PATCH /v1/ai/credentials/:id

Обновляет имя, флаг isDefault и/или сам ключ. Если в запросе передано поле credentials — новый ключ перепроверяется у провайдера до сохранения; при ошибке возвращается 422, в базе ничего не меняется. Поля name и isDefault обновляются без верификации.

#Параметры

Параметр Тип Обяз. Описание
id (path) string да ID ключа из `GET /v1/ai/credentials`

#Поля запроса (body)

Поле Тип Обяз. Описание
name string нет Новое имя ключа
isDefault boolean нет Сделать ключ ключом по умолчанию для провайдера
credentials.apiKey string нет Новый ключ от провайдера
credentials.baseUrl string нет Новый baseUrl (только для custom-openai-compat)

В body нужно передать хотя бы одно поле. Если передано credentials — оно проверяется у провайдера; при успехе обнуляются lastError и lastErrorAt.

#Примеры

#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": "sk-proj-new-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 (новое имя)"
  }'

#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({
    credentials: { apiKey: 'sk-proj-new-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 (production)' }),
})

const { data } = await res.json()
console.log('Новое имя:', data.name)

#Поля ответа

Поле Тип Описание
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"
  }
}

#Пример ответа при ошибке

404 not_found — ключ не найден или принадлежит другому пользователю:

JSON
{
  "success": false,
  "error": {
    "code": "not_found",
    "message": "Credential not found"
  }
}

422 credential_invalid — новый ключ не прошёл верификацию у провайдера:

JSON
{
  "success": false,
  "error": {
    "code": "credential_invalid",
    "message": "OpenAI API 401: Incorrect API key provided"
  }
}

#Ошибки

HTTP Код Описание
400 invalid_request Нарушена схема body
400 no_key В credentials нет поля apiKey
400 base_url_invalid Новый baseUrl использует не http/https
400 base_url_private Новый baseUrl указывает на приватную сеть
404 not_found Ключ с таким id не найден или не принадлежит вам
404 provider_not_found Провайдер ключа удалён
422 credential_invalid Новый ключ не прошёл верификацию у провайдера
403 scope_missing API-ключу не хватает скоупа vibe:ai

Полный список общих ошибок API — Ошибки.

#Известные особенности

Верификация только при изменении credentials. Если в запросе нет поля credentials (обновляются только name или isDefault) — провайдер не вызывается, поля lastError/lastErrorAt не сбрасываются.

Пустое тело запроса допустимо. PATCH с пустым body ({}) вернёт текущее состояние ключа без изменений — поведение, унаследованное от Zod-схемы. Используйте для проверки доступности ключа без затрагивания данных.

Доступ только к своим ключам. Эндпоинт работает только с USER-ключами текущего пользователя. Попытка обновить чужой ключ или PORTAL-ключ вернёт 404.

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