> ## Documentation Index
> Fetch the complete documentation index at: https://speshu.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Модели и цены

> Как получить каталог моделей, выбрать модель и узнать цену

Как выбрать модель под задачу: где взять актуальный список, как по нему фильтровать и на что смотреть. Формат полей и параметры запроса разобраны в [Каталоге моделей](/docs/api-reference/models/list) и [Каталоге медиа-моделей](/docs/api-reference/media/models).

## Каталог — источник истины

Единственный правильный способ узнать, какие модели доступны, — запросить каталог:

```bash cURL theme={null} theme={null}
curl https://speshu.ai/api/v1/models
```

<Warning>
  Не зашивайте список моделей в код. Состав каталога меняется: модели появляются, уходят и отключаются, а идентификаторы переименовываются. Список, зашитый в код, устареет молча — запросы начнут падать с `404 model_not_found`. Берите идентификаторы из ответа каталога каждый раз.
</Warning>

## Идентификаторы

Значение поля `id` из ответа передаётся в запрос как есть, в поле `model`. Не добавляйте префикс и не убирайте его — берите ровно то, что вернул каталог, вместе с регистром и со слэшем в именах вида `группа/имя`.

Если идентификатор неизвестен API, приходит `404` с кодом `model_not_found`.

Идентификаторы со временем меняются, поэтому разрешайте их динамически, а не константой в конфиге. Полный формат ответа — в разделе [Каталог моделей](/docs/api-reference/models/list).

## Состав каталога

В `GET /api/v1/models` попадают только включённые платные текстовые модели. Отключённые и бесплатные модели не помечаются флагом, а отсутствуют в выдаче целиком — отсутствие модели в каталоге само по себе ничего не значит, кроме того, что её сейчас нельзя вызвать.

Модели генерации изображений, видео, аудио и музыки в этом эндпоинте не живут. За ними идите в `GET /api/v1/media/models`.

## Ответ

```json theme={null} theme={null}
{
  "object": "list",
  "data": [
    {
      "id": "gpt-4o",
      "object": "model",
      "created": 1715367049,
      "owned_by": "openai",
      "title": "GPT-4o",
      "context_length": 128000,
      "cost_context": "150.00",
      "cost_completion": "600.00",
      "currency": "RUB"
    }
  ]
}
```

| Поле | Что это |
| - | - |
| `id` | То, что вы отправляете в поле `model` |
| `title` | Название для показа человеку |
| `owned_by` | Провайдер модели |
| `context_length` | Размер контекстного окна в токенах |
| `cost_context` | Цена за миллион входных токенов, десятичной строкой |
| `cost_completion` | Цена за миллион выходных токенов, десятичной строкой |
| `currency` | Валюта цен, обычно `RUB` |
| `created` | Unix-время в секундах: когда модель появилась в каталоге |

`context_length` — не справочное значение. API сверяет с ним длину запроса до отправки: если входные токены плюс зарезервированный выход в окно не помещаются, приходит `422 content_too_large`.

## Аутентификация здесь необязательна

Каталог открыт без ключа: без него вернутся базовые цены, с ключом — цены вашего аккаунта. Использовать эндпоинт из публичного фронтенда безопасно.

```bash cURL theme={null} theme={null}
# базовые цены
curl https://speshu.ai/api/v1/models

# цены вашего аккаунта
curl https://speshu.ai/api/v1/models \
  -H "Authorization: Bearer $SPESHU_API_KEY"
```

Как получить ключ — на странице [Аутентификация](/docs/authentication).

## Медиа-модели

Каталог генерации медиа живёт отдельно:

```bash cURL theme={null} theme={null}
curl https://speshu.ai/api/v1/media/models
```

Он тоже не требует ключа. Для каждой модели отдаёт `media_type` (`image`, `video` или `audio`), полную `input_schema` — авторитетное описание принимаемых параметров, соответствующее запущенной версии API — и поле `pricing` с ценами.

<Note>
  Читайте параметры и цены любой медиа-модели из этого ответа, а не из таблиц документации: `input_schema` всегда соответствует текущей версии API, а документация обновляется не одновременно с ним.
</Note>

<CardGroup cols={3}>
  <Card title="Изображения" icon="image" href="/docs/api-reference/media/image-models">
    Генерация, редактирование, апскейл
  </Card>

  <Card title="Видео" icon="video" href="/docs/api-reference/media/video-models">
    Генерация видео и работа с кадром
  </Card>

  <Card title="Аудио и музыка" icon="music" href="/docs/api-reference/media/audio-models">
    Речь, звуки и музыка
  </Card>
