Это API-направление проекта aiokno Готовый автоответчик для бизнеса

документация

Справочник aiokno API

Всё, что нужно для интеграции: быстрый старт, модель и имена, цены и резерв, уровни размышления, совместимость с OpenAI-контрактом, лимиты и коды ошибок. Формат — OpenAI-совместимый Chat Completions: работает любой SDK, где меняются base_url и ключ.

быстрый старт

Первый запрос — за минуту

Зарегистрируйтесь, создайте ключ в разделе «API и токены» и подставьте его в пример. Ключ показывается один раз — сохраните сразу.

curl https://aiokno.ru/api/v1/chat/completions \
  -H "Authorization: Bearer sk-aiokno-ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "aiokno-standard",
    "messages": [{"role": "user", "content": "Сколько идёт доставка до Казани?"}],
    "max_tokens": 500
  }'

Python — через официальный клиент OpenAI

from openai import OpenAI

client = OpenAI(
    api_key="sk-aiokno-ВАШ_КЛЮЧ",
    base_url="https://aiokno.ru/api/v1",
)

answer = client.chat.completions.create(
    model="aiokno-standard",
    messages=[{"role": "user", "content": "Сколько идёт доставка до Казани?"}],
    max_tokens=500,
)
print(answer.choices[0].message.content)

Библиотека обращается к base_url + /chat/completions, поэтому адрес совпадает с нашим эндпоинтом. Node.js и любой другой OpenAI-совместимый клиент настраиваются так же: меняются только ключ и базовый адрес.

модели

Одна модель, несколько имён

Имя в запросеЧто это
aiokno-standard Рекомендуемое имя. За ним закреплена текущая модель проекта: если мы её обновим, менять код не придётся.
qwen3.8-27b-fp8 Техническое имя той же модели на сегодня.
qwen3.6-27b-fp8 Прежнее имя модели. Продолжает работать и ведёт на текущую модель — код, написанный до обновления, менять не нужно.

Контекст — 262 144 токена. Любое другое имя вернёт ошибку 400 invalid_model.

Каталог моделей — GET /api/v1/models

Эндпоинт живой и требует тот же ключ, что и запросы к модели. Первым элементом data идёт техническое имя текущей модели, за ним — её синонимы из таблицы выше; клиенты, которые берут data[0] как модель по умолчанию, попадут в актуальную. Без ключа или с отозванным ключом придёт 401 invalid_api_key. В коде удобнее оставить постоянное aiokno-standard — оно переживает смену модели.

curl https://aiokno.ru/api/v1/models \
  -H "Authorization: Bearer sk-aiokno-ВАШ_КЛЮЧ"
# Тот же клиент OpenAI, что и в быстром старте
for model in client.models.list().data:
    print(model.id)   # qwen3.8-27b-fp8, aiokno-standard, qwen3.6-27b-fp8

цены

Только за то, что реально использовано

Расход считает наш сервер по полю usage из ответа модели, сумма округляется вверх до копейки на каждом запросе. Пример: запрос на 2 000 входных токенов с ответом на 500 выходных стоит 2000×20/1e6 + 500×160/1e6 = 0,12 ₽. Тысяча таких запросов — около 120 ₽.

Как удерживаются деньги

На время запроса мы резервируем максимально возможную его стоимость — оценку именно этого запроса, а не какую-то фиксированную сумму. Сразу после ответа неиспользованный остаток возвращается на баланс, и списывается только фактическая стоимость. Считается резерв так:

резерв = (байты тела + 8192 × число картинок) × 20 ₽/млн
       + max_tokens × 160 ₽/млн            ← округление вверх до копейки

Байты тела берутся как верхняя граница входных токенов («каждый токен весит хотя бы байт»), поэтому у запроса без картинок потолок резерва задаёт тип ключа:

Тип ключаРезерв на один запрос без картинокРекомендуемый запас
Обычный API до 8,45 ₽ — предельный запрос: тело 256 КБ, ответ 20 000 токенов от 300 ₽
Агент (aiokno Code) до 52,19 ₽ — предельный запрос: тело 2 МБ, ответ 64 000 токенов от 1 000 ₽

