Cut Your AI Bill 50-90% Without Switching Models Skip to content

Learning

Practical know-how on frontend, AI tools and software development.

Cut Your AI Bill 50-90% Without Switching Models

Published: 10 min read POLPROG AI Tools

When the AI bill gets uncomfortable, the reflex is always the same: move to a cheaper model. It is usually the wrong first move. The two biggest discounts on that bill sit on the model you already run, they stack, and neither changes a single answer your users see. This is the playbook in the order that works: what each lever needs from your workload, what it realistically saves, and the honest math, run on the same chatbot whose invoice we took apart in part one.

Downgrading is the last lever, not the first

Moving from Opus 4.8 to Sonnet 4.6 cuts per-token prices by 40 percent, and it re-rolls every answer your product gives. That is the trade most teams reach for first, and it is usually premature, because two bigger discounts are already sitting on the price sheet for the model you run today: prompt caching reads repeated context at roughly a tenth of the input price, and the Batch API takes a flat half off anything that can wait. Neither changes a single answer. They stack. And if you apply them first, the downgrade you were bracing for often stops being necessary.

To keep the numbers honest we will keep working on the same patient: the support chatbot whose $1,460 invoice we took apart in part one. Four levers, applied in order, no model switch for the traffic that matters:

The part 1 chatbot, four levers later
ItemAmount
Part 1 invoice$1,460
+ prompt caching$1,332
+ routing$799
+ output trim$673

The part 1 chatbot, four levers later

Opus 4.8, 10,000 conversations / month · levers applied left to right

-54%
USD / month
$0
$400
$800
$1,200
$1,600
$1,460
$1,332
$799
$673
−$128
−$533
−$126
Part 1 invoice
no optimisation
+ prompt caching
history read from cache
+ routing
easy half to Haiku 4.5
+ output trim
answers ~30% shorter

Modelled on part 1's assumptions (10,000 four-turn conversations; a 1,500-token system block; 500-token questions, 700-token answers; Opus 4.8 at $5 / $25 per 1M). Caching uses 5-minute windows and honours Opus 4.8's 4,096-token minimum cacheable prefix, so it only starts paying from turn 3. Routing sends the easier half of conversations to Haiku 4.5 ($1 / $5) and changes those answers. Trimming cuts answers ~30% with the input left unchanged, which keeps the estimate conservative.

Lever 1: prompt caching, the discount hiding in your repeated context

Part one showed that re-sent context is the biggest line on a conversational bill: the same system prompt and the same growing history, billed again on every turn. Caching attacks exactly that line. You mark the stable prefix of your request, pay a one-time premium to write it (1.25x the input price on the 5-minute tier, 2x on the 1-hour tier), and every later request that starts with the same bytes reads it back at roughly a tenth of the price.

Cache tierWrite premiumRead pricePays for itself
5-minute1.25x input price, once~0.1x input priceOn the 2nd use of the prefix
1-hour2x input price, once~0.1x input priceOn the 3rd use
For a prefix reused N times, the 5-minute tier wins as soon as 1.25 + 0.1(N-1) ≤ N, which happens at the second use; the 1-hour tier needs the third. Below those counts, caching costs more than it saves. And none of it applies below the minimum cacheable prefix: 4,096 tokens on Opus 4.8 and Haiku 4.5, 2,048 on Sonnet 4.6 and Fable 5.

Two honest caveats before you pencil in 90 percent. First, the discount applies to the cached portion, not the bill: our chatbot drops from $1,460 to $1,332, a 9 percent cut, because its conversations are short. On Opus 4.8 nothing below 4,096 tokens can be cached at all, so a four-turn chat only crosses that threshold on turn three; the deepest, most expensive turns get the discount, the early ones do not. Second, the write premium means caching a prefix nobody reuses is a way to pay extra. Caching shines where context is big or conversations run deep, which is exactly where part one said the pain lives.

Lever 2: the Batch API, a flat half off everything that can wait

