Free Token Limits

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.

:1st_place_medal: 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.

:stopwatch: 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.

:computer_mouse: 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

:eye: 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.

:high_voltage: 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
🚩 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..

:chart_increasing: 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

:key: Keys and live quota pages: Groq · SambaNova · Gemini · Cloudflare · Z.ai · OpenRouter · Kiro · LLM7

:backhand_index_pointing_down: 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.

🧾 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.66s as 7; 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/key returns limit_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 :slight_smile: