/api/v1 нет.
usage.cost в ответе
Каждый текстовый ответ содержит объект usage, а в нём — cost с суммой, списанной с кошелька в рублях:
Разбор токенов по трём текстовым эндпоинтам
/api/v1/chat/completions и /api/v1/responses
Одинаковый формат:
/api/v1/messages
Эндпоинт отвечает в формате Anthropic, и правила другие:
Единый разбор обоих форматов:
Python
cached_read_tokens и reasoning_tokens — подмножества, а не добавка. Считайте prompt = text + image + audio + cached и completion = text + reasoning + audio — только в таком порядке, и то, что выводите в отчёт, не разойдётся с чеком.Баланс — снимок, а не история
cURL
Свой учёт
Единственный способ получить честную историю — писать строку по каждому запросу в свою базу сразу, в момент ответа.Python
request_id: он связывает вашу строку с логами и с обращением в поддержку. Прокидывайте его через все слои, включая повторы, иначе при инциденте вы не найдёте, какой именно вызов стоил денег.
Многопользовательский продукт
user в теле запроса принимается, но не используется для атрибуции: запрос всегда относится к владельцу ключа. Списать расход с пользователя вашего приложения по полям API нельзя.
Python
metadata или user тела запроса, обратно в вашу базу не возвращается.
Практический приём — отдельный API-ключ на каждого пользователя вашего приложения. Тогда атрибуция делается сама: у каждого ключа свой кошелёк и своя история в панели. Плата за управление ключами — при большом числе пользователей это становится неудобно; решение за вами.
Пороги и алерты
Пороги считайте по своей таблице, а не по балансу: баланс — общее состояние кошелька, а бюджет — ваше понятие.Python
Что дальше
Биллинг
Как считается стоимость запроса
Баланс
Формат ответа и коды
Кэширование
Как уменьшить входную часть расхода
Токены рассуждений
Почему растёт выходная часть