Картинки считаются сверх этих чисел. Оценка «токенов не больше, чем байт» на изображениях не работает, поэтому на каждую часть image_url резерв закладывает 8192 входных токенов — это +0,16 ₽ к резерву за картинку, сверх потолка строки таблицы. Числа в таблице — потолок запроса без картинок; картинок в запросе не больше восьми, поэтому потолок с ними — те же числа плюс ≈1,3 ₽. Лишнее возвращается после расчёта: списывается фактический usage, а он у мелкой картинки — десятки токенов (см. лимиты).

Полные 52 ₽ агент занимает только на предельном запросе. Короткий запрос резервирует копейки: max_tokens: 1 на маленьком теле — ровно 1 копейку, и именно это число придёт в required_kopecks. А запрос без max_tokens берёт потолок 20 000 токенов и резервирует ≈3,21 ₽ — это и есть minHoldKopecks, которое показывает кабинет: сколько нужно иметь на балансе, чтобы начался запрос, не назвавший длину ответа. Если max_tokens не передан, берётся 20 000 даже для ключа «Агент».

Из этого следуют две вещи, о которых лучше знать заранее. Во-первых, при балансе меньше резерва запрос вернёт 402, даже если по факту стоил бы дешевле: точные числа приходят в теле ошибки — required_kopecks (сколько нужно зарезервировать под этот запрос) и balance_kopecks (сколько есть), обе величины в копейках. Во-вторых, каждый запрос «в полёте» держит свою долю баланса, поэтому запас должен покрывать все одновременные резервы сразу. Сколько запросов идёт параллельно, задаёт не баланс, а лимит одновременных запросов: 2 на обычный ключ, 4 на ключ «Агент» и 6 на аккаунт.

Остаток не нужно запрашивать отдельно: непотоковый ответ, за который списаны деньги, несёт заголовок X-Aiokno-Balance-Kopecks — баланс в копейках уже после списания. У успешного ответа, за который денег не сняли, заголовка нет: это запрос, покрытый дневным лимитом подписки. Отказ 402 заголовок несёт — в нём баланс до отказа, тот же, что в поле balance_kopecks тела. Идемпотентный повтор обычно несёт заголовок с балансом на момент повтора; у повтора, догнавшего ещё не завершившийся первый запрос, заголовка может не быть. В потоковом режиме заголовка может не быть.

Кэш начала запроса — и сколько он живёт

Когда начало запроса повторяется (системная подсказка, инструкция, неизменный длинный контекст), сервер модели берёт его из кэша, и такие токены считаются по цене кэша — в 10 раз дешевле обычного входа. Сколько токенов попало в кэш, видно в ответе — usage.prompt_tokens_details.cached_tokens.

Срока хранения у кэша нет. Он живёт в памяти сервера модели и обнуляется при её перезапуске или обновлении, а записи вытесняются новыми. Повтор в пределах одной сессии сервера — попадание (на длинном префиксе замерено 96 % токенов из кэша), повтор через неделю или после рестарта — полная цена входа. Считайте кэш скидкой, а не обещанной ценой: бюджет планируйте по полной ставке входа.

Кэш изолирован по аккаунту. Сервер подмешивает к каждому запросу невидимую соль, свою у каждого аккаунта: все ключи одного аккаунта греют общий кэш и пользуются им, а в чужой попасть нельзя. Поэтому по cached_tokens невозможно узнать, присылал ли похожий текст кто-то ещё.

Подписка (по промокоду)

Кроме оплаты по токенам есть подписка: N токенов в день бесплатно, где N и срок действия зашиты в выданный вам промокод. Публичной цены у подписки пока нет — её выдаёт оператор, активируется она тем же полем «Промокод» в кабинете, и там же видно, сколько токенов осталось на сегодня.

