API нейросетей с оплатой в рублях
Совместим с базовым форматом OpenAI Chat Completions. Укажите адрес API и ключ в совместимом SDK, затем проверьте параметры выбранной модели.
API для приложения или чат для работы
API подходит для бота, сайта или внутреннего инструмента: запрос отправляет ваш сервер, а ответ обрабатывает приложение. Для ручной работы с текстом начните с чата; доступные модели и цены смотрите в каталоге.
Перед переносом приложения проверьте выбранную модель на коротком запросе, затем отдельно протестируйте стриминг и используемые параметры. Совместимость базового формата не означает, что каждая модель поддерживает все возможности вашего прежнего провайдера.
Для пилота команды пригодятся условия для бизнеса и план проверки интеграции.
Быстрый старт
- Зарегистрируйтесь — после входа по коду из письма на балансе 5 ₽ на пробу. Пополнить можно потом, от 100 ₽.
- Создайте ключ в разделе API-ключи.
- Укажите адрес
https://slovai.ru/v1.
curl https://slovai.ru/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "openai/gpt-6-luna", "messages": [{"role": "user", "content": "Привет!"}]}'from openai import OpenAI
client = OpenAI(base_url="https://slovai.ru/v1", api_key="sk-slovai-…")
r = client.chat.completions.create(
model="openai/gpt-6-luna",
messages=[{"role": "user", "content": "Привет!"}],
)
print(r.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://slovai.ru/v1", apiKey: process.env.API_KEY });
const r = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
messages: [{ role: "user", content: "Привет!" }],
});
console.log(r.choices[0].message.content);Переходите с другого агрегатора? Названия моделей такие же — производитель и модель через косую черту; короткие имена вроде gpt-6-sol тоже принимаем. Как переехать и получить бонус →
Авторизация
Ключ передаётся в заголовке Authorization: Bearer sk-slovai-…. Ключ показывается один раз при создании, мы храним только его отпечаток. У ключа можно задать месячный лимит в рублях. Утёкший ключ отзовите в кабинете: остальные продолжат работать.
Чат-комплишены
POST /v1/chat/completions принимает те же поля, что и OpenAI: model, messages, temperature, max_tokens, tools, response_format и другие. Дополнительные поля передаются модели без изменений. Если поставщик модели не отвечает, запрос автоматически уходит к резервному.
Рассуждающие модели (в GET /v1/models у них "reasoning": true) сначала думают, потом отвечают. Рассуждения входят в max_tokens и в стоимость: при маленьком лимите модель может потратить его целиком на размышления и вернуть пустой текст с "finish_reason": "length". Ставьте max_tokens от 2 000 или не указывайте его вовсе.
Стриминг
С "stream": true ответ приходит событиями text/event-stream, как у OpenAI. Последнее событие перед [DONE] всегда содержит usage с токенами и суммой. Если соединение оборвётся, спишется только то, что модель успела сгенерировать.
Стоимость запроса
В каждом ответе в usage есть поле cost_rub: сколько списано с баланса за этот запрос. Так можно считать расходы по пользователям своего продукта без отдельной аналитики.
"usage": {
"prompt_tokens": 1240,
"completion_tokens": 380,
"total_tokens": 1620,
"prompt_tokens_details": { "cached_tokens": 0 },
"cost_rub": 1.8614
}Запрос от 1 024 токенов поставщик сохраняет в кэш. Токены, которые пришли из кэша (cached_tokens), стоят по цене cached_prompt_per_million — в разы дешевле входа. Новые токены такого запроса у моделей с ценой cache_write_prompt_per_million стоят по ней: так поставщик берёт за запись в кэш. Обе цены — в GET /v1/models. Выгоднее всего держать неизменное начало запроса — системный промпт, документы — в начале, а меняющееся — в конце.
Если поставщик не сообщил количество токенов, мы считаем их по длине текста и добавляем "estimated": true. Заголовок x-request-id — номер запроса в детализации кабинета.
Список моделей
GET /v1/models отдаёт доступные модели с ценами в рублях за 1 млн токенов. Ключ не нужен.
{
"id": "anthropic/claude-sonnet-5",
"owned_by": "Anthropic",
"context_length": 1000000,
"pricing": { "currency": "RUB", "prompt_per_million": 362, "completion_per_million": 1810 },
"type": "chat",
"vision": true,
"data_in_russia": false
}Проверьте возможности выбранной модели
Список моделей публичный: ключ для этого запроса не нужен. Перед настройкой приложения проверьте точный id и тип модели в текущем ответе сервиса.
curl https://slovai.ru/v1/models
type: "chat"— модель для/chat/completions;type: "image"— для/images/generations.vision: true— модель принимает изображения во входе. Приvision: falseиспользуйте текстовый запрос или выберите другую модель.reasoning: true— модель расходует часть лимита на рассуждения. Учитывайте это при выбореmax_tokensи проверке пустого ответа сfinish_reason: "length".
Эти поля не подтверждают поддержку всех параметров SDK. Стриминг, инструменты и структурированный вывод проверяйте отдельно для выбранной модели на коротком запросе. У режима Авто модель выбирается при выполнении; её имя возвращается в ответе.
Автовыбор модели
Модель slovai/auto сама подбирает исполнителя под вопрос: короткие и простые запросы отвечает недорогая модель, код, документы, расчёты и юридические вопросы — флагман. Когда правила не дают однозначного ответа, сложность оценивает самая дешёвая модель — это стоит тысячные доли рубля и видно в детализации отдельной строкой. В ответе поле model называет модель, которая ответила, цена — по её тарифу.
{ "model": "slovai/auto", "messages": [{ "role": "user", "content": "Переведи: good morning" }] }Экономный режим
Для моделей OpenAI и Google добавьте "service_tier": "flex": ответ придёт медленнее, зато на 40% дешевле. Подходит для фоновых задач — разметки, обработки документов, рассылок. Цены экономного режима — в economy_pricing списка моделей.
Если экономные мощности заняты, шлюз повторит попытку через 1,5 секунды. Не получилось — вернётся 429 economy_unavailable: запрос не выполнен и не оплачен, дороже без вашего согласия не будет. Чтобы в такой ситуации получать ответ по обычной цене, добавьте "provider": {"economy_fallback": "standard"}. Для моделей без экономного режима запрос с service_tier вернёт 400 economy_unavailable, а с этим параметром — выполнится как обычно.
Какой тариф применён, видно в ответе: заголовок x-service-tier (flex или standard), в usage — economy: true по экономной цене или economy_busy: true, если с вашего согласия ответ пришёл по обычной. Режим и цены каждого запроса сохраняются в детализации.
{
"model": "openai/gpt-6-sol",
"service_tier": "flex",
"provider": { "economy_fallback": "error" },
"messages": [{ "role": "user", "content": "Классифицируй отзыв: …" }]
}Картинки во входе
Модели с "vision": true читают картинки: фото, скриншоты, сканы. Передайте картинку частью сообщения, как у OpenAI, ссылкой или в base64. Модель без vision вернёт 400, а не ответ наугад.
{
"model": "openai/gpt-6-sol",
"messages": [{
"role": "user",
"content": [
{ "type": "text", "text": "Что написано на чеке?" },
{ "type": "image_url", "image_url": { "url": "data:image/jpeg;base64,/9j/4AAQ…" } }
]
}]
}Картинка стоит как примерно тысяча входных токенов, точная сумма — в usage.cost_rub. В веб-чате можно просто прикрепить файл: PDF, DOCX и текстовые документы мы переводим в текст сами, поэтому они работают с любой моделью.
Генерация картинок
POST /v1/images/generations — как у OpenAI. Модели с "type": "image" в списке моделей; цена за одну картинку — в pricing.per_image. Формат задаётся aspect_ratio (1:1, 16:9, 9:16, 4:3, 3:4) или привычным size. Одна картинка на запрос, ответ — PNG в base64.
import base64
from openai import OpenAI
client = OpenAI(base_url="https://slovai.ru/v1", api_key="sk-slovai-…")
r = client.images.generate(
model="black-forest-labs/flux.2-pro",
prompt="Кот-космонавт на орбите Земли, акварель",
size="1792x1024",
)
open("cat.png", "wb").write(base64.b64decode(r.data[0].b64_json))Если модель отказалась рисовать по правилам разработчика, вернётся ошибка и деньги не спишутся.
Данные только в России
Модели с "data_in_russia": true — YandexGPT, Alice AI и GigaChat — обрабатывают запросы только на серверах в России. Остальные модели передают текст запроса разработчику за рубеж. Чтобы запрос гарантированно не покинул Россию, добавьте параметр:
{
"model": "yandex/yandexgpt-5.1-pro",
"messages": [{ "role": "user", "content": "Привет!" }],
"provider": { "country": "ru" }
}Если выбранная модель работает за рубежом, запрос не уйдёт никуда и вернётся ошибка 403 data_residency. Для всей компании режим включается в кабинете, раздел «Команда»: тогда ограничение действует для чата и всех ключей без изменений в коде. Другие поля provider мы не передаём: поставщика выбирает шлюз.
Ошибки
| 400 | invalid_request | Неверный формат запроса. Текст ошибки подскажет поле. |
| 401 | invalid_api_key | Нет ключа, ключ неверный или отозван. |
| 402 | insufficient_balance | Закончились деньги на балансе. |
| 403 | data_residency | Модель работает за рубежом, а запрос ограничен Россией. |
| 404 | model_not_found | Такой модели нет. Проверьте id в GET /v1/models. |
| 429 | key_limit_exceeded | Исчерпан месячный лимит ключа. |
| 429 | rate_limited | Больше 10 запросов в секунду с одного ключа. |
| 429 | economy_unavailable | Экономные мощности заняты, а обычная цена не разрешена. Запрос не оплачен. |
| 502 | upstream_unavailable | Все поставщики модели недоступны. Повторите позже или выберите другую модель. |
{ "error": { "message": "Недостаточно средств на балансе…", "type": "insufficient_quota", "code": "insufficient_balance" } }Как выбрать следующее действие
Ответ сервиса на запрос без заголовка авторизации:
{
"error": {
"message": "Неверный API-ключ. Создайте ключ в личном кабинете.",
"type": "authentication_error",
"code": "invalid_api_key"
}
}- 401: проверьте заголовок
Authorization: Bearer …и состояние ключа в кабинете. Изменение текста запроса не исправит авторизацию. - 404 model_not_found: возьмите точный id из
GET /v1/modelsи проверьте тип модели для выбранного эндпоинта. - 429: прочитайте
error.code. Приrate_limitedуменьшите частоту запросов; приkey_limit_exceededпроверьте месячный лимит ключа. Дляeconomy_unavailableсначала выберите допустимый режим обработки.
Сохраните HTTP-код и тело ошибки для диагностики. Перед обращением в поддержку удалите из примера ключ и содержимое частных сообщений.
Готовые инструменты
Проверено: официальный Python SDK OpenAI 2.x и запросы curl — ответы, поток с usage, ошибки. Инструменты, где можно указать свой адрес OpenAI API (n8n, LangChain, Cursor, Open WebUI и другие), работают по тому же протоколу Chat Completions, но мы их не проверяли: укажите адрес https://slovai.ru/v1, свой ключ и id модели из списка, а если что-то не так — напишите нам. Эмбеддингов, аудио и Responses API у нас нет; таблица совместимости.