Esc to close · ⌘K / Ctrl-K opens search anywhere
The tiered playbook: cheapest India route by default, optimize:price, delegate routine work to smaller models, fall back cheap-first, and reserve quality spend for the calls that earn it.
optimize:price + delegation + BYOECostIntermediate12 min
Most teams overpay by sending every request to one expensive model — including the 80% of calls (classification, extraction, short drafts, retries) a cheaper model handles just as well. This is the tiered playbook to cut a bill several-fold without giving up quality on the calls that matter.
optimize: "price" pick the cheapest healthy route automatically.Rule of thumb: a request only deserves a premium model if a human would notice the difference in the output. Most don't.
On BharatRouter, gemma-4-e4b-it is the cheapest India-resident chat route — a sensible default for routine work. Point your existing OpenAI code at it by changing two lines:
from openai import OpenAI
client = OpenAI(base_url="https://api.bharatrouter.com/v1", api_key="br-...")
resp = client.chat.completions.create(
model="gemma-4-e4b-it",
messages=[{"role": "user", "content": "Classify this ticket: 'app won\u2019t open after update'"}],
)
print(resp.choices[0].message.content)When a model has more than one route, optimize: "price" ranks by input + output ₹/Mtok and sends the request to the cheapest healthy one, skipping any route whose circuit is open. It's the default, but set it explicitly so intent is clear — add data_policy: "india_only" to stay India-resident while cheapest-first:
resp = client.chat.completions.create(
model="gemma-4-e4b-it",
messages=[{"role": "user", "content": "Summarise in two lines: ..."}],
extra_body={"optimize": "price", "data_policy": "india_only"},
)The biggest savings come from not calling the expensive model for sub-tasks. A small model does the routine step; only the genuinely hard request goes to a larger one. Pick the model per call from one client — the model id is just a string:
def ask(model, prompt):
return client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
extra_body={"optimize": "price"},
).choices[0].message.content
# Routine: cheapest route
intent = ask("gemma-4-e4b-it", f"Intent of: {user_msg}? One word.")
# Hard reasoning only when it matters
if intent == "complex_support":
answer = ask("gpt-5", build_prompt(user_msg))
else:
answer = ask("gpt-5-mini", build_prompt(user_msg))Reliability and cost are the same lever if you order the chain right: cheapest route first, a premium model only as the final safety net. The router walks the chain on failure, so the expensive route is touched only when everything cheaper is down. Save it once as a Collection so plain requests inherit it.
Want a genuinely free tier? Register your own OpenAI-compatible deployment (vLLM, Ollama, etc.) as a BYOE endpoint — it serves at ₹0 and slots into your fallback chain as the first step, with paid routes behind it only as backup. This is also how self-hosted open-weight models return to the platform as seller onboarding lands.
For the hard calls where you'd reach for a premium model, try Sangam consensus instead — a panel answers in parallel and a synthesiser reconciles one answer. It costs more tokens, so use it for the calls that earn it, not the routine 80%. See the Sangam consensus recipe.
Don't guess — read realized cost per model and set per-key ₹ budgets so a runaway job can't surprise you:
curl -s https://api.bharatrouter.com/me/activity \
-H "Authorization: Bearer br-..." | jq '.by_model'It returns average ₹/req and ₹/Mtok per model — see Usage & activity and per-key budgets.
Next: prove the saving vs OpenRouter, then wire the cheap-first chain.
More recipes in the Cookbook, or see the fullAPI reference.