The Batch API is the simplest discount in the catalogue: submit work asynchronously, get results back within minutes to hours, pay 50 percent of the standard price on every token in the job, cached tokens included. There is no quality trade at all; it is the same model producing the same answers, just not while anyone watches a spinner.

The catch is the definition of "can wait". A customer mid-conversation cannot, so our chatbot's live traffic gets nothing from this lever, and that is why it does not appear in the waterfall above. But almost every AI product carries a shadow workload that can wait: the nightly summaries of those support conversations, bulk classification, report generation, content pipelines. Price those separately and batch them by default; paying the live rate for work no one is waiting on is the quietest leak in most bills.

Lever 3: route by difficulty, not by default

Not every conversation needs your best model. Password resets and delivery-status questions do not require Opus 4.8; they require a correct lookup and a polite sentence, which Haiku 4.5 delivers at $1 / $5 per million tokens, five times cheaper per token. In our model, sending the easier half of conversations to Haiku takes the bill from $1,332 to $799, the single biggest step in the waterfall.

Treat this lever differently from the previous two, because it is the first one that changes outputs. Caching and batching return identical answers; routing gives the routed slice a different model. The discipline that keeps it safe: classify conservatively, route only the traffic a cheaper model provably passes on your own test set, and keep an escalation path back to the big model the moment the conversation stops being easy.

Lever 4: trim the output side, because it bills at five times input

Every Claude model prices output tokens at exactly five times input, so the length of your answers is a pricing decision, whether or not you made it deliberately. Support answers padded with restated questions and closing pleasantries cost real money at volume. Instructing the assistant to answer in the shortest form that fully resolves the ticket cuts our modelled answers by about 30 percent and the bill from $799 to $673, and on the Opus family the effort setting is the same dial one level up: turn it down for routine traffic and the model spends fewer reasoning tokens getting to the same place.

The limit here is not technical but human: trim past the point of usefulness and answers start reading as curt, which shows up later as repeat contacts. Cut the padding, keep the substance.

Where the 50 to 90 percent actually comes from

Stack the levers on our chatbot and the invoice lands at $673, 54 percent below where part one left it, with the hard half of the traffic still on the exact same model producing the exact same answers. Whether your own number lands nearer 50 or 90 is decided by two properties of your workload: how much of your input is repeated context, and how much of your work can wait.

How deep the cut goes depends on the shape
WorkloadSaved
Live support chatbot-54%
Nightly document pipeline-64%
Async agent, heavy shared context-88%

How deep the cut goes depends on the shape

Share of the monthly bill saved, modelled per workload

up to -88%
Live support chatbot · caching + routing + trim
-54%
Nightly document pipeline · caching + Batch API
-64%
Async agent, heavy shared context · caching + Batch API
-88%
0%
25%
50%
75%
100%

Three modelled workloads, same models throughout. Chatbot: part 1's assumptions plus the three levers above ($1,460 to $673). Pipeline: 60,000 documents a month on Sonnet 4.6 ($3 / $15), a 2,500-token shared instruction block (cached) plus a 3,000-token document in and 500 tokens out, run overnight through the Batch API ($1,440 to $518). Agent: 100,000 async calls a month on Opus 4.8 with a shared 10,000-token context pack kept warm, 200 in / 300 out per call, batched ($5,850 to $675). Cache hits inside Batch runs are best effort, so treat the right ends as ceilings.

A live chatbot sits at the modest end, because short conversations cache late and none of the live traffic can be batched. A nightly document pipeline does better: its instruction block caches perfectly and every token in the job takes the batch discount. And the async agent with a large shared context pack is the shape the discounts were made for; nine-tenths of its input reads from cache and the whole run batches, so 88 percent of the bill simply leaves.

The eligibility check

Before you touch the model string, walk your workload down this table once.

