What one answer costs
The chat runs on Claude Haiku 5.5, the cheapest model on Anthropic's current price list. Every answer is stored with what the provider charged for it, so the cost isn't a guess: it's the sum of real charges. We read those charges on October 27, 2026, for every answer since the chat went live on October 11.
- median cost of one answer
- USD 0.0041
- the most one answer has cost
- USD 0.0054
- the chat's monthly cap
- USD 50
In cents: a typical answer costs 0.41, the dearest so far 0.54, and the cheapest 0.04. At the median, the USD 50 cap pays for about 12,000 answers a month; at the dearest, about 9,000.
Where the money goes
A model charges for what it reads (input tokens) and what it writes (output tokens). Anthropic's price list for Claude Haiku 5.5, read October 27, 2026, for prompts up to 100,000 tokens:
| Input | Cache writes (5 min) | Cache hits | Output |
|---|---|---|---|
| 0.10 | 0.125 | 0.01 | 0.50 |
Output costs five times as much per token, so it looks like the expensive part. It isn't, for us. Each answer is capped at 4,000 output tokens, which at USD 0.50 per million is USD 0.002 at most. A median answer costs about USD 0.0041, so more than half of it is input: the prompt the model reads before it writes a word.
| Cheapest answer | 0.4 thousandths of a USD |
|---|---|
| Most the output can cost | 2 thousandths of a USD |
| Median answer | 4.1 thousandths of a USD |
That prompt carries what the chat is allowed to say: our services, prices and process, the instructions, the format the answer must follow, and the conversation so far. It's long on purpose, because the chat only answers from what's on the site. Trimming it would save money and cost accuracy, so we keep it and watch the price instead.

How we know the real charge
The chat calls Anthropic first and OpenRouter when Anthropic fails or has no key. So far every answer has come through OpenRouter, which adds a usage object to each response. Its usage accounting docs say the cost field is the total amount charged to the account. We store that number with the answer, in millionths of a dollar, as an integer.
When an answer comes from Anthropic directly, there's no charge in the response, so we estimate it from the token counts it reports and the same price list, cache writes and reads included. Either way the number is per answer, which is what a cap needs.
Why not just read the bill
A monthly invoice tells you what you spent after the month is over. A cap has to know what the chat has spent right now, while it's running, so the cost has to be recorded with each answer.
A cap that holds with calls in flight
Checking "have we spent less than USD 50?" before each call isn't enough. Ten visitors can ask at once, every check passes, and the month ends over budget. So before each call, the chat holds the most that call could cost against the month: every input token at the 5-minute cache-write price, which is above the normal input price, plus all 4,000 output tokens. When the answer arrives, the hold is swapped for the real charge. If there's no answer, the hold is dropped.
async def reserve(db, micros, *, budget, now):
"""Set `micros` aside for a call, or None if what's spent, what's held
and this would pass `budget`."""
month = month_key(now)
hold = Hold(month, ObjectId())
async def work(session):
doc = await db[SPEND].find_one({"_id": month}, session=session)
holds = live_holds(doc, now) # holds older than 15 min are dropped
spent = int(doc["micros"]) if doc else 0
if spent + sum(int(h["micros"]) for h in holds) + micros > budget:
return None
await db[SPEND].update_one(
{"_id": month},
{"$set": {"holds": [*holds, {"_id": hold.id, "micros": micros, "at": now}]},
"$setOnInsert": {"micros": 0, "answers": 0}},
upsert=True, session=session,
)
return hold
return await in_transaction(db, work) # two calls can't both pass on the same totalWhen the month's budget runs out, the site stops showing the chat until the next month, and the contact form keeps working. Two smaller limits keep any one visitor from spending it: 20 messages in a conversation and 40 an hour from the same connection.
If you're adding a chat to your site
Most of what an answer costs is the prompt the model reads before it writes a word.
- Record what each answer cost, from the provider's own number when it gives one. You can't cap what you only see on the invoice.
- Hold the worst case before each call, not after. Calls in flight are where a cap leaks.
- Cap the output. It puts a known ceiling on the part that costs the most per token.
- Look at the prompt before the model. Ours is more than half of a typical answer's cost, and it's also what keeps the answers accurate.
- Decide what visitors see when the money runs out. Ours get the contact form, which costs nothing.
If you want an AI agent on your site or WhatsApp with its costs capped from day one, our AI agents service covers it, or see what fits first.