Пока дневной лимит не исчерпан, запросы идут без денежного резерва: баланс не трогается и 402 по резерву не приходит. Лимит мягкий — последний запрос дня может перескочить его своим фактическим расходом. После этого запросы в тот же день автоматически оплачиваются с баланса по обычным ценам. Счётчик обнуляется в полночь UTC (03:00 по Москве).

Пополнение — пока вручную

Приём оплаты картой ещё не подключён. Баланс зачисляет оператор: напишите в Telegram или на почту — обычно подтверждаем в течение рабочего дня. Баланс на аккаунте один: с него оплачивается и API, и тариф программы.

уровни размышления

Модель умеет думать перед ответом — вы решаете, сколько

Поле reasoning_effort управляет внутренним рассуждением модели. По умолчанию оно выключено — ответ приходит сразу и дешевле. Включите уровень — и модель сначала разберёт задачу по шагам: ход рассуждения вернётся в отдельном поле reasoning, а чистый ответ — как обычно в content.

reasoning_effortЧто происходитКогда выбирать
none (по умолчанию) Без размышления — модель отвечает сразу Чат-боты, классификация, извлечение данных, короткие ответы
low Короткая прикидка перед ответом Простая математика, проверка условий
medium Развёрнутый разбор задачи Многошаговые задачи, анализ текста
high Максимальное усилие (наибольший объём рассуждения) Сложная логика, код, планирование
answer = client.chat.completions.create(
    model="aiokno-standard",
    messages=[{"role": "user", "content": "Реши: у поезда 9 вагонов..."}],
    reasoning_effort="medium",
    max_tokens=4000,
)
print(answer.choices[0].message.reasoning)  # ход рассуждения
print(answer.choices[0].message.content)    # чистый ответ

Как это тарифицируется. Токены размышления — обычные выходные токены (160 ₽ за миллион): они входят в usage.completion_tokens и ограничены вашим max_tokens вместе с ответом. Отсюда практическое правило: с включённым размышлением ставьте max_tokens с запасом (от 2 000) — если бюджета не хватит, модель потратит его на рассуждение и вернёт пустой content с finish_reason: "length". Значение вне списка вернёт 400 invalid_reasoning_effort — до списания.

совместимость

Что из OpenAI-контракта работает

Таблица собрана внешней приёмкой на живом шлюзе 6 сентября 2026: каждая строка — выполненный запрос, а не намерение. Где поведение менялось в тот же день, это отмечено в строке.

ВозможностьКак ведёт себя
tools — вызов функцийодин и несколько вызовов за ответ, дельты в потоке, ответ инструмента обратно в истории (role: "tool")
tool_choiceauto, none, required и именованная функция. required и именованный выбор принуждают вызов с 6 сентября 2026 — до этого модель могла ответить текстом
response_formatjson_object и json_schema
logprobs, top_logprobsвозвращаются
stopстрока и массив строк
seed, temperature, top_p, presence_penalty, frequency_penalty, logit_biasпринимаются; при temperature: 0 и одном seed ответы совпадают
streamSSE как у OpenAI; рассуждение тоже приходит дельтами, в том числе вместе с вызовами функций
Картинки (image_url)только data:-URI (base64 в теле): принимаются, тарифицируются как входные токены, не больше 8 на запрос. Внешняя ссылка — 400. Резерв — в лимитах
Длинный контекстпроверено до 60 000 входных токенов в одном запросе; выше упирается в размер тела

Не поддержано: embeddings, генерация изображений (/v1/images/generations), Responses API, старый /v1/completions, несколько вариантов ответа (n, best_of), выбор из нескольких моделей и звук с видео на вход (audio_url, video_url, input_audio — модель текстово-зрительная, такие части возвращают 400).

лимиты

Границы, в которых работает шлюз

