Сколько стоит запрос
Цена каждого запроса в usage.cost_rub и заголовке X-Cost-Rub, программный прайс GET /v1/models/info, правила тарификации и кэш промпта
Цена уже посчитана за вас: каждый успешный ответ несёт списанную сумму в рублях. Смотреть её можно в трёх местах:
| Где | Когда |
|---|---|
usage.cost_rub в теле ответа | все эндпоинты с JSON-ответом |
Заголовок X-Cost-Rub | ответы, где цена известна к моменту отдачи; для ответов без JSON-тела - единственный источник |
| «Использование» в личном кабинете | история и агрегаты по всем запросам |
usage.cost_rub
Итоговая сумма списания в рублях, с точностью до микрорубля:
{
"usage": {
"prompt_tokens": 27,
"completion_tokens": 323,
"total_tokens": 350,
"cost_rub": 0.40138
}
}Состав usage зависит от эндпоинта: у чата - токены, у распознавания речи и
тональности - seconds, у генерации изображений - requests, у классификации -
units. Поле cost_rub есть везде.
В потоковом режиме цена приходит только если запросить usage:
{"stream": true, "stream_options": {"include_usage": true}}Тогда cost_rub будет в финальном usage-чанке (с finish_reason или
завершающем чанке с пустым choices). Без include_usage цену стрима в ответе
не узнать - только в личном кабинете.
Заголовок X-Cost-Rub
Та же сумма десятичной строкой (X-Cost-Rub: 0.40138). Для двух случаев это
единственный способ узнать цену - тела под usage там нет:
/v1/audio/speech- ответ бинарный (аудиофайл);/v1/audio/transcriptionsсresponse_format=text|srt|vtt- ответ сырым текстом.
Явный 0 - бесплатный запрос. В потоковом режиме заголовка нет: заголовки
уходят раньше, чем известна цена, - смотрите usage-чанк.
Программный прайс: GET /v1/models/info
Публичный (без ключа) каталог всех моделей с ценами - то же, что страница «Модели», но машиночитаемо:
curl https://api.tsarrouter.ru/v1/models/infoУ каждой модели - тип, контекст, возможности и каналы-провайдеры с ценами:
{
"id": "sber/gigachat-2-max",
"type": "text",
"context_window": 131072,
"providers": [{
"provider": "sber",
"status": "ok",
"pricing": {"prompt": 650.0, "completion": 650.0, "currency": "RUB", "unit": "1M tokens"},
"prompt_cache": {"price": 0.0, "input_price": 650.0, "unit": "1M tokens", "free": true}
}]
}pricing.prompt/pricing.completion- ₽ за 1M токенов входа/выхода. У поштучных и посекундных тарифов вместо нихper_request/per_second, единица - вunit.prompt_cache- ставка канала за кэшированный вход;free: true- кэш бесплатен.billing_rule(у модели) - правило округления тарифа (см. ниже).addons(у модели) - платные дополнения (например, диаризация у распознавания речи) с надбавкойper_second.
Правила тарификации: блок, минимум, округление
Посекундные тарифы (распознавание речи) считают не длительность файла, а
биллинговые секунды по правилу модели - billing_rule в /v1/models/info:
{"mode": "block", "seconds": 15}- вверх до кратного блоку: файл 41 с тарифицируется как 45 с;{"mode": "minimum", "seconds": 15}- не меньше минимума, дальше вверх до целой секунды;round_kopeck: true- итог дополнительно округляется вверх до копейки.
Именно биллинговые секунды приходят в usage.seconds - поэтому они могут быть
больше длительности записи, это не обсчёт.
В потоковом распознавании блок и минимум
считаются на сессию целиком, а не на каждую фразу: при блоке 15 с первая
фраза на 3 с тарифицируется как 15 с, вторая такая же - уже 0 ₽. К каждой фразе
добавляется ~0.6 с технической тишины - она входит в usage.seconds. Сумма
cost_rub событий completed равна списанию за завершённые фразы сессии.
Кэш промпта
Если канал кэширует повторяющееся начало промпта, попавшие в кэш входные токены
считаются по ставке prompt_cache (у Sber кэш бесплатен), остальные - по
полной. Сколько токенов пришло из кэша - в ответе:
{"usage": {"prompt_tokens_details": {"cached_tokens": 1024}}}Нюансы:
- кэш-ставки нет у поштучных (
per_request) и посекундных (per_second) тарифов; - если поток оборвался до usage-чанка, кэш учесть не из чего - вход списывается по полной ставке;
- каналы с кэшем отмечены значком «Кэш» в каталоге.
Резерв средств в потоковых режимах
На старте стрима на балансе резервируется верхняя оценка стоимости, по
завершении списывается фактическая - излишек возвращается сразу. Не хватает
даже на резерв - 402 до старта потока. В
потоковом распознавании резервируется
аудио-бюджет сессии: при нехватке средств он сжимается до доступного, а если
доступного меньше 10 секунд аудио - отказ кодом 4003.
Потоковое распознавание речи
Транскрипция в реальном времени через WebSocket /v1/realtime/transcriptions: формат событий OpenAI Realtime, подключение, аудио-формат, биллинг, пример кода
Выбор канала и надёжность
Как tsarrouter выбирает канал-провайдера, fallback-цепочка models, объект provider, заголовки X-TsarRouter-* и тест отказоустойчивости X-Simulate-Fail