LeverYour workload needsRealistic savingWatch out
Prompt cachingA stable prefix above the model minimum, reused within the cache window~90% off the repeated portionWrite premium backfires below 2-3 reuses; short chats start caching late
Batch APITolerance for minutes-to-hours of latencyFlat -50% on the whole jobNever for a waiting user; cache hits inside batches are best effort
Routing by difficultyA slice of traffic a cheaper model provably handlesUp to 5x on the routed sliceChanges outputs; test quality first and keep an escalation path
Output trim + effortOutput-heavy bills (output prices at 5x input)Proportional to the cutToo aggressive reads as curt, incomplete answers

Run the audit in this order: caching first if any context repeats, batch everything a user is not waiting on, trim the output you were never reading anyway, then route the provably easy slice. Only when all four are in place does the downgrade question deserve an answer, and by then it is a much smaller question. And if the number you land on still feels too high for what the feature earns, the question is no longer how to run it cheaper; it is whether it should exist at all, which is exactly what part three is for.

The cheapest token is the one you did not resend, the second cheapest is the one nobody waited for, and neither requires touching the model your users already trust. That is the whole argument: the discounts that do not change your product come first, the one that changes it for a slice of traffic comes next, and the one that changes it for everyone comes last, if it is still needed at all. Our modelled chatbot gave up 54 percent of its bill in that order without a single hard conversation leaving Opus 4.8. Run the same order on your own invoice: measure how much of your input repeats, list what can wait an hour, read a week of your own answers for padding. The bill you are trying to cut was built from defaults; most of it comes back the same way.

AI Claude AI Costs Prompt Caching Cost Optimization

Frequently asked questions

How much does prompt caching actually save?

Cache reads cost roughly a tenth of the input price, so the ceiling is about 90 percent off the portion of your bill that is repeated context, not 90 percent off the bill. Our modelled four-turn chatbot saves 9 percent because short conversations cache late; an async agent with a 10,000-token shared context pack saves about 77 percent before batching even starts. The repeated share of your input decides which end you are on.

When does prompt caching break even?

On the 5-minute tier a cached prefix pays for itself on its second use: the 1.25x write premium plus a 0.1x read is already cheaper than sending the prefix twice at full price. The 1-hour tier writes at 2x and breaks even on the third use. Below those reuse counts caching costs more than it saves, and prefixes below the model minimum (4,096 tokens on Opus 4.8 and Haiku 4.5, 2,048 on Sonnet 4.6 and Fable 5) do not cache at all.

Does the Batch API discount stack with prompt caching?

Yes. Batch pricing is 50 percent off every token in the job, including tokens billed at cache-read and cache-write rates, so a heavily cached, batched workload takes both discounts at once. One caveat: batches process asynchronously, so landing inside a warm cache window is best effort rather than guaranteed; treat the stacked figure as a ceiling.

Can I use the Batch API for a customer-facing chatbot?

Not for the live conversation; batch results come back within minutes to hours and a customer will not wait that long. The batch lever belongs to everything around the chatbot instead: nightly conversation summaries, tagging and classification, QA sampling, report generation. Those jobs are usually running at full price for no reason.

Is routing to a cheaper model the same as downgrading?

No. A downgrade changes the model, and therefore the answers, for every user. Routing keeps your primary model for the traffic that needs it and moves only the provably easy slice, like status lookups, to a cheaper tier such as Haiku 4.5. It does change outputs for that slice, so it belongs after the same-answer levers, with a quality test before and an escalation path after.

What should I try first to cut an AI bill without changing quality?

Prompt caching, if any part of your context repeats; it attacks the largest line on conversational bills and changes nothing about the answers. Then move every latency-tolerant job to the Batch API for a flat half off. Then trim output length and effort, since output bills at five times input. Routing and downgrades come last because they are the levers that alter what users see.

Was this helpful?

Get new articles by email

One short email per new Learning article. No spam, unsubscribe in one click.

We only use your email to send new articles. No third-party sharing.

Back to Learning