ЧтоЗначение
Размер тела запросадо 256 КБ; ключ «Агент» — до 2 МБ. Больше — 413
Длина ответаmax_tokens или max_completion_tokens до 20 000; ключ «Агент» — до 64 000. Не передали — берётся 20 000. Значение — целое ≥ 1, иначе 400
Частота120 запросов в минуту с одного IP-адреса
Ключей на аккаунтдо 10 активных одновременно
Каталог моделейGET /api/v1/models с тем же ключом — см. раздел «Модели»
Повтор запроса без двойного списаниязаголовок Idempotency-Key, см. ниже
Контекст модели262 144 токена
Время ожидания ответадо 25 минут (долгая генерация с рассуждением); в потоковом режиме первые токены приходят сразу
Потоковая передача (stream)поддерживается: stream: true отдаёт ответ по мере генерации (SSE, как у OpenAI). usage приходит ровно один раз — в финальном чанке с пустым choices: [], и только если передать stream_options: {"include_usage": true}. Контентные чанки поля usage не несут: суммировать их не нужно и нечего
Рассуждения (reasoning)по умолчанию выключены; включаются полем reasoning_effort
Несколько вариантов (n, best_of)всегда один ответ
Картинки на входпринимаются в поле image_url только как data:-URI и не больше 8 частей на запрос (считаются по всему телу, вместе с историей); списываются по факту, резервируются с запасом — см. абзац «Про картинки» под таблицей

Про длину ответа. Модель выдаёт около 60 токенов в секунду, потолок ожидания — 25 минут, так что максимальные 20 000 токенов ответа успевают сгенерироваться с запасом. Для долгих ответов удобнее stream: true — текст приходит по мере генерации. Обрыв оплачивается по тому, что модель успела сгенерировать к моменту, когда шлюз узнал о разрыве. Разрыв — это закрытие соединения клиентом: через край сети он доходит до шлюза за 1–2 секунды, то есть плюс до ~100 токенов сверх прочитанного (замер 7 сентября 2026: 23 токена напрямую, 91 через край). Если клиент просто перестал читать поток, не закрыв соединение, модель догенерирует ответ до конца или до max_tokens — и это будет списано целиком.

Про пустой ответ. Без режима рассуждения модель иногда завершала ответ первым же токеном: 200, finish_reason: stop, пустой content и одна копейка за ничего. С 8 сентября 2026 шлюз всегда передаёт модели min_tokens (по умолчанию 2, ваше значение уважается, но не больше max_tokens) — первый токен не может быть концом ответа. Если пустой ответ всё же пришёл, пришлите X-Request-Id.

Про счётчики. max_tokens, max_completion_tokens и n обязаны быть целыми числами не меньше 1. Ноль, дробь, строка и отрицательное значение возвращают 400 invalid_request_error — до того, как с баланса что-то резервируется. Отсутствующее поле и явный null по-прежнему означают «не задано»: тогда берётся 20 000 токенов — в том числе для ключа «Агент», его 64 000 нужно попросить явно.

Про картинки. Изображение передаётся частью image_url и только как data:image/…;base64,… строго в нижнем регистре (DATA:, IMAGE/, BASE64400) (base64 прямо в теле запроса): ссылку на внешний адрес шлюз отклоняет 400 invalid_request_error — до резерва и до вызова модели. Картинок в одном запросе — не больше 8, и считаются они по всему телу, вместе с историей переписки; девятая — тоже 400. Списывается изображение по факту, из usage: замер приёмки 6 сентября 2026 — +66 входных токенов на картинку, одинаково для 1×1, 64×64 и 256×256; более крупные не измерялись и могут стоить дороже. Резерв заранее факт не знает, поэтому закладывает 8 192 входных токенов на каждую часть image_url (≈0,16 ₽) и возвращает лишнее после расчёта. Этот запас идёт сверх потолков из раздела «Цены»: предельные восемь картинок поднимают резерв примерно на 1,3 ₽.

Про размер запроса. Контекст модели — 262 144 токена, но тело запроса обычного ключа ограничено 256 КБ (ключ типа «Агент» — 2 МБ), поэтому реально в запрос помещается меньше. Тело больше потолка возвращает 413 payload_too_large — с телом ошибки и заголовком X-Request-Id, на любом превышении, вплоть до нескольких байт за границей.

