Для AI-агентов: markdown этой страницы — /docs-content/ai/credentials/models-add.md индекс документации — /llms.txt

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

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

Подключает модель к ключу любого провайдера. Передайте один modelId или пакет modelIds (от 1 до 100 строк). Для ключей всех провайдеров, кроме Custom-провайдера, метаданные берутся в порядке: тело запроса → живой список → умолчания. Если список недоступен, подключение по имени работает. Для одиночного запроса к Custom-провайдеру контракт сохраняется: любая строка длиной до 200 символов, непустая после удаления пробелов по краям, метаданные тела имеют приоритет.

Требуется скоуп vibe:ai. Публичный API работает только с вашим USER-ключом. Чужой, несуществующий или PORTAL-ключ возвращает 404 not_found.

Параметры

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

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

Поле Тип Обяз. По умолч. Описание
ПолеmodelId Типstring Обяз.одиночный По умолч.— ОписаниеID модели у провайдера без префикса <slug>/. В ответе префикс добавляется. Используйте возвращённый modelId в model запроса к /v1/chat/completions
ПолеmodelIds Типstring[] Обяз.пакет По умолч.— ОписаниеОт 1 до 100 ID провайдера. Нельзя сочетать с modelId
Полеname Типstring Обяз.нет По умолч.значение modelId ОписаниеОтображаемое название модели. null использует значение по умолчанию
ПолеcontextLength Типinteger Обяз.нет По умолч.4096 ОписаниеМаксимальный размер контекста в токенах. Целое число от -2147483648 до 2147483647. null использует значение по умолчанию
ПолеmaxOutputTokens Типinteger Обяз.нет По умолч.null ОписаниеМаксимум токенов в ответе. Целое число от -2147483648 до 2147483647 или null

Примеры

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',
    name: 'MiniMax abab6.5-chat',
    contextLength: 32768,
    maxOutputTokens: 8192,
  }),
})

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

Поля ответа

Поле Тип Описание
Полеsuccess Типboolean ОписаниеВсегда true при успехе
Полеdata.id Типstring ОписаниеУникальный ID записи AiModel (нужен для удаления)
Полеdata.modelId Типstring ОписаниеЗарегистрированный modelId с префиксом провайдера <slug>/, например custom-openai-compat/
Полеdata.name Типstring ОписаниеИмя модели
Полеdata.contextLength Типinteger ОписаниеСохранённый размер контекста
Полеdata.created[] Типarray ОписаниеТолько пакетный запрос modelIds, ответ 200: подключённые модели, каждая { modelId, rowId }
Полеdata.skipped[] Типarray ОписаниеТолько пакетный запрос modelIds, ответ 200: пропущенные модели, каждая { modelId, reason }, reason равен already_connected

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

Одиночный запрос modelId, HTTP-статус 201 Created:

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

Пакетный запрос { "modelIds": ["gpt-4o-mini", "gpt-4o"] }, HTTP-статус 200 OK. Модель gpt-4o уже была подключена к ключу:

JSON
{
  "success": true,
  "data": {
    "created": [
      { "modelId": "gpt-4o-mini", "rowId": "aimodel_xyz789" }
    ],
    "skipped": [
      { "modelId": "gpt-4o", "reason": "already_connected" }
    ]
  }
}

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

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

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

Ошибки

HTTP Код Описание
HTTP400 Кодinvalid_request ОписаниеmodelId отсутствует, не является строкой, пуст после trim или исходная строка длиннее 200 символов
HTTP400 Кодinvalid_request Описаниеname задан и не является строкой или null. Сообщение указывает поле name
HTTP400 Кодinvalid_request ОписаниеcontextLength или maxOutputTokens задан и не является целым числом от -2147483648 до 2147483647 или null. Сообщение указывает неверное поле
HTTP400 Кодinvalid_request ОписаниеПереданы одновременно modelId и modelIds
HTTP400 Кодinvalid_request ОписаниеmodelIds не массив, пуст или содержит больше 100 ID
HTTP400 Кодinvalid_request ОписаниеID для провайдера, кроме Custom-провайдера, содержит символы вне [A-Za-z0-9._:/@-]
HTTP400 Кодno_key ОписаниеСохранённый ключ не содержит значения API-ключа
HTTP400 Кодbase_url_redirect ОписаниеПровайдер ответил на запрос списка моделей запрещённым перенаправлением
HTTP403 Кодscope_missing ОписаниеAPI-ключу не хватает скоупа vibe:ai
HTTP404 Кодnot_found ОписаниеКлюч с таким id не найден или не принадлежит вам
HTTP409 Кодkey_models_limit ОписаниеНа ключе получилось бы больше 1000 строк. Пакет целиком не записан
HTTP409 Кодalready_exists ОписаниеМодель с тем же modelId уже зарегистрирована для этого ключа
HTTP429 Кодmodel_discovery_busy ОписаниеДругой запрос списка моделей уже выполняется
HTTP429 Кодmodel_discovery_rate_limit ОписаниеДостигнут общий лимит 10 запросов списка моделей в минуту
HTTP500 Кодdecryption_error ОписаниеНе удалось расшифровать сохранённый ключ

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

Лимит регистрации моделей: 30 запросов в минуту. Действующее значение — в заголовке x-ratelimit-limit.

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

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

Пакетное подключение. Передайте { "modelIds": ["gpt-4o-mini", "gpt-4o"] } без modelId. Весь пакет проверяется до записи. ID для провайдеров, кроме Custom-провайдера, содержат только [A-Za-z0-9._:/@-], до 200 символов. Один снимок списка используется для всего пакета. Ответ 200: created содержит { modelId, rowId }, skipped — { modelId, reason: "already_connected" }. В пакетном ответе modelId — исходный ID провайдера. Повторы и одновременные запросы на ту же модель попадают в skipped.

На ключе не больше 1000 строк. Превышение возвращает 409 key_models_limit без частичной записи пакета. Одиночный повтор — 409 already_exists, успешный одиночный ответ остаётся 201. Новая строка наследует capabilities и reasoningControl одноимённой модели платформы. При отсутствии такой строки используются возможности из списка провайдера.

Пределы запроса списка моделей. Они общие для available-models, fetch-models и подключения: 20 секунд на все повторы и страницы, до 5 МиБ на ответ до разбора JSON, до 1000 моделей и 10 страниц. Повтор курсора останавливает обход. На один портал одновременно выполняется один такой запрос, частота — 10 в минуту. При неполном списке отсутствующие модели не переводятся в DEPRECATED.

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