
## Посмотреть доступные модели

`GET /v1/ai/credentials/:id/available-models`

Живой список провайдера через выбранный ключ. Модели не сохраняются. `connected` и `rowId` относятся только к этому ключу. Если список недоступен, ответ остаётся `200`: `models: []` и `unavailable` с очищенным сообщением. Модель можно [подключить по имени](./models-add.md).

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

## Параметры

| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
| `id` (path) | string | да | ID ключа из [списка](./list.md) |

## Примеры

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

```bash
curl https://vibecode.bitrix24.tech/v1/ai/credentials/cred_xyz/available-models \
  -H "X-Api-Key: YOUR_API_KEY"
```

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

```bash
curl https://vibecode.bitrix24.tech/v1/ai/credentials/cred_xyz/available-models \
  -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/cred_xyz/available-models', {
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})
const { data } = await res.json()
console.log(data)
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/ai/credentials/cred_xyz/available-models', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    Authorization: 'Bearer USER_SESSION_TOKEN',
  },
})
const { data } = await res.json()
console.log(data)
```

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

| Поле | Тип | Описание |
|---|---|---|
| `data.models[].id` | string | ID у провайдера |
| `data.models[].modelId` | string | Публичный ID `<slug>/<id>` |
| `data.models[].name` | string | Название |
| `data.models[].contextLength` | integer | Контекст в токенах. По умолчанию 4096 |
| `data.models[].maxOutputTokens` | integer / null | Максимальный ответ в токенах |
| `data.models[].capabilities` | object / null | Возможности модели |
| `data.models[].connected` | boolean | Модель уже подключена к ключу |
| `data.models[].rowId` | string / null | ID строки модели ключа, тот же `id`, что в [списке моделей ключа](./models-list.md), либо `null` |
| `data.unavailable` | object | Необязательный объект: `code` равен `provider_list_models_unavailable`, `message` очищено от ключа и адреса прокси |

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

```json
{"success":true,"data":{"models":[{"id":"gpt-4o-mini","modelId":"openai/gpt-4o-mini","name":"GPT-4o mini","contextLength":128000,"maxOutputTokens":16384,"capabilities":{"tools":true},"connected":false,"rowId":null}]}}
```

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

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

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

## Ошибки

| HTTP | Код | Описание |
|---|---|---|
| 400 | `no_key` | Ключ не содержит значения API-ключа |
| 400 | `base_url_redirect` | Провайдер вернул запрещённое перенаправление |
| 403 | `scope_missing` | `vibe:ai` |
| 404 | `not_found` | Ключ недоступен |
| 429 | `model_discovery_busy` | Другой запрос списка моделей уже выполняется |
| 429 | `model_discovery_rate_limit` | Превышена частота запросов списка моделей |
| 500 | `decryption_error` | Не удалось расшифровать ключ |

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

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

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

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

- [Добавить модель вручную](./models-add.md)
- [Загрузить каталог моделей](./fetch-models.md)
- [Список моделей ключа](./models-list.md)
