LLM API в России

Языковых моделей на витрине 10, страниц у них 8: уровни одной модели показаны вместе. Первый вызов — один запрос с примерами на curl и Python.

Цены на LLM API

Цена за миллион токенов, отдельно за вход и за выход. Списывается фактический расход из поля usage ответа.

Модель Поставщик Цена от, за миллион токенов Скидка Официальная
GPT-5.6 OpenAI $0.1818 ₽ −10% $0.2
Gemini 3.6 Flash Google $1.35135 ₽ −10% $1.5
Gemini 3.7 Flash Google $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 Lunagpt/5-6-luna1 050 000 токенов18 ₽108 ₽
GPT-5.6 Terragpt/5-6-terra1 050 000 токенов180 ₽1080 ₽
GPT-5.6 Solgpt/5-6-sol1 050 000 токенов450 ₽2700 ₽
Gemini 3.6 Flashgemini/3-6-flash1 000 000 токенов135 ₽675 ₽
Gemini 3.7 Flashgemini/3-7-flash1 048 576 токенов67,5 ₽337,5 ₽
Grok 4.5grok/4-5500 000 токенов180 ₽540 ₽
Grok 4.6grok/4-6500 000 токенов180 ₽540 ₽
Claude Opus 5claude/opus-51 000 000 токенов450 ₽2250 ₽
Claude Sonnet 5claude/sonnet-51 000 000 токенов180 ₽900 ₽
Claude Fable 5claude/fable-51 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 знаков, — по нему потом видно, какая программа им пользуется.

Порядок от пустого браузера до первого ответа модели укладывается в шесть шагов.

  1. Вход. Вход в кабинет идёт через Яндекс либо по разовой ссылке из письма, и своего пароля здесь заводить не надо.
  2. Кредиты. Новому счёту при первом входе начисляются приветственные кредиты, и первые вызовы оплачиваются ими.
  3. Выпуск ключа. В кабинете нажимают выпуск ключа и получают строку, которую подставляют в свою программу.
  4. Базовый адрес. Библиотеке OpenAI базовым адресом задают https://api.gen202.com/v1, а остаток пути до метода она дописывает сама.
  5. Заголовок доступа. Запрос, собранный руками, несёт ключ в заголовке Authorization по схеме Bearer, а тело помечает типом application/json.
  6. Первый вызов. В поле 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 без вашей просьбы, потому что поставщик этот потолок не соблюдает. Когда ответ разобран, лишнее удержание тем же запросом возвращается на баланс, а обращение, оборвавшееся у поставщика, денег не стоит. Сколько ушло на каждый вызов, видно в кабинете, а из своей программы тот же расход спрашивается способом из раздела «Баланс и расход».

  1. Удержание. Перед обращением к модели часть кредитов замирает на счёте: свободный остаток уменьшается, а сам баланс стоит на месте.
  2. Оценка. Под вход откладывают по длине отправленных сообщений, а под ответ — по нижней границе шлюза.
  3. Вызов. Запрос уходит модели, и до её ответа отложенная сумма остаётся отложенной.
  4. Счёт. Из ответа берут поле usage и списывают ровно те токены, которые модель прочитала и написала.
  5. Возврат. Разницу между отложенным и потраченным возвращают на счёт тем же запросом.

Тесно поставленный потолок ответа не делает вызов дешевле. Часть работы модель пишет для себя, и эти токены поставщик считает написанными наравне с видимым текстом. При слишком низком потолке видимого текста может не остаться вовсе, хотя токены уже потрачены.

Разрыв между двумя ставками объясняется устройством работы, а не наценкой продавца. Отправленное модель прочитывает разом, а ответ выдаёт по одному куску, и каждый следующий кусок обходится ей дороже.

Что приходит в ответе на вызов текстовой модели

Ответ приходит одним объектом. Текст модели лежит в списке 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, и клиентские библиотеки выдерживают эту паузу сами.

Потолок частоты у нас считается вызовами с одного ключа за минуту, а не объёмом отправленного текста. Поэтому один длинный запрос его в одиночку не выбирает.