# Free Token Limits

**URL:** <https://onehack.st/t/free-token-limits/325065>\
**Category:** Discussion & Solutions\
**Tags:** solved\
**Created:** [August 25, 2026, 10:31pm UTC](https://onehack.st/t/free-token-limits/325065 "2026-08-25T22:31:40Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Vishal\_Jain2](https://onehack.st/user_avatar/onehack.st/vishal_jain2/32/173048_2.png) [@Vishal\_Jain2](https://onehack.st/u/Vishal_Jain2)\
**Post date:** [August 25, 2026, 10:31pm UTC](https://onehack.st/t/free-token-limits/325065/1 "2026-08-25T22:31:40Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![SRZ](https://onehack.st/user_avatar/onehack.st/srz/32/146132_2.png) [@SRZ](https://onehack.st/u/SRZ)\
**Post date:** [August 28, 2026, 6:09pm UTC](https://onehack.st/t/free-token-limits/325065/2 "2026-08-28T18:09:27Z")

</div>

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](https://ai.google.dev/gemini-api/docs/rate-limits)

10 keys in 1 project = 1 allowance.  
10 projects = 10 allowances. Same account, one click each. [Make them here](https://aistudio.google.com/apikey)

Do this before you touch any router. It is free size.

### ⏱ Then order the list by the clock

```auto
   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](https://github.com/diegosouzapw/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](https://github.com/diegosouzapw/OmniRoute/blob/main/docs/routing/AUTO-COMBO.md)

**[9router](https://github.com/decolua/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](https://deepwiki.com/decolua/9router/3.3-model-aliases-and-combos)

**[freellmapi](https://github.com/tashfeenahmed/freellmapi)** — Keys page → drag the **Fallback Chain** into that order. [how](https://github.com/tashfeenahmed/freellmapi/blob/main/docs/install.md)

### 👁 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](https://github.com/iammalego/keymux)** — checks who has room **before** sending. The error never happens.
- **[llm-keypool](https://github.com/piyush-tyagi-13/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](https://github.com/0xzr/freellmpool) — 24 providers, least-used first
> - [llm-apipool](https://github.com/GFardad/llm-apipool) — 40+ providers, CLI / TUI / proxy
> - [llmux](https://github.com/shaik-shahansha/llmux) — 5 orders to choose from, no database
> - [OpenRouter fallbacks](https://openrouter.ai/docs/guides/routing/model-fallbacks) — `"models": ["a","b","c"]`, nothing to install

> **🚩 Old advice that is now wrong**
>
> “Pollinations needs no key” — not true any more. [Their docs](https://gen.pollinations.ai/docs) now require a key for everything. Some lists still show it as keyless.

Tools change every month. The clock order does not.

---

<div class="post-metadata">

**Author:** ![Vishal\_Jain2](https://onehack.st/user_avatar/onehack.st/vishal_jain2/32/173048_2.png) [@Vishal\_Jain2](https://onehack.st/u/Vishal_Jain2)\
**Post date:** [August 29, 2026, 1:07am UTC](https://onehack.st/t/free-token-limits/325065/3 "2026-08-29T01:07:42Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![niggaplsss](https://onehack.st/user_avatar/onehack.st/niggaplsss/32/157170_2.png) [@niggaplsss](https://onehack.st/u/niggaplsss)\
**Post date:** [August 29, 2026, 3:32am UTC](https://onehack.st/t/free-token-limits/325065/4 "2026-08-29T03:32:32Z")

</div>

I was not able to understand what SRZ’s English. I need a translator..

---

<div class="post-metadata">

**Author:** ![system](https://onehack.st/user_avatar/onehack.st/system/32/165705_2.png) [@system](https://onehack.st/u/system)\
**Post date:** [September 2, 2026, 1:20am UTC](https://onehack.st/t/free-token-limits/325065/5 "2026-09-02T01:20:19Z")

</div>

> [@SRZ](#):
>
> 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. …

**📈 The answer above is now AI-improved by the Core-Community.**

---

<div class="post-metadata">

**Author:** ![SRZ](https://onehack.st/user_avatar/onehack.st/srz/32/146132_2.png) [@SRZ](https://onehack.st/u/SRZ)\
**Post date:** [September 2, 2026, 1:28pm UTC](https://onehack.st/t/free-token-limits/325065/6 "2026-09-02T13:28:45Z")

</div>

The combo order isn’t “best model first.” It’s **refill speed first**.

([9router](https://github.com/decolua/9router) · [OmniRoute](https://github.com/diegosouzapw/OmniRoute) · [freellmapi](https://github.com/tashfeenahmed/freellmapi))

```auto
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](https://github.com/diegosouzapw/OmniRoute/blob/main/docs/routing/AUTO-COMBO.md) (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.

---

<div class="post-metadata">

**Author:** ![SRZ](https://onehack.st/user_avatar/onehack.st/srz/32/146132_2.png) [@SRZ](https://onehack.st/u/SRZ)\
**Post date:** [September 12, 2026, 3:07pm UTC](https://onehack.st/t/free-token-limits/325065/7 "2026-09-12T15:07:01Z")

</div>

### (☞ﾟヮﾟ)☞ 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.

```auto
 # 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](https://console.groq.com/docs/rate-limits) · [SambaNova](https://docs.sambanova.ai/docs/en/models/rate-limits) · [Gemini](https://aistudio.google.com/apikey) · [Cloudflare](https://developers.cloudflare.com/workers-ai/platform/pricing/) · [Z.ai](https://docs.z.ai/guides/overview/pricing) · [OpenRouter](https://openrouter.ai/docs/faq) · [Kiro](https://kiro.dev/pricing/) · [LLM7](https://docs.llm7.io/quickstart)

👇 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](https://github.com/diegosouzapw/OmniRoute/discussions/2413)** = use the first target until it’s full, then the next.
> 
> ```bash
> 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"}`](https://github.com/diegosouzapw/OmniRoute/blob/main/docs/routing/STRICT_ZERO_COST.md) → paid tiers stay off.
> - Model name `auto` [skips your combos](https://github.com/diegosouzapw/OmniRoute/blob/main/docs/routing/AUTO-COMBO.md). Type `free-list`.

> **🧾 freellmapi — one JSON file, called as auto:free-list**
>
> Save as `freellmapi.config.json` → `FREEAPI_CONFIG_PATH=/path/to/it` → restart ([doc](https://github.com/tashfeenahmed/freellmapi/blob/main/docs/en/install/01-install.md#declarative-startup-config)). `fallback` = the order.
> 
> ```json
> {
> "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](https://github.com/tashfeenahmed/freellmapi/blob/main/docs/en/api/01-rest-api.md#response-headers)). [Switch rules](https://github.com/tashfeenahmed/freellmapi/blob/main/docs/en/architecture/04-degraded-mode-and-failover.md): 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](https://github.com/decolua/9router) ([combo docs](https://github.com/decolua/9router/blob/master/gitbook/content/en/features/combos.md)):
> 
> ```auto
> 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`](https://github.com/KovalevAnton/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.

---

<div class="post-metadata">

**Author:** ![BCBC](https://onehack.st/user_avatar/onehack.st/bcbc/32/174133_2.png) [@BCBC](https://onehack.st/u/BCBC)\
**Post date:** [September 13, 2026, 7:53am UTC](https://onehack.st/t/free-token-limits/325065/8 "2026-09-13T07:53:27Z")

</div>

This is THE SHIT SRZ. TY Very Much!!!

---

<div class="post-metadata">

**Author:** ![Vishal\_Jain2](https://onehack.st/user_avatar/onehack.st/vishal_jain2/32/173048_2.png) [@Vishal\_Jain2](https://onehack.st/u/Vishal_Jain2)\
**Post date:** [September 14, 2026, 5:57am UTC](https://onehack.st/t/free-token-limits/325065/9 "2026-09-14T05:57:40Z")

</div>

Hehe, I sometime ask dumb questions but it help everybody 🙂
