Деньги в Claude API считают не в символах и не в словах, а в токенах. Платишь отдельно за вход (твой промпт) и за выход (ответ модели). У каждой модели свой ценник за 1M токенов: claude-opus-4-8 — $5 вход / $25 выход, claude-sonnet-4-6 — $3 / $15, claude-haiku-4-5 — $1 / $5. Выход всегда дороже входа в несколько раз — это главное, что определяет счёт.
Где взять реальные цифры
Каждый ответ возвращает поле usage — это факт по конкретному запросу, не догадки:
{
"content": [{"type": "text", "text": "..."}],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 1024,
"output_tokens": 312,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0
}
}
Стоимость считается так: input_tokens × цена входа + output_tokens × цена выхода. Для бота поддержки магазина это значит: длинная история диалога раздувает input_tokens на каждом шаге, а развёрнутый ответ бьёт по дорогому выходу.
Оценка ДО отправки
Если надо прикинуть размер промпта заранее (например, выгрузка отзывов на анализ) — есть отдельный вызов:
from anthropic import Anthropic
client = Anthropic()
n = client.messages.count_tokens(
model="claude-opus-4-8",
messages=[{"role": "user", "content": open("otzyvy.txt").read()}],
).input_tokens
print(n)
Не считай токены Claude через tiktoken — это токенайзер OpenAI, и для Claude он врёт (особенно на коде и не-английском тексте). Бери count_tokens для оценки и поле usage для факта.
Токенайзер привязан к модели — поэтому в count_tokens передаётся та же модель, которой будешь отвечать.