Can someone make a dedicated guide for making combos for 9router, omnirouter, freellmapi etc that switch when a free llm hit limit? I tried watch a free youtube videos. They tell how to setup 9router, omniroute but not the combos.
Request someone from community to help out if possible.
A “combo” is just a list of providers in order.
The router tries #1. If it is full, it tries #2. Then #3.
You are ordering that list by best model. That is why it stalls.
Order it by refill speed instead.
Do this first, before any list
“Rate limits are applied per project, not per API key.” — Google docs
10 keys in 1 project = 1 allowance.
10 projects = 10 allowances. Same account, one click each. Make them here
Do this before you touch any router. It is free size.
Then order the list by the clock
REFILLS WHO PUT IT
──────────────────────────────────────────────────
1 every minute Groq · NVIDIA NIM TOP ▲
2 every day Cerebras · Gemini keys MIDDLE │
3 every month Kiro · OpenRouter free BOTTOM ▼
4 never runs out OpenCode Free (no key) LAST ◆
A monthly allowance on top is gone by day 3.
A monthly allowance at the bottom is still full when you reach it.
Rung 4 needs no key at all, so you are never fully stopped.
Inside one rung, add every account you own. The router rotates them.
Where you click
Start with OmniRoute. Build no list. Set your model to auto/offline.
It checks who has the most left and picks that, on every single request. how
9router — Dashboard → Combos → Create New → drag rows into the order above → Strategy: Fallback. Then type your combo name where you used to type a model name. how
freellmapi — Keys page → drag the Fallback Chain into that order. how
How to see it working
freellmapi puts an X-Fallback-Trail header on every reply.
It lists the providers it actually walked through, in order.
That is your proof the ladder is live, not a guess.
Never hit the wall at all
Right now your router waits for the “slow down” error, then moves on.
Every wall costs you one wasted request, forever.
- keymux — checks who has room before sending. The error never happens.
- llm-keypool — reads each provider’s real reset time instead of guessing a wait.
🧰 Ready-made lists, if you want to skip building one
- freellmpool — 24 providers, least-used first
- llm-apipool — 40+ providers, CLI / TUI / proxy
- llmux — 5 orders to choose from, no database
- OpenRouter fallbacks —
"models": ["a","b","c"], nothing to install
🚩 Old advice that is now wrong
“Pollinations needs no key” — not true any more. Their docs now require a key for everything. Some lists still show it as keyless.
Tools change every month. The clock order does not.
Thanks for response. I understand the math now of “10 keys in one project = still one limit.” But the question remains: how to make the combos for 9router of omnirouter or freelmmapi? I have free api keys from a few, now will make more per project. But combos - I can’t figure out. Which models/providers first.
All YT videos claim teach. They the npm command, show add one provider, say add more like this and END. Combos? None.
I was not able to understand what SRZ’s English. I need a translator..
The answer above is now AI-improved by the Core-Community.
The combo order isn’t “best model first.” It’s refill speed first.
(9router · OmniRoute · freellmapi)
Combo: "my-stack"
1. groq/llama-3.3 ← resets in minutes
2. glm/glm-5.1 ← resets daily
3. kiro/claude-sonnet ← resets monthly, use it last
Top model runs out fastest and comes back fastest. Bottom model is precious, so it sits behind everything else.
If you don’t want to order it by hand, OmniRoute (9router’s bigger fork) has a reset-window / headroom strategy that sorts providers by “who resets soonest” automatically. 9router and freellmapi don’t have that yet — still manual there.
(☞゚ヮ゚)☞ Three combos to paste, one order to copy — fastest refill on top, no-key at the bottom, the switch happens by itself
A combo is a list. Provider 1 full → provider 2. Provider 2 full → provider 3. Fastest refill on top, the no-key one at the bottom.
# provider free quota (their page, 12 Sep 2026) refills
⚡ 1 Groq 30/min · 1,000/day · 200K tokens/day per model every minute
🌅 2 SambaNova 20/min · 20/day · 200K tokens/day per model every day
🌅 3 Gemini per project, numbers inside AI Studio midnight Pacific
🌅 4 Cloudflare AI 10,000 neurons/day 00:00 UTC
♾️ 5 Z.ai GLM-Flash GLM-4.7-Flash · 4.5-Flash · 4.6V-Flash, priced Free
🌅 6 OpenRouter :free 50/day (1,000/day once you ever bought $10) every day
🗓️ 7 Kiro 50 credits, Sonnet 4.5 + open models every month
🔓 8 LLM7.io key = the word unused · 10/min no key, always last
⚡ minute 🌅 daily 🗓️ monthly ♾️ always free 🔓 no key
Keys and live quota pages: Groq · SambaNova · Gemini · Cloudflare · Z.ai · OpenRouter · Kiro · LLM7
Your router’s drawer = one block to paste.
🎛️ OmniRoute — one curl, strategy fill-first, type free-list as the model
Keys: Dashboard → Providers → Add Provider. Strategy fill-first = use the first target until it’s full, then the next.
curl -X POST http://localhost:20128/api/combos \
-H "Authorization: Bearer $OMNIROUTE_KEY" -H "Content-Type: application/json" \
-d '{
"name": "free-list",
"strategy": "fill-first",
"targets": [
{ "provider": "groq", "model": "openai/gpt-oss-120b" },
{ "provider": "google", "model": "gemini-2.5-flash" },
{ "provider": "openrouter", "model": "nvidia/nemotron-3-ultra-550b-a55b:free" },
{ "provider": "kiro", "model": "claude-sonnet-4.5" }
]
}'
Model name in Cline / Cursor / any client: free-list.
omniroute quota→ remaining quota and reset time per provider.PUT /api/settings {"freeAccessPolicy":"strict"}→ paid tiers stay off.- Model name
autoskips your combos. Typefree-list.
🧾 freellmapi — one JSON file, called as auto:free-list
Save as freellmapi.config.json → FREEAPI_CONFIG_PATH=/path/to/it → restart (doc). fallback = the order.
{
"keys": [
{ "platform": "groq", "key": "gsk_...", "label": "main" },
{ "platform": "google", "key": "AIza..." },
{ "platform": "openrouter", "key": "sk-or-..." }
],
"fallback": [
{ "platform": "groq", "modelId": "openai/gpt-oss-120b", "priority": 1 },
{ "platform": "google", "modelId": "gemini-2.5-flash", "priority": 2 },
{ "platform": "openrouter", "modelId": "nvidia/nemotron-3-ultra-550b-a55b:free", "priority": 3 },
{ "platform": "llm7", "modelId": "default", "priority": 4 }
],
"routing": { "strategy": "priority" }
}
Model name: auto:free-list. Each reply shows X-Routed-Via: groq/...; after a switch, X-Fallback-Trail: groq/... key1=rate_limited; google/... key2=timeout (headers). Switch rules: daily 429 → that model + key rests until UTC midnight · minute 429 → 90 s · 402 → key rests 24 h.
🔢 9router — Combos → Create New, or one POST
9router uses its own provider codes (kr/ = Kiro, if/ = iFlow, qw/ = Qwen). Its free chain (combo docs):
Dashboard → Combos → Create New
Name: free-list
Models:
1. kr/claude-sonnet-4.5 (Kiro, 50 credits/month)
2. kr/glm-5 (Kiro)
3. if/kimi-k2-thinking (iFlow, the last one)
Strategy: Fallback — try in order
Without the UI: POST http://localhost:20128/api/combos with {"name":"free-list","models":["kr/claude-sonnet-4.5","kr/glm-5","if/kimi-k2-thinking"]}. Entries = plain provider/model strings; no / in the combo name. Client: base URL http://localhost:20128/v1, model free-list.
🧯 Why it does not switch, and the fix
- OmniRoute ignores HTTP 402 (OpenRouter “credits gone”), so OpenRouter stays in the pool. Put OpenRouter in freellmapi, or below the daily providers in OmniRoute.
- OmniRoute reads Groq’s reset header
7.66sas7; freellmapi reads it right. Groq stays first either way, it refills in a minute. - 9router switches on every error: a wrong provider costs one request, never a stop.
🧪 See who has room before you send
- Groq:
curl -sI https://api.groq.com/openai/v1/models -H "Authorization: Bearer $GROQ_API_KEY"→ remaining-quota headers, zero tokens spent. - OpenRouter:
GET https://openrouter.ai/api/v1/keyreturnslimit_remaining. - All keys at once:
npx llm-limits-tracker→ paste keys → remaining per minute and per day.
Groq on top, LLM7 with the word unused last. Paste your router’s block, type free-list, done.
This is THE SHIT SRZ. TY Very Much!!!
Hehe, I sometime ask dumb questions but it help everybody ![]()
!