</CardGroup>

## Фильтрация каталога

### Самая дешёвая модель со зрением

Зрение — это возможность принять блок `image_url` в запросе. Сами по себе каталог и фильтр по нему её не проверяют: попытка отправить изображение модели без зрения вернёт `400 invalid_request`. Отбор по названию или известности модели — эвристика, а не проверка.

```bash cURL theme={null} theme={null}
curl -s https://speshu.ai/api/v1/models \
  | jq '[.data[]
      | select((.title | ascii_downcase) | test("vision|4o|sonnet|gemini"))
      | {id, cost_completion}] \
    | sort_by(.cost_completion | tonumber) \
    | .[0]'
```

### Модель с наибольшим контекстным окном

```bash cURL theme={null} theme={null}
curl -s https://speshu.ai/api/v1/models \
  | jq '[.data[]] | sort_by(.context_length) | reverse | .[0] \
    | {id, context_length}'
```

### Самая дешёвая модель для изображений

```bash cURL theme={null} theme={null}
curl -s https://speshu.ai/api/v1/media/models \
  | jq '[.data[]
      | select(.media_type == "image" and .pricing.type == "fixed")
      | {id, title, price: .pricing.tiers[0].price}]
    | sort_by(.price | tonumber) | .[0]'
```

<Info>
  Фильтр берёт модели с фиксированной ценой: у моделей, тарифицируемых по параметрам и по единице, структура в `tiers` другая, и сравнивать их по `tiers[0].price` нельзя. Полную картину по всем трём типам смотрите в `pricing` — разбор в [каталоге медиа-моделей](/docs/api-reference/media/models).
</Info>

То же самое на `Python`:

```python Python theme={null} theme={null}
import requests
from decimal import Decimal

BASE = "https://speshu.ai/api/v1"

# модель с наибольшим контекстным окном
models = requests.get(f"{BASE}/models", timeout=30).json()["data"]
widest = max(models, key=lambda m: m["context_length"])
print(widest["id"], widest["context_length"])

# самая дешёвая модель для изображений
media = requests.get(f"{BASE}/media/models", timeout=30).json()["data"]
images = [
    m for m in media
    if m["media_type"] == "image" and m["pricing"]["type"] == "fixed"
]
cheapest = min(images, key=lambda m: Decimal(m["pricing"]["tiers"][0]["price"]))
print(cheapest["id"], cheapest["pricing"]["tiers"][0]["price"], "₽")
```

## Как выбирать

Ориентируйтесь на четыре критерия, проверяя их в таком порядке.

**Контекстное окно против самого длинного входа.** Возьмите самый большой реальный запрос из вашей нагрузки — длинный документ, большой диалог, объединённый контекст — и сравните его длину в токенах с `context_length`. Модели, у которых окно меньше, отпадают сразу, до разбора остальных критериев.

**Зрение**, если вы отправляете изображения. Модель без него отвергнет запрос с `400 invalid_request` целиком, а не проигнорирует картинку.

**Возможности: инструменты, структурированный вывод, рассуждение.** Все три включаются параметрами запроса, и поддержка у модели неодинаковая. Проверяйте на ваших данных: неверно разобранный по схеме JSON и потерянный вызов инструмента обходятся дороже, чем лишний токен.

**Цена за миллион токенов.** Сравнивайте по той валюте, в которой реально платите, и по обеим сторонам: `cost_context` и `cost_completion`. Для рассуждающих моделей смотрите на выходные токены — они там дороже всего и растут вместе с `effort`. Подробности — в [гайде по токенам рассуждений](/docs/gaidy/reasoning-tokens).

<Info>
  Бенчмарк одной модели не переносится на вашу нагрузку: она состоит из ваших промптов, вашего формата данных и вашего критерия «хорошо». Прогоните две-три кандидатуры на представительной выборке своих запросов и сравните качество вместе со счётом — расхождение между ними обычно больше, чем разница цен.
</Info>

## Что дальше

<CardGroup cols={2}>
  <Card title="Каталог моделей" icon="microchip" href="/docs/api-reference/models/list">
    Формат ответа и цены за миллион токенов
  </Card>

  <Card title="Каталог медиа-моделей" icon="boxes-stacked" href="/docs/api-reference/media/models">
    Схемы параметров и тарифы генерации
  </Card>

  <Card title="Запрос чату" icon="message" href="/docs/api-reference/chat/completions">
    Отправить выбранную модель в чат
  </Card>

  <Card title="Тарификация и оплата" icon="wallet" href="/docs/billing">
    Как считается стоимость и списываются деньги
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.