Текущее состояние сервисов — на странице статуса. Частота считается по IP-адресу, а не по ключу: несколько ключей с одного сервера делят общий лимит. При превышении приходит 429 с заголовком Retry-After — повторяйте с экспоненциальной задержкой. Тот же 429 приходит и на слишком много одновременных запросов: по одному ключу — 2 (обычный) и 4 («Агент»), и не больше 6 на аккаунт; деньги при этом не списываются.

Поля запроса, которые сервер меняет сам

Несколько полей OpenAI-контракта сервер обрабатывает сам. Ошибку они не вызывают — запрос выполняется без них:

  • chat_template, mm_processor_kwargs, prompt, echo, documentsвырезаются молча: сборку промпта на сервере мы наружу не отдаём.
  • n и best_of — приводятся к одному варианту ответа (сам n при этом обязан быть целым ≥ 1, иначе 400).
  • max_tokens и max_completion_tokens — зажимаются в потолок вашего ключа; если переданы оба, берётся меньшее.
  • cache_salt — серверный: именно он разделяет кэш между аккаунтами.
  • stream_options — в потоке сервер сам включает подсчёт usage (иначе нечем подтвердить списание при обрыве), но usage-чанк приходит вам, только если вы попросили его сами.

Поля управления шаблоном add_generation_prompt и continue_final_message отвергает сама модель — 400 invalid_request_error.

Повтор запроса без двойного списания — Idempotency-Key

OpenAI-совместимые SDK сами повторяют POST на 408, 429 и 5xx. Если первый запрос успел сгенерироваться и списаться, а ответ до вас не дошёл, «безопасный» повтор запустил бы вторую генерацию и второе списание. Чтобы этого не случилось, передайте свой уникальный идентификатор запроса в заголовке Idempotency-Key.

curl https://aiokno.ru/api/v1/chat/completions \
  -H "Authorization: Bearer sk-aiokno-ВАШ_КЛЮЧ" \
  -H "Idempotency-Key: 8f14e45f-ea0b-4c1e-9f8a-0b7c2f1d3e55" \
  -H "Content-Type: application/json" \
  -d '{"model":"aiokno-standard","messages":[{"role":"user","content":"Привет!"}]}'
  • Заголовок необязателен — без него всё работает как раньше.
  • Действует только на непотоковые запросы: поток не переигрывается.
  • Запоминаются только успешные ответы, и живут они 24 часа; после этого тот же ключ снова считается новым.
  • Повтор с тем же ключом отдаёт сохранённый ответ бесплатно и помечает его заголовком Idempotent-Replay: true; в X-Request-Id при этом приходит идентификатор первого запроса — по нему и ищется списание.
  • Один ключ — один запрос: тот же ключ с другим телом вернёт 422 idempotency_key_reuse, а не чужой ответ. Генерируйте новый идентификатор на каждый логически новый вызов.
  • Область действия — аккаунт, а не отдельный API-ключ: тот же Idempotency-Key с другим ключом того же аккаунта отдаст сохранённый ответ и не спишет деньги повторно (замена ключа посреди ретраев не должна приводить ко второй генерации). У другого аккаунта тот же идентификатор независим — чужой ответ не отдаётся никогда.
  • Пока первый запрос с этим ключом ещё выполняется, второй получит 409 idempotency_in_progress с Retry-After — дождитесь ответа вместо параллельного повтора.
  • Длина ключа — до 255 символов, иначе 400 invalid_request_error; нижней границы нет, но берите UUID — короткий идентификатор легко столкнётся с вашим же прошлым запросом.

коды ошибок

Что означает ответ и что с ним делать

Все ошибки приходят в привычном виде {"error":{"code":"…","message":"…"}}. На каждом ответе шлюза — и успешном, и ошибочном — есть заголовок X-Request-Id: назовите его в обращении, и мы найдём запрос в логах. Заголовок ставится в самом начале обработки, поэтому он есть и там, куда запрос не дошёл: 404 на несуществующий путь, 405 на неверный метод, 429 от ограничителя частоты. Единственное исключение — редкий обрыв соединения между краем сети и шлюзом: тогда приходит голый 502 без нашего формата и без заголовка. Денег такой ответ не списывает (списывать нечего — usage нет), запрос можно повторить.

