
## Получить модель

> **Ответ приходит в сыром OpenAI-формате.**
>
> Обёртки `{success, data}`, которая используется в остальных эндпоинтах Вайбкод — `/v1/deals`, `/v1/tasks` и других, — здесь нет.
>
> Так сделано для совместимости с OpenAI SDK. Если у вас единый клиент с проверкой `if (!response.success)`, добавьте для AI Router исключение.

`GET /v1/models/:modelId`

Возвращает детали одной модели по `modelId`. Используется, когда нужно проверить характеристики модели (контекст, цену, возможности) перед запросом к [`/v1/chat/completions`](/docs/ai/chat/completions). Формат ответа совместим с `GET /v1/models/:id` из OpenAI API.

## Параметры

| Параметр | Тип | Обяз. | Описание |
|----------|-----|:-----:|----------|
| `modelId` (path) | string | да | ID модели из [`GET /v1/models`](./list.md). Может содержать слэши: `openai/gpt-4o`, `bitrix/bitrixgpt-5.5`, `bitrix/openai/gpt-oss-120b`. Полный путь после `/v1/models/` рассматривается как `modelId` |

## Примеры

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

```bash
curl https://vibecode.bitrix24.tech/v1/models/bitrix/bitrixgpt-5.5 \
  -H "X-Api-Key: YOUR_API_KEY"
```

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

```bash
curl https://vibecode.bitrix24.tech/v1/models/bitrix/bitrixgpt-5.5 \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"
```

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

```javascript
const modelId = 'bitrix/bitrixgpt-5.5'
const res = await fetch(`https://vibecode.bitrix24.tech/v1/models/${modelId}`, {
  headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})

const model = await res.json()
console.log(`${model.name}: контекст ${model.context_length}, цена ${model.pricing.prompt}/${model.pricing.completion} Вайбов за 1M токенов`)
```

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

```javascript
const modelId = 'bitrix/bitrixgpt-5.5'
const res = await fetch(`https://vibecode.bitrix24.tech/v1/models/${modelId}`, {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

const model = await res.json()
console.log('Поддержка vision:', model.capabilities.vision === true)
```

## Поля ответа

| Поле | Тип | Описание |
|------|-----|----------|
| `id` | string | ID модели |
| `object` | string | Всегда `model` |
| `created` | number | Unix-timestamp регистрации в каталоге Вайбкод (`0` для платформенных) |
| `owned_by` | string | Системное имя провайдера: `bitrix`, `openai`, `anthropic`, `openrouter`, `google` и т. п. Для платформенных моделей, которые мы перепродаём, возвращается `vibecode`. |
| `name` | string | Отображаемое название модели |
| `context_length` | number | Максимальный размер контекста в токенах |
| `max_output_tokens` | number | Максимум токенов в ответе |
| `pricing.prompt` | number | Стоимость 1М токенов входа |
| `pricing.completion` | number | Стоимость 1М токенов ответа |
| `pricing.perCall` | number | Плата за вызов в Вайбах. Присутствует только когда больше `0` |
| `pricing.perMinute` | number | Плата за минуту аудио в Вайбах. Присутствует только когда больше `0` |
| `pricing.unit` | string | Единица измерения цен: `vibes` |
| `capabilities` | object | Возможности модели: `streaming`, `vision`, `reasoning`, `audio`, `transcription`, `tools`, `structured_outputs`, `embeddings` |
| `replaced_by` | string | Идентификатор модели-преемника. Присутствует только когда запрошенный id снят с публикации и его вызовы обслуживает другая модель. В этом случае `pricing` показывает цену преемника |

Так выглядит ответ для снятой с публикации модели:

```json
"pricing": { "prompt": 68.4, "completion": 342, "unit": "vibes" },
"replaced_by": "bitrix/bitrixgpt-5.5-agent"
```

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

```json
{
  "id": "bitrix/bitrixgpt-5.5",
  "object": "model",
  "created": 0,
  "owned_by": "bitrix",
  "name": "BitrixGPT 5.5 (бесплатная)",
  "context_length": 262144,
  "max_output_tokens": 65536,
  "pricing": {
    "prompt": 0,
    "completion": 0,
    "unit": "vibes"
  },
  "capabilities": {
    "streaming": true,
    "vision": true,
    "structured_outputs": true
  }
}
```

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

`404 ai_model_not_found` — модель не найдена или у ключа нет к ней доступа:

```json
{
  "error": {
    "message": "Model \"openai/gpt-4o\" not found or disabled.",
    "type": "invalid_request_error",
    "code": "ai_model_not_found"
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|----------|
| 404 | `ai_model_not_found` | Модель с таким `modelId` не существует, отключена или у ключа нет доступа |
| 403 | `scope_missing` | API-ключу не хватает скоупа `vibe:ai` |
| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |
| 401 | `INVALID_API_KEY` | Ключ не найден или отозван |
| 429 | `rate_limit_exceeded` | Превышен лимит запросов к AI-эндпоинтам. Время до сброса — в заголовке `Retry-After` |

Полный список общих ошибок API — [Ошибки](/docs/errors).

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

**`modelId` со слэшами.** Эндпоинт принимает любое количество сегментов после `/v1/models/`. Например, `GET /v1/models/bitrix/openai/gpt-oss-120b` будет прочитан как `modelId = "bitrix/openai/gpt-oss-120b"`. URL-кодировать слэши не нужно.

**Видимость как у списка.** Если модель не отображается в [`GET /v1/models`](./list.md) — запрос на `GET /v1/models/:modelId` вернёт `404`, даже если модель формально есть в каталоге платформы. Это значит, что у вашего ключа нет к ней доступа. Подключите учётные данные через [BYOK](/docs/ai/credentials/create).

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

- [Список моделей](./list.md)
- [Создать чат-комплишен](/docs/ai/chat/completions)
