#Добавить модель вручную

POST /v1/ai/credentials/:id/models

Регистрирует одну модель, привязанную к Custom-ключу. Используется для провайдеров, которые не отдают каталог через GET /v1/models (Minimax, корпоративный vLLM/Ollama, Cohere). Эндпоинт работает только с провайдером custom-openai-compat.

#Параметры

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

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

Поле Тип Обяз. По умолч. Описание
modelId string да ID модели у провайдера. Будет использоваться в model запроса к `/v1/chat/completions`
name string нет значение modelId Отображаемое название модели
contextLength number нет 8192 Максимальный размер контекста в токенах
maxOutputTokens number нет 4096 Максимум токенов в ответе

#Примеры

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

Terminal
curl -X POST https://vibecode.bitrix24.tech/v1/ai/credentials/cred_custom_xyz/models \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "modelId": "abab6.5-chat",
    "name": "MiniMax abab6.5-chat",
    "contextLength": 32768,
    "maxOutputTokens": 8192
  }'

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

Terminal
curl -X POST https://vibecode.bitrix24.tech/v1/ai/credentials/cred_custom_xyz/models \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "modelId": "abab6.5-chat",
    "name": "MiniMax abab6.5-chat",
    "contextLength": 32768,
    "maxOutputTokens": 8192
  }'

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

javascript
const id = 'cred_custom_xyz'
const res = await fetch(`https://vibecode.bitrix24.tech/v1/ai/credentials/${id}/models`, {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    modelId: 'abab6.5-chat',
    name: 'MiniMax abab6.5-chat',
    contextLength: 32768,
    maxOutputTokens: 8192,
  }),
})

const { data } = await res.json()
console.log('Зарегистрирована модель с id:', data.id)

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

javascript
const id = 'cred_custom_xyz'
const res = await fetch(`https://vibecode.bitrix24.tech/v1/ai/credentials/${id}/models`, {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ modelId: 'abab6.5-chat' }),
})

const { data } = await res.json()
console.log('Готово:', data.modelId)

#Поля ответа

Поле Тип Описание
success boolean Всегда true при успехе
data.id string Уникальный ID записи AiModel (нужен для удаления)
data.modelId string Зарегистрированный modelId
data.name string Имя модели
data.contextLength number Сохранённый размер контекста

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

HTTP-статус 201 Created:

JSON
{
  "success": true,
  "data": {
    "id": "aimodel_xyz789",
    "modelId": "abab6.5-chat",
    "name": "MiniMax abab6.5-chat",
    "contextLength": 32768
  }
}

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

400 not_custom_provider — ключ не относится к Custom-провайдеру:

JSON
{
  "success": false,
  "error": {
    "code": "not_custom_provider",
    "message": "Manual model registration is only available for custom-openai-compat provider"
  }
}

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

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

#Ошибки

HTTP Код Описание
400 invalid_request Поле modelId не передано или нарушена схема
400 not_custom_provider Эндпоинт работает только с провайдером custom-openai-compat
404 not_found Ключ с таким id не найден или не принадлежит вам
403 scope_missing API-ключу не хватает скоупа vibe:ai

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

Лимит регистрации моделей: 30 запросов в минуту.

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

Только Custom-провайдер. Для стандартных провайдеров (openai, anthropic и др.) каталог моделей фиксирован и эндпоинт вернёт 400 not_custom_provider. Регистрация моделей для них недоступна — нужно ждать обновления платформенного каталога.

Идемпотентно. Повторный вызов с тем же modelId обновит существующую запись (поля name, contextLength, maxOutputTokens) вместо создания дубликата.

modelId совпадает с провайдерским. Передавайте именно тот идентификатор, который провайдер ожидает в model запроса. Например, для Minimax — abab6.5-chat, для корпоративного vLLM — то имя, под которым модель загружена.

Цена — нулевая. Модели Custom-провайдера всегда регистрируются с нулевой ценой (inputPrice = 0, outputPrice = 0). Платформенный биллинг такие записи пропускает — вы платите провайдеру напрямую.

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