Cheapest LLM API for Your Workload? Ranking Kadraris Chat Models by Cost
Looking for the cheapest LLM API for a chatbot? Rank Kadraris chat models by the cost of 1,000 replies, see what inflates bills, rerun it with a script.
"Which LLM API is cheapest?" has no fixed answer, because the bill depends on how many tokens you send in and how many come back. So instead of a claim, here is a method. I priced one realistic job, 1,000 support-chat replies, against the chat models in the Kadraris catalog at the rates of October 12, 2026. On that job DeepSeek V4 Flash ($0.135 / $0.27 per 1M tokens) and GPT-6 Luna ($0.108 / $0.54 per 1M tokens) came out lowest, with GPT-5.6 Luna, DeepSeek V4 Pro, MiniMax M3, Gemini 3.6 Flash and GLM-5.2 behind them. The flagships at the bottom of the list cost many times more for the same work.
Keep one thing in mind throughout: this sorts by price, not by how good the answers are. For classification, summaries and short factual replies a budget model is often enough. For hard reasoning it may not be.
The job I priced
Picture a customer-support bot that pastes a short knowledge-base snippet into every prompt:
- 1,000 replies in total,
- about 1,500 tokens going in per reply (system prompt, snippet, the customer's message),
- about 400 tokens coming out per reply.
Added up, that is 1.5 million input tokens and 0.4 million output tokens. Rates are quoted per million, so the whole calculation fits on one line:
1,000 replies = 1.5 × input rate + 0.4 × output rateFor any other workload:
cost = replies × (in_tokens × in_rate
+ out_tokens × out_rate) / 1,000,000Input and output rates for every model are in the table below and on pricing.
The order at October 12, 2026 rates
Rows are sorted by the formula above, lowest total first, using catalog rates from October 12, 2026. The price column is live, so if a rate changes the order may no longer match. For your own token counts, use the AI cost calculator or the script further down.
| Model | Maker | Input / output per 1M tokens |
|---|---|---|
| DeepSeek V4 Flash | DeepSeek | $0.135 / $0.27 per 1M tokens |
| GPT-6 Luna | OpenAI | $0.108 / $0.54 per 1M tokens |
| GPT-5.6 Luna | OpenAI | $0.216 / $1.30 per 1M tokens |
| DeepSeek V4 Pro | DeepSeek | $0.54 / $1.22 per 1M tokens |
| MiniMax M3 | MiniMax | $0.81 / $3.24 per 1M tokens |
| Gemini 3.6 Flash | $0.79 / $3.95 per 1M tokens | |
| GLM-5.2 | Z.ai | $1.22 / $4.05 per 1M tokens |
| Claude Haiku 4.5 | Anthropic | $1.35 / $6.75 per 1M tokens |
| Claude Sonnet 5 | Anthropic | $3.24 / $16.20 per 1M tokens |
| Kimi K3 | Moonshot AI | $3.38 / $16.88 per 1M tokens |
| Claude Opus 5.5 | Anthropic | $3.78 / $18.90 per 1M tokens |
Which of the first two wins depends on your ratio of input to output. GPT-6 Luna charges less for input; DeepSeek V4 Flash charges far less for output. In this job Flash comes first, but if your prompts are more than ten times longer than the replies, Luna moves ahead. Sonnet 5 and Opus 5.5 are in the list as a reference point: put their rates into the formula and you see what a flagship would cost for the same thousand replies.

Four things that push the real bill up
The arithmetic is exact. The assumptions behind it are what break:
- Thinking tokens. Reasoning models, such as GPT-6 or DeepSeek with thinking switched on, produce internal reasoning that is billed as output. Your 400 output tokens can become several thousand.
- Tokenizers differ. One paragraph is not the same token count in every model. Anthropic, for instance, states that Sonnet 5 turns the same text into roughly 30% more tokens than Sonnet 4.6 did.
- Reply length caps. On Kadraris Gemini 3.6 Flash stops at 8,192 output tokens per reply. That is plenty for chat and too little for a long report.
- Mistakes cost money too. If a low-cost model gets one reply in five wrong and a person or a stronger model has to redo it, the savings can disappear.
I use the ranking as a list of candidates to test, not as the final pick. Running the same set of questions through several models side by side is shown in switching LLM models in Python and Node.
The low-cost models, one by one
DeepSeek V4 Flash. The compact member of DeepSeek's V4 family, with open weights. Context of 1M tokens, replies up to 384K tokens, and the lowest output rate among the chat models here. It reasons before it answers by default, and that reasoning is billed as output, so set max_tokens for simple jobs.
GPT-6 Luna. The entry model of OpenAI's GPT-6 family from September 2026. Built for chat, classification and light agent work, with a 1.05M-token context. The other GPT-6 models are covered in GPT-6 API pricing.
MiniMax M3. Open weights, released in May 2026, aimed at code and agents. It has a 1M-token context and can return up to 512K tokens in one reply, which makes it worth a look when you need long output, such as whole files or reports, without a flagship price.
DeepSeek V4 Pro. The big open-weight MoE model above Flash. At October 12 rates it costs several times more than Flash on Kadraris for input and output alike, so only move to it when your own tests show a clear gain.
GLM-5.2 (Z.ai). An open-weight model built for long tasks that need planning.
Gemini 3.6 Flash. A quick model from Google's Flash line for chat and simple jobs. Mind the 8,192-token reply cap on Kadraris if you need long documents.
Kimi K3. It shows up in searches for low-cost models, but on Kadraris it is not one: at October 12 rates it costs more than Claude Sonnet 5. It is meant for long, difficult projects rather than high-volume chat.
Rerun the ranking with your own numbers
GET /v1/models is public and returns live prices with no key. The script below applies your token counts and prints the models sorted by total:
import requests
# replace with your own averages
REPLIES, IN_TOK, OUT_TOK = 1000, 1500, 400
models = requests.get(
"https://kadraris.com/v1/models",
params={"category": "chat", "currency": "USD"},
timeout=30,
).json()["data"]
rows = []
for m in models:
p = m["pricing"]
per_in = float(p["input_per_mtok"])
per_out = float(p["output_per_mtok"])
cost = REPLIES * (IN_TOK * per_in
+ OUT_TOK * per_out) / 1_000_000
rows.append((cost, m["id"]))
for cost, model_id in sorted(rows):
print(f"{model_id:24} ${cost:8.2f}")Do not guess the averages. Every response includes usage with prompt_tokens and completion_tokens; log those for a few days of real traffic and use the means.
Cutting cost on whichever model you pick
- Trim the system prompt. It travels with every single request, and in the example it is most of the 1,500 input tokens.
- Route by difficulty. Let the low-cost model answer the bulk and pass only the hard cases to a stronger one. Switching is a change to one field.
- Set
max_tokens. Wherever replies should be short, cap them. - Limit each key. In the dashboard every API key can get a monthly spending cap. Once it is hit, the API answers
403.

On Kadraris every model in the table uses the same key and the same prepaid balance. There is no subscription, the balance does not expire, and failed requests are not charged. You can start with $10, which at the rates above pays for a lot of replies on the budget models. Create an account or read the LLM API overview.
Questions
Why does my order differ from the table?
Because your input-to-output ratio is different. Long prompts with short answers favour models with low input rates, such as GPT-6 Luna; short prompts with long answers favour low output rates, such as DeepSeek V4 Flash. Run the script with your own averages.
Do reasoning tokens show up in usage?
Yes, they are billed as output, so they appear in your completion token count. If a simple task suddenly costs much more than expected, check whether thinking is on and cap max_tokens.
How do I test a budget model before switching my bot?
Take a few dozen real conversations, send them to the budget model and to your current one, and compare the answers. Keep the stronger model for the cases where the budget one fails.
Can I stop a script from spending more than a set amount?
Yes. Give the script its own API key with a monthly cap in the dashboard. When the cap is reached, requests with that key get a 403 while your other keys keep working.

























