#Список ключей

GET /v1/ai/credentials

Возвращает все BYOK-ключи, подключённые текущим пользователем (USER scope), вместе со статистикой использования за последние 30 дней. Ключи на уровне портала (PORTAL) не попадают в этот список — они управляются администратором через интерфейс портала.

#Параметры

Параметров запроса нет.

#Примеры

#curl — личный ключ

Terminal
curl https://vibecode.bitrix24.tech/v1/ai/credentials \
  -H "X-Api-Key: YOUR_API_KEY"

#curl — OAuth-приложение

Terminal
curl https://vibecode.bitrix24.tech/v1/ai/credentials \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"

#JavaScript — личный ключ

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/ai/credentials', {
  headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})

const { data } = await res.json()
data.forEach((cred) => {
  console.log(`${cred.name} (${cred.provider.name}) — ${cred.usage.requests} запросов за 30 дней`)
})

#JavaScript — OAuth-приложение

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/ai/credentials', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

const { data } = await res.json()
console.log('Подключено провайдеров:', data.length)

#Поля ответа

Поле Тип Описание
success boolean Всегда true при успехе
data array Массив подключённых ключей
data[].id string Уникальный ID ключа
data[].providerId string ID провайдера. Список: `GET /v1/ai/providers`
data[].provider.slug string Системное имя провайдера: openai, anthropic, custom-openai-compat и т. п.
data[].provider.name string Отображаемое название провайдера
data[].name string Имя ключа, заданное пользователем
data[].isDefault boolean Флаг ключа по умолчанию для провайдера
data[].lastError string | null Последняя ошибка верификации (null, если ошибок не было)
data[].lastErrorAt string | null Время последней ошибки в ISO 8601
data[].usage.requests number Количество запросов за последние 30 дней
data[].usage.promptTokens number Токены входа за 30 дней
data[].usage.completionTokens number Токены ответа за 30 дней
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,
      "usage": {
        "requests": 142,
        "promptTokens": 45200,
        "completionTokens": 18300
      },
      "createdAt": "2026-04-15T10:00:00.000Z",
      "updatedAt": "2026-04-20T14:30:00.000Z"
    }
  ]
}

Если ключи не подключены — data будет пустым массивом:

JSON
{
  "success": true,
  "data": []
}

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

403 scope_missing — у API-ключа нет скоупа vibe:ai:

JSON
{
  "success": false,
  "error": {
    "code": "scope_missing",
    "message": "API key does not have the vibe:ai scope"
  }
}

#Ошибки

HTTP Код Описание
403 scope_missing API-ключу не хватает скоупа vibe:ai
401 MISSING_API_KEY Не передан заголовок X-Api-Key

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

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

Видны только USER-ключи. Эндпоинт показывает ключи, которые подключили лично вы. Ключи на уровне портала (PORTAL scope), которые администратор настроил для всех участников — здесь не отображаются, они управляются через интерфейс портала.

lastError показывает последнюю проблему. Если у ключа lastError отличен от null — провайдер вернул ошибку при последней проверке (через POST /v1/ai/credentials/:id/test или при использовании в чат-комплишене). Поле сбрасывается при успешном PATCH с обновлением credentials или при успешной проверке.

Статистика за фиксированные 30 дней. Поле usage содержит цифры за последние 30 дней без возможности задать период. Для произвольного периода — `GET /v1/ai/credentials/:id/usage?days=N`.

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