Стоимость запроса приходит вместе с ответом, а не появляется в отчёте через сутки. Считать её самому по прайсу не нужно — и не стоит: правил тарификации там больше, чем кажется.
В каждом ответе есть usage со счётчиками токенов — это часть схемы OpenAI и приходит всегда.
"usage": {
"prompt_tokens": 412,
"completion_tokens": 128,
"total_tokens": 540
}Деньги и разбивка приходят в том же блоке и просить о них не нужно: цена известна до запроса, поэтому мы кладём её рядом с токенами. В стриминге для этого нужен только стандартный stream_options.include_usage.
"usage": {
"prompt_tokens": 2310,
"completion_tokens": 1842,
"total_tokens": 4152,
"prompt_tokens_details": {"cached_tokens": 2048},
"provider": "openrouter",
"cost": 2.94,
"cost_micro": "2940000",
"currency": "USD",
"cost_breakdown": {
"prompt": 0.07,
"cache_read": 0.05,
"completion": 2.82
}
}| Поле | Что это |
|---|---|
| cost | Итог в долларах, который списан с баланса |
| cost_micro | Тот же итог в микроцентах строкой — точное значение без потерь на округлении |
| cost_breakdown | Из чего сложился итог: свежий вход, чтение кэша, ответ |
| provider | Площадка, которая фактически ответила |
| prompt_tokens_details.cached_tokens | Часть prompt_tokens, тарифицированная по цене чтения кэша |
usage приходит та же цена по факту запроса.Блок usage приходит в предпоследнем событии, перед [DONE], и относится ко всему ответу целиком. В промежуточных кусках его нет — считать токены по ходу нечем.
data: {"choices":[{"delta":{"content":"…"}}]}
data: {"choices":[],"usage":{"prompt_tokens":412,"completion_tokens":128,"cost":0.63}}
data: [DONE]curl "https://zerno.one/api/v1/activity?from=2026-08-01&to=2026-08-31&group=day" \
-H "Authorization: Bearer $ZERNO_API_KEY"Группировать можно по дню, часу, ключу, модели и полю user (group=day|hour|key|model|user). Тот же срез доступен глазами в разделе «Доступ к моделям» — цифры и источник данных те же, чтобы отчёт из кабинета и отчёт из скрипта сходились до цента.
Сумма cost за период совпадает с суммой списаний за тот же период. Расхождение возможно в одном случае: запрос начался в последнюю секунду периода, а закончился в первую секунду следующего — он попадёт в тот период, в котором завершился. Для месячной сверки с актом это несущественно, для посуточной — учитывайте.