КодЧто означаетЧто делать
401 invalid_api_keyКлюч отсутствует, отозван или не начинается с sk-aiokno-Создать новый ключ в кабинете
402 insufficient_balanceНа балансе меньше, чем требуется зарезервировать. В теле — точные числа: required_kopecks и balance_kopecksПополнить баланс (см. раздел «Цены»)
400 invalid_modelЗапрошена неизвестная модельИспользовать aiokno-standard
400 invalid_request_errorТело — не JSON-объект, либо модель отвергла параметры (роль, top_p, отсутствующий messages)Поправить тело запроса. Повтор без изменений не поможет
413 payload_too_largeТело больше 256 КБ; для ключа «Агент» — больше 2 МБ. Приходит с телом ошибки и X-Request-Id на любом превышении, вплоть до нескольких байт за границейСократить историю сообщений
400 invalid_reasoning_effortreasoning_effort вне списка none/low/medium/highВзять значение из таблицы уровней. Деньги не списываются
409 too_many_keysУже 10 активных ключей на аккаунтОтозвать ненужный ключ в кабинете
422 idempotency_key_reuseПрисланный Idempotency-Key уже использован с ДРУГИМ телом запроса — чужой ответ мы не отдаёмВзять новый ключ. Повтор без изменений не поможет
409 idempotency_in_progressЗапрос с этим Idempotency-Key ещё выполняетсяПодождать Retry-After секунд и повторить
503 server_misconfiguredСервер модели не настроенНаписать нам, это на нашей стороне
429 rate_limit_exceededЛибо слишком часто с одного адреса (по умолчанию 120 запросов в минуту), либо слишком много запросов на ключ одновременно, либо модель перегруженаПодождать Retry-After секунд. Деньги не списываются
502 upstream_unavailableСбой на НАШЕЙ стороне: недоступен бэкенд модели (туннель, ключ сервера, имя модели)Повторить позже — сначала загляните на страницу статуса. Деньги не списываются, тело запроса менять не нужно
504 upstream_timeoutМодель не уложилась во время ожиданияПовторить, а если ответ длинный — уменьшить max_tokens. Деньги не списываются
502 upstream_errorМодель не ответила либо ответила неразборчиво — без блока usage списывать нечегоПовторить; если повторяется — проверить статус сервисов. Деньги не списываются
503 server_unavailableВременно недоступно хранилищеПовторить позже; текущее состояние — на странице статуса

Ошибки кабинета — другой формат

Эндпоинты кабинета (/api/account/*: вход, ключи, баланс, промокоды) обслуживают сам сайт и отвечают плоской строкой {"error":"код"} — без вложенного объекта, как у шлюза. Неизвестные поля тела они игнорируют; создание ключа отвечает 201 Created. Частые коды:

ОтветКогда приходит
401 unauthenticatedнет сессии кабинета или она истекла
401 invalid_credentialsневерная пара почта / пароль
400 invalid_jsonтело не разобралось как JSON
400 invalid_requestобязательное поле тела отсутствует или пусто — например, newPassword у /password-set и /password-change
415 unsupported_media_typeтело прислано без Content-Type: application/json
400 consent_requiredрегистрация без согласия на обработку данных
400 invalid_email, 409 email_takenадрес не разобран или уже занят
400 weak_passwordпароль короче 8 или длиннее 200 символов
409 password_already_set/password-set нужен аккаунту без пароля (вход через Telegram); когда пароль уже есть, его меняют через /password-change. Поле нового пароля в обоих — newPassword
400 invalid_scopeтип ключа не api и не agent
409 too_many_keysуже 10 активных ключей на аккаунте; выдача ключей идёт по своему бюджету, поэтому потолок достижим подряд, без пауз
404 not_foundотзыв чужого или уже отозванного ключа
400 invalid_code, 409 already_redeemed, 410 expiredпромокод не найден, уже активирован или просрочен
429 rate_limitedслишком часто: вход и регистрация — 20 попыток за 10 минут с адреса, создание ключей — 30 за 10 минут на аккаунт. Ответ несёт Retry-After и поле retryAfterSeconds
503 storage_unavailableбаза кабинета временно недоступна

границы раннего доступа

Что мы обещаем и чего пока не обещаем

Обещаем

  • Ключ выдаётся сразу, без ожидания
  • Вызов функций (tools) и картинки на вход
  • Списание — по usage из ответа модели
  • При ошибке модели деньги не списываются
  • Запросы обрабатываются в России
  • X-Request-Id для разбора любого списания

Пока не обещаем

  • Соглашение об уровне сервиса (SLA)
  • Выбор из нескольких моделей
  • Генерация изображений
  • Оплата картой без участия оператора
  • Круглосуточная поддержка

Данные запросов

Текст запроса уходит на наш сервер в России — иначе модель не сможет ответить. Мы не используем ваши запросы для обучения. При этом сервер модели ведёт технический журнал, поэтому не отправляйте в API персональные данные и секреты, пока мы не закроем этот пункт отдельно.

вопросы по интеграции

Коротко о главном

Подойдёт ли мой код, написанный под OpenAI?

Да, если он использует Chat Completions. Достаточно поменять api_key и base_url на https://aiokno.ru/api/v1.

Работает: вызов функций (tools, tool_choice — auto, required и по имени), картинки на вход (image_url с data:-URI), response_format (включая json_schema), seed, stop, logprobs, штрафы и temperature/top_p.

Не сработает: embeddings, генерация изображений (/v1/images/generations), Responses API и старый /v1/completions. Построчно проверенная таблица — в разделе «Совместимость».

Почему пришёл 402, если на балансе есть деньги?

Перед запросом резервируется максимально возможная стоимость этого запроса: вход по размеру тела плюс max_tokens по цене вывода. Запрос без max_tokens берёт потолок 20 000 токенов и резервирует ≈3,21 ₽; предельный запрос без картинок — 8,45 ₽ у обычного ключа и 52,19 ₽ у ключа «Агент», а каждая часть image_url добавляет к резерву ещё ≈0,16 ₽ сверх этих чисел. Если баланса не хватает на резерв, запрос отклоняется, даже когда по факту он стоил бы дешевле; сколько именно нужно на этот запрос, видно в теле ответа — required_kopecks и balance_kopecks. Пополните баланс: рекомендуемый запас — от 300 ₽ для обычного ключа и от 1 000 ₽ для агента. Разбор резерва — в разделе «Цены».

Как посчитать расход самостоятельно?

В ответе есть блок usage с числом входных и выходных токенов. Умножьте их на цены из раздела «Цены». В личном кабинете тот же расход показывается по дням, там же виден остаток баланса.

Что будет, если модель не ответит?

Придёт 502 (или 504, если модель не уложилась во время ожидания), резерв вернётся на баланс полностью — за такой запрос вы не платите. Отдельный код 502 upstream_unavailable означает, что сломалось на нашей стороне и тело запроса менять не нужно. Повторите запрос; если ошибка держится, напишите нам и назовите X-Request-Id.

Можно ли получить счёт и закрывающие документы?

Пока нет: продажа идёт в раннем доступе, оплату подтверждает оператор вручную. Если нужны документы для юридического лица — напишите, обсудим отдельно.

Чем это отличается от вашей программы?

API — это доступ к модели: логику, память и интерфейс вы пишете сами. Программа — готовое решение для бизнеса: каналы, согласование ответов, память о клиентах, помесячный тариф. Баланс аккаунта общий, но платите вы только за то, чем пользуетесь.

ранний доступ

Ключ — в личном кабинете

Регистрация занимает минуту, ключ создаётся сразу. Чтобы начать отправлять запросы, напишите нам — зачислим стартовый баланс.

Создать ключ

Написать в Telegram про баланс и доступ