LLM API в России
Языковых моделей на витрине 10, страниц у них 8: уровни одной модели показаны вместе. Первый вызов — один запрос с примерами на curl и Python.
Цены на LLM API
Цена за миллион токенов, отдельно за вход и за выход. Списывается фактический расход из поля usage ответа.
| Модель | Поставщик | Цена от, за миллион токенов | Скидка | Официальная |
|---|---|---|---|---|
| GPT-5.6 | OpenAI | $0.1818 ₽ | −10% | $0.2 |
| Gemini 3.6 Flash | $1.35135 ₽ | −10% | $1.5 | |
| Gemini 3.7 Flash | $0.67567,5 ₽ | −10% | $0.75 | |
| Grok 4.5 | xAI | $1.8180 ₽ | −10% | $2 |
| Grok 4.6 | xAI | $1.8180 ₽ | −10% | $2 |
| Claude Opus 5 | Anthropic | $4.5450 ₽ | −10% | $5 |
| Claude Sonnet 5 | Anthropic | $1.8180 ₽ | −10% | $2 |
| Claude Fable 5 | Anthropic | $9900 ₽ | −10% | $10 |
Бренды языковых моделей
Языковые модели витрины сделаны компаниями: OpenAI, Google, xAI, Anthropic.
Какие языковые модели доступны по API
Языковых моделей в каталоге 10 — GPT-5.6 Luna, GPT-5.6 Terra, GPT-5.6 Sol, Gemini 3.6 Flash, Gemini 3.7 Flash, Grok 4.5, Grok 4.6, Claude Opus 5, Claude Sonnet 5 и Claude Fable 5. Сделали их OpenAI, Google, xAI и Anthropic, а вызываются они одинаково: имя нужной ставится в поле model, и остальное тело запроса от выбора не зависит.
Различаются модели ценой, размером окна контекста и тем, кто их сделал, — остальное у них общее. Поля запроса, форма ответа и перечень отказов заданы одним адресом на весь текстовый каталог, поэтому переход с одной модели на другую стоит одной строки: имя вида gpt/5-6-luna меняется на соседнее. Во сколько обходится миллион токенов у каждой, показывает таблица цен на её странице.
Часть имён — уровни одного семейства: у GPT-5.6 их 3 — Luna, Terra и Sol. Уровни живут на общей странице, потому что различает их только имя в поле model и ставка, а поля и ответ у них одни и те же; переключаются они там кнопками. Отсюда и счёт страниц: моделей 10, а страниц под ними 8.
| Модель | Имя в поле model | Окно контекста | Вход за миллион | Выход за миллион |
|---|---|---|---|---|
| GPT-5.6 Luna | gpt/5-6-luna | 1 050 000 токенов | 18 ₽ | 108 ₽ |
| GPT-5.6 Terra | gpt/5-6-terra | 1 050 000 токенов | 180 ₽ | 1080 ₽ |
| GPT-5.6 Sol | gpt/5-6-sol | 1 050 000 токенов | 450 ₽ | 2700 ₽ |
| Gemini 3.6 Flash | gemini/3-6-flash | 1 000 000 токенов | 135 ₽ | 675 ₽ |
| Gemini 3.7 Flash | gemini/3-7-flash | 1 048 576 токенов | 67,5 ₽ | 337,5 ₽ |
| Grok 4.5 | grok/4-5 | 500 000 токенов | 180 ₽ | 540 ₽ |
| Grok 4.6 | grok/4-6 | 500 000 токенов | 180 ₽ | 540 ₽ |
| Claude Opus 5 | claude/opus-5 | 1 000 000 токенов | 450 ₽ | 2250 ₽ |
| Claude Sonnet 5 | claude/sonnet-5 | 1 000 000 токенов | 180 ₽ | 900 ₽ |
| Claude Fable 5 | claude/fable-5 | 1 000 000 токенов | 900 ₽ | 4500 ₽ |
Три числа в таблице — это всё, чем строки расходятся между собой. Окно контекста — предел на то, что уходит в один запрос: и само задание, и приложенные материалы, и вся прошлая переписка. Ставки берутся раздельно, поэтому длинное задание с коротким ответом и короткое задание с длинным ответом обходятся по-разному.
Русский текст дробится на большее число токенов, чем тот же смысл по-английски. Значит, в окно одного размера русского материала помещается меньше, а миллион токенов кончается раньше. Точное число возвращает поле usage в ответе, и мерить длину надёжнее на своих текстах.
Чем вызов LLM отличается от картинок и видео
Ответ приходит на тот же запрос, которым его попросили. У изображения и ролика так не выходит: там сначала ставится задача, а потом её состояние опрашивают до готовности — этот порядок разобран в разделе «Как устроена задача». Языковой модели ждать нечего: готовый текст лежит в теле ответа, и второго обращения к шлюзу не нужно.
Форма запроса и ответа — OpenAI Chat Completions. Адрес один на все текстовые модели: POST https://api.gen202.com/v1/chat/completions, ключ уходит заголовком, на один ключ шлюз пропускает 60 запросов в минуту. Поля и разбор ответа перечислены в разделе «Текстовые модели».
Написанный клиент переезжает сменой базового адреса, потому что у нас OpenAI совместимый API. Библиотеке OpenAI в настройках задаётся https://api.gen202.com/v1 и наш ключ, после чего прежний вызов чата работает как работал: ни имена полей, ни разбор ответа править не приходится. Так и выходит OpenAI совместимый LLM API в России: программа остаётся прежней, а расчёты с поставщиком ведём мы.
Как получить API key для LLM и подставить его в код
API key для LLM выпускается в кабинете сразу после входа, и ждать одобрения заявки не приходится. Ключ один на весь каталог: им вызываются и языковые модели, и картиночные, и видеомодели. Имя ключу вы задаёте сами, длиной до 60 знаков, — по нему потом видно, какая программа им пользуется.
Порядок от пустого браузера до первого ответа модели укладывается в шесть шагов.
- Вход. Вход в кабинет идёт через Яндекс либо по разовой ссылке из письма, и своего пароля здесь заводить не надо.
- Кредиты. Новому счёту при первом входе начисляются приветственные кредиты, и первые вызовы оплачиваются ими.
- Выпуск ключа. В кабинете нажимают выпуск ключа и получают строку, которую подставляют в свою программу.
- Базовый адрес. Библиотеке OpenAI базовым адресом задают https://api.gen202.com/v1, а остаток пути до метода она дописывает сама.
- Заголовок доступа. Запрос, собранный руками, несёт ключ в заголовке Authorization по схеме Bearer, а тело помечает типом application/json.
- Первый вызов. В поле model ставят имя нужной строки каталога, в messages кладут сообщение, и текст возвращается тем же запросом.
Первый отказ чаще приходит из-за адреса или строки ключа, а не из-за выбранной модели. Адрес метода отвечает на запрос с телом, и открывать его ссылкой в браузере бесполезно. Лишний пробел по краям скопированного ключа для шлюза выглядит так же, как неверный ключ, поэтому строку сверяют целиком.
Базовый адрес пишут целиком и без косой черты на конце: лишняя черта складывается с началом пути и даёт адрес, которого на шлюзе нет. Отказ по доступу тоже не всегда про сам ключ — бывает, что программа не положила его в заголовок. Оба случая разбираются одним приёмом: тот же адрес и тот же ключ отправляют простым запросом из командной строки.
Готовый код обычно несёт поля настройки, которые вписала за вас библиотека. Такие поля шлюз принимает без отказа: до модели доходят имя записи, список сообщений и потолок ответа. Сам потолок принимается под двумя именами, max_tokens и max_completion_tokens, поэтому и его в коде править не надо. Про заголовки запроса подробнее сказано в разделе «Ключ и заголовки».
API для чат-бота: что нужно, чтобы подключить
Боту нужно ровно то же, что разовому вызову: тот же ключ и тот же базовый адрес. Отдельного согласования под бота не предусмотрено, и той же строкой ключа вызывается любая модель каталога.
Сама переписка лежит в поле messages — списком сообщений, у каждого своя роль. В system пишут указание боту, в user — реплику собеседника, в assistant — прошлые ответы модели. Между запросами шлюз ничего не помнит: модель видит ровно то, что вы положили в messages, поэтому историю разговора собирает сам бот, и с каждым запросом она отправляется заново.
Длину ответа просят полем max_tokens: целое от 1 до 128 000, а запрос без него шлюз считает просьбой на 1 024. Убедиться, что ключ и адрес работают, можно до первой строки кода — в песочнице на странице модели: она отправляет тот самый запрос, который будет слать ваш бот, и показывает, во что он обошёлся.
- Расход у бота растёт по ходу беседы сам: каждая новая реплика уносит с собой все предыдущие.
- Указание в роли system отправляется в каждом запросе, поэтому короткое указание обходится дешевле длинного.
- Под новую тему выгоднее начать разговор заново: подрезанная история оборачивается переспрашиванием, и одна работа оплачивается дважды.
Сколько сообщений держать в переписке, решает сам бот, а предел ему ставит окно контекста выбранной модели. Когда история перестаёт помещаться, старые реплики либо убирают из списка, либо заменяют одним пересказом.
Сколько стоит миллион токенов и как считается расход
Платят за токены, а не за запросы, и ставок у модели две — на вход и на выход. Дешевле всего вход у GPT-5.6 Luna: 36 кредитов за миллион токенов, это 18 ₽. Дороже всего выход у Claude Fable 5 — 9000 кредитов, или 4500 ₽. Выход стоит дороже входа у каждой модели каталога, а обе ставки сразу стоят таблицей выше.
Счёт выставляется по факту. Вместе с ответом приходит поле usage, в нём стоит число прочитанных и написанных токенов, и списывается ровно то, что там названо. Запрошенный потолок ответа на сумму не влияет: платят за токены, которые модель действительно прочитала и написала.
До ответа часть кредитов резервируется на балансе. Под вход удержание считается по длине отправленных сообщений, а под выход откладывается не меньше чем 4 000 токенов — больше, чем шлюз подставляет в max_tokens без вашей просьбы, потому что поставщик этот потолок не соблюдает. Когда ответ разобран, лишнее удержание тем же запросом возвращается на баланс, а обращение, оборвавшееся у поставщика, денег не стоит. Сколько ушло на каждый вызов, видно в кабинете, а из своей программы тот же расход спрашивается способом из раздела «Баланс и расход».
- Удержание. Перед обращением к модели часть кредитов замирает на счёте: свободный остаток уменьшается, а сам баланс стоит на месте.
- Оценка. Под вход откладывают по длине отправленных сообщений, а под ответ — по нижней границе шлюза.
- Вызов. Запрос уходит модели, и до её ответа отложенная сумма остаётся отложенной.
- Счёт. Из ответа берут поле usage и списывают ровно те токены, которые модель прочитала и написала.
- Возврат. Разницу между отложенным и потраченным возвращают на счёт тем же запросом.
Тесно поставленный потолок ответа не делает вызов дешевле. Часть работы модель пишет для себя, и эти токены поставщик считает написанными наравне с видимым текстом. При слишком низком потолке видимого текста может не остаться вовсе, хотя токены уже потрачены.
Разрыв между двумя ставками объясняется устройством работы, а не наценкой продавца. Отправленное модель прочитывает разом, а ответ выдаёт по одному куску, и каждый следующий кусок обходится ей дороже.
Что приходит в ответе на вызов текстовой модели
Ответ приходит одним объектом. Текст модели лежит в списке choices — в поле message.content его первого элемента. Рядом стоит finish_reason, и по нему видно, ответ закончился сам или упёрся в запрошенный потолок.
Второе поле, ради которого ответ разбирают, — usage. В нём три числа: prompt_tokens за прочитанное моделью, completion_tokens за написанное ею и total_tokens за оба вместе. Счёт выставляется по ним, поэтому цена вызова известна из того же ответа, что и текст.
Из программы это выглядит не так, как в чате браузера. В чате ответ печатается на экран, а здесь его разбирает ваш код: ни кнопок, ни настроек у вызова нет. Всё, чем в чате управляют мышью, здесь стоит полями тела запроса.
| Поле ответа | Что в нём лежит |
|---|---|
| choices[0].message.content | Текст, который написала модель. |
| choices[0].finish_reason | Причина остановки: stop — закончила сама, length — упёрлась в потолок. |
| usage.prompt_tokens | Сколько токенов модель прочитала. |
| usage.completion_tokens | Сколько токенов модель написала. |
| usage.total_tokens | Оба числа вместе. |
На вид оборванный ответ не отличается от законченного, поэтому поле причины смотрят и тогда, когда текст кажется целым. Дописывают такой ответ вторым вызовом, отправив в него уже полученную часть.
Есть ли бесплатные API нейросетей
Бесплатные API нейросетей у нас устроены так: ключ и доступ к каталогу ничего не стоят, а плата берётся за прошедшие через модель токены. Попробовать текстовую модель можно ещё до входа: бесплатный запрос даётся 1 раз в сутки. Отвечает на него gpt/5-6-luna, ответ доходит до 512 токенов, а сообщение принимается длиной до 500 символов.
Дальше идут приветственные кредиты: при первом входе на счёт кладётся 50 кредитов. Ими оплачиваются вызовы по обычной цене каталога, и ни выбор модели, ни длина ответа уже не ограничены. Списываются они так же, как купленные, — по числам из поля usage.
Когда приветственные кредиты кончились, работа идёт с баланса: каждый вызов мы оплачиваем поставщику, и счёт считается по фактическому расходу. Пополняется баланс рублями, готовыми пакетами на странице цен.
Что приходит при отказе
При отказе вместо текста приходит объект error, и внутри него лежат сообщение, тип и код. Форма та же, что у OpenAI, поэтому готовый клиент разбирает такой ответ сам. Таблица кодов с пояснением к каждому собрана в разделе «Отказы».
Часть отказов шлюз выносит до обращения к поставщику: неверный ключ, нехватка свободных кредитов, поле запроса вне допустимых границ. Такой ответ не стоит ничего — кредиты за него не списываются. Сюда же относится превышение частоты: сверх названного выше потолка запросы не проходят.
Вторая половина отказов приходит со стороны модели: поставщик не ответил или отбил запрос по своей загрузке. Тогда удержание снимается целиком и вызов не тарифицируется, а повторить его можно через несколько секунд.
| Ответ | Что произошло | Когда повторять |
|---|---|---|
| 400 | Тело не прочиталось, имя модели незнакомо либо поле вышло за границы. | После правки запроса |
| 401 | Ключ не назван в заголовке, неверен или отключён. | После проверки ключа |
| 402 | Свободных кредитов меньше, чем удерживается под этот вызов. | После пополнения |
| 413 | Тело запроса переросло предел в 512 КиБ. | После правки запроса |
| 415 | В заголовке типа содержимого не назван application/json. | После правки заголовка |
| 429 | С одного ключа за минуту ушло больше 60 вызовов. | Через минуту |
| 502 | Ответ поставщика не разобрался или запрос до него не дошёл. | Сразу |
| 503 | Поставщик перегружен или отбил вызов своим лимитом. | По сроку из Retry-After |
Повторять имеет смысл не всякий отказ, и число ответа говорит, какой это случай. Деньги, разбор запроса и загрузка поставщика разведены по разным числам, поэтому причину не приходится искать перебором. На перегрузке срок повтора назван заголовком Retry-After, и клиентские библиотеки выдерживают эту паузу сами.
Потолок частоты у нас считается вызовами с одного ключа за минуту, а не объёмом отправленного текста. Поэтому один длинный запрос его в одиночку не выбирает.