# Считаем токены и деньги

Курс: Claude API для разработчиков — https://zero2claude.ru/learn/api
Канонический URL: https://zero2claude.ru/learn/api/3-1-schitaem-tokeny

Стоимость запроса считают по полю usage, а токены — через count_tokens, а не чужими токенайзерами. Как прикинуть цену заранее.

Деньги в 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` на каждом шаге, а развёрнутый ответ бьёт по дорогому выходу.

## Оценка ДО отправки

Если надо прикинуть размер промпта заранее (например, выгрузка отзывов на анализ) — есть отдельный вызов:

```python
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` передаётся та же модель, которой будешь отвечать.
