Every free LLM API we can read from a public source, ranked every day by an open quality score β with who actually serves each model and whether they may train on your prompts.
Three things this list does that a plain list of free models does not:
- It ranks by measured quality. Published benchmark indices and LM Arena ratings, combined by one small file you can read and re-run. Not alphabetical, not by context window, not by hand.
- It tells you who gets your prompts. A free model is often served by a host with a different data policy from the lab that made it. Each row says whether that host may train on what you send, and how long it keeps it.
- It is data, not just a page.
data/models.jsonis regenerated daily with every score and every input the score was computed from, and a snapshot of each day is kept indata/history/.
No key needed to read any of it. No scraping: only public, official APIs.
Last updated: Tue, 13 Oct 2026 11:31:43 UTC Β· 16 free chat models Β· ranked by the open score in this repo Β· free-tier limits are the provider's, per account12
5 of today's top 10 are served only by providers that may train on your prompts.
| # | Model | Score | Measured by | Trains on your prompts? | Context | Max output | Tools | Input | Today | Source |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Thinking Machines: Inkling | 68 | benchmarks + Arena | π΄ may train | 1M | 262K | β | πΌοΈ vision, audio | β | link |
| 2 | NVIDIA: Nemotron 3 Ultra | 66 | benchmarks + Arena | π΄ may train | 1M | 66K | β | π¬ text | β | link |
| 3 | inclusionAI: Ling 3.1 Flash | 65 | benchmarks | β no Β· zero retention | 262K | 236K | β | π¬ text | β | link |
| 4 | Thinking Machines: Inkling Small | 65 | benchmarks + Arena | π΄ may train | 1M | 262K | β | πΌοΈ vision, audio | β | link |
| 5 | Google: Gemma 4 31B | 57 | benchmarks + Arena | β no Β· kept 55 days | 262K | 33K | β | πΌοΈ vision, video | β up | link |
| 6 | Google: Gemma 4 26B A4B | 55 | benchmarks + Arena | β no Β· kept 55 days | 262K | 33K | β | πΌοΈ vision, video | βΆ answering | link |
| 7 | NVIDIA: Nemotron 3 Super | 46 | benchmarks + Arena | π΄ may train | 262K | 236K | β | π¬ text | β | link |
| 8 | NVIDIA: Nemotron 3.5 Lightning | 36 | benchmarks + Arena | π΄ may train | 1M | 66K | β | π¬ text | β | link |
| 9 | Poolside: Laguna S 2.1 β³ retiring 2026-10-31 |
34 | estimate (size) | β no Β· retention unknown | 262K | 33K | β | π¬ text | link | |
| 10 | Poolside: Laguna XS 2.1 β³ retiring 2026-10-31 |
26 | estimate (size) | β no Β· retention unknown | 262K | 33K | β | π¬ text | link | |
| 11 | Cohere: North Mini Code | 23 | benchmarks | β no Β· kept 30 days | 256K | 64K | β | π¬ text | β up | link |
| 12 | NVIDIA: Nemotron 3 Nano Omni | 15 | benchmarks | π΄ may train | 256K | 66K | β | audio, πΌοΈ vision, video | β | link |
| 13 | Apodex: Apodex 1.1 Mini | 13 | estimate (size) | β no Β· zero retention | 262K | 236K | β | π¬ text | β up | link |
| 14 | Dots Studio: Dots3-Note Preview β³ retiring 2026-12-31 |
13 | estimate (size) | β no Β· retention unknown | 512K | 461K | β | πΌοΈ vision | β up | link |
| 15 | LiquidAI: LFM2.5-2.6B | 9 | benchmarks | π΄ may train | 66K | 8K | β | π¬ text | β | link |
| 16 | GPT-OSS 20B Reasoning LLM (OVH) | β | β | β | β | β | β | π¬ text | β | link |
3 free models that are not chat models (music, image, audio, classifiers):
How to read the table
- Score β 0β100, from
scoring/score.js. 100 would be a free model as good as the best model anyone sells; nothing free is close. - Measured by β what the score rests on:
benchmarks + Arenais the strongest basis, one of the two alone is discounted, and anestimatemeans nobody has measured the model yet (it is capped so it cannot outrank a measured one). - Trains on your prompts? β the policy of the provider serving the free
endpoint on OpenRouter, from
OpenRouter's provider table
(last read by hand on 2026-10-10), plus how long that provider keeps
prompts.
βmeans we could not establish it; we do not guess. - Today β whether the free endpoint is actually answering. A GitHub Action
has no traffic to know that, so this one column is borrowed from the
production health checks of ZeroLimitAI's
router, which is built by this repo's maintainers. It only probes the models
it routes to, and it does not route to providers that may train, so those
rows show
β. - β³ retiring β the provider has published a shutdown date. The model works today and stops without further notice on that date.
Free-tier limits are the provider's and belong to the account, not the model:
on OpenRouter every :free id shares 20 requests/minute and 50 requests/day
(1,000/day once the account has bought $10 in credits).1
Free inference is free because someone gets something back, and sometimes that something is your prompts. Whether it matters is your call; the point is to know before you send a customer's data.
- The column describes the free endpoint on OpenRouter. The same model called somewhere else is under that provider's own terms, which can differ: a provider's own unpaid tier is not necessarily covered by what OpenRouter's table says about the endpoint it serves. Read the terms of wherever you call.
- OpenRouter describes its table as its best knowledge of each provider's
policy, not a definitive source. This repo copies it for the providers that
serve free models (
scoring/sources.js, with the date it was read). If a row is wrong, open an issue. - On OpenRouter you can refuse those providers per request, so a model served by several hosts only goes to the ones that do not train:
{
"model": "google/gemma-4-31b-it:free",
"provider": { "data_collection": "deny" },
"messages": [{ "role": "user", "content": "Hello!" }]
}The file is plain JSON at a stable URL:
https://raw.githubusercontent.com/ClawLabsAI/free-ai-models/main/data/models.json
The best free model today that supports tools and is not served by a provider that may train:
curl -s https://raw.githubusercontent.com/ClawLabsAI/free-ai-models/main/data/models.json \
| jq -r '[.models[] | select(.rank and .supports_tools and .data_use == "no-training")][0].id'const { models } = await (await fetch(
"https://raw.githubusercontent.com/ClawLabsAI/free-ai-models/main/data/models.json",
)).json();
// A fallback chain: ranked, tool-capable, no training, best first.
const chain = models
.filter((m) => m.rank && m.supports_tools && m.data_use === "no-training")
.map((m) => m.id);import requests
from openai import OpenAI
models = requests.get(
"https://raw.githubusercontent.com/ClawLabsAI/free-ai-models/main/data/models.json"
).json()["models"]
best = next(m["id"] for m in models if m["rank"] and m["data_use"] == "no-training")
client = OpenAI(base_url="https://openrouter.ai/api/v1", api_key="YOUR_OPENROUTER_KEY")
print(client.chat.completions.create(
model=best, messages=[{"role": "user", "content": "Hello!"}]
).choices[0].message.content)The ids are OpenRouter ids, so they work as-is anywhere that takes one: the
OpenAI SDKs pointed at OpenRouter, LiteLLM (openrouter/<id>), and coding
tools such as Cline, Roo Code, Continue, Aider and OpenCode.
| Field | Meaning |
|---|---|
id, name, provider |
The model's id on its source, its display name, and the lab that made it |
kind |
chat (answers in text) or other (music, image, audio generators) |
rank, score |
Position and 0β100 score among today's free chat models; null if not ranked |
quality |
The score before the fitness factor (context, output, tools, shutdown date) |
basis |
benchmarks+arena, benchmarks, arena, family or prior β what the score rests on |
notes |
Why the score is what it is: imputed benchmarks, no tool calling, expires in N days⦠|
excluded |
Why a model is not ranked (a classifier, not text-only, expired), or null |
benchmarks |
Artificial Analysis indices as published by OpenRouter: intelligence, coding, agentic |
arena |
LM Arena ratings: overall, coding, instruction_following, spanish, and votes |
hf |
From the Hugging Face model card: paramsB (billions of parameters), downloads, pipelineTag |
served_by |
The provider(s) behind the free endpoint |
data_use |
no-training, mixed, may-train, or null when unknown |
retention |
How long that provider keeps prompts: "zero", days, "unknown", or null |
context_window, max_output |
Tokens |
supports_tools, supports_structured_outputs |
As declared by the endpoint |
modalities |
Inputs and outputs: text, image, audio, video, file |
expires |
Shutdown date published by the provider, or null |
health, answering_now |
Live status from ZeroLimitAI's router; null when it does not probe the model |
zo_score, zo_rank |
Aliases of score (rounded) and rank, kept for readers written before 2026-10-10 |
The top-level scoring object records the benchmark maxima used that day and
whether the Arena table was available, so any day's ranking can be recomputed
from its own snapshot.
The whole method is scoring/score.js (pure: no network,
no clock) and its inputs come from scoring/sources.js.
The longer explanation, with every weight and why it is what it is, is in
scoring/README.md. In short:
- Benchmarks β Artificial Analysis intelligence, coding and agentic indices, normalised to the best model in the whole catalogue (paid ones included). A missing index is imputed at a discount, never dropped, so reporting less cannot raise a score.
- Preference β LM Arena ratings (overall, coding, instruction following).
- With both, they are blended 55/45; with one, it is discounted 8 %.
- No measurement at all β the model inherits 80 % of a measured sibling in its family, or gets a prior from its real size and downloads, capped below any well-measured model.
- Fitness β small factors for what matters when you build on a model: context under 32K, output under 4K, no tool calling, a shutdown date within a week.
Whether a model is answering right now is deliberately not in the score: a model that is rate-limited this hour is still the better model.
git clone https://github.com/ClawLabsAI/free-ai-models && cd free-ai-models
npm ci
npm test # the scoring rules
npm run update # rebuild today's ranking from the public sourcesDisagree with a weight? Change it, run it, and open a pull request with the ranking it produces. That is what the file is for.
For anyone wiring up a provider directly. All of them speak the OpenAI shape
unless noted, so base_url is the only change.
| Provider | Base URL | Free tier | Key | Checked |
|---|---|---|---|---|
| OpenRouter | https://openrouter.ai/api/v1 |
Every :free model: 20 RPM, 50 RPD per account (1,000 RPD after $10 in credits) 1 |
Yes, no card | 2026-10-10 |
| Pollinations | https://text.pollinations.ai |
Anonymous tier, rotating model list 2 | No key | 2026-09-23 |
| OVHcloud AI Endpoints | https://oai.endpoints.kepler.ai.cloud.ovh.net/v1 |
Catalogue is public and keyless; the anonymous chat tier is 2 RPM per IP and in practice answers 429 most of the time 3 |
No key | 2026-09-23 |
| Groq | https://api.groq.com/openai/v1 |
Free plan, per-model limits β published table | Yes, no card | β |
| Google AI Studio | https://generativelanguage.googleapis.com/v1beta/openai |
Free tier per model β published limits | Yes, no card | β |
| Cerebras | https://api.cerebras.ai/v1 |
Free tier β published limits | Yes | β |
| Cloudflare Workers AI | https://api.cloudflare.com/client/v4/accounts/{id}/ai/v1 |
10,000 Neurons/day shared across all models β pricing | Yes | β |
A blank Checked means we link the provider's own limits page but have not verified the numbers ourselves β treat their page as the source of truth. Free tiers are meant for building and trying things; read each provider's terms before putting one behind a product.
GitHub Actions (daily, 04:00 UTC)
β
βΌ
scripts/fetch-models.js
β
βββ OpenRouter /api/v1/models catalogue, prices, benchmark indices
βββ OpenRouter /models/{id}/endpoints who serves each free endpoint
βββ LM Arena leaderboard (Hugging Face) human-preference ratings
βββ Hugging Face /api/models/{id} real size and downloads
βββ Pollinations /models anonymous tier
β
βββ scoring/score.js rank
β
βββ writes data/models.json Β· data/history/YYYY-MM-DD.json Β· README tables
Watch β Custom β Releases to get one summary a week (new models, retired models, changes at the top) instead of a daily commit.
- A model is missing or a row is wrong β it is read from the provider's own API, so it usually fixes itself within a day. If it does not, open an issue.
- A new provider β welcome if it can be read the same way: live, from its own public API. See CONTRIBUTING.md.
- The score β pull requests that change a weight should say what ranking the change produces and why that ranking is better.
The team behind ZeroLimitAI, a hosted AI app and API whose router ranks free models with this same function. We keep the list accurate because our own product depends on it; the list itself stays MIT, provider-neutral and useful without us β a model belongs here whether or not we route to it, and several of the highest-ranked ones we do not.
- awesome-free-llm-apis β a wider, hand-curated catalogue of providers with free tiers
- FreeLLMAPI and free-claude-code β self-hosted routers that stack free tiers using your own keys
- LiteLLM β one SDK and proxy for every provider
- LM Arena and Artificial Analysis β where the measurements come from
MIT β use freely, attribution appreciated.
Footnotes
-
OpenRouter, Free usage limits (checked 2026-10-10). The cap is global per account β extra API keys or accounts do not widen it. β© β©2 β©3
-
Pollinations serves an anonymous tier with no API key. Which models are in it changes; this list reads their live catalogue every day and keeps the models marked
tier: "anonymous". They are listed unscored: no public benchmark data is attached to them. β© β©2 -
OVHcloud publishes a permanent anonymous tier (no signup, no key) limited to 2 requests/minute per IP per model. Their
/v1/modelscatalogue answers without a key; on 2026-09-23 four chat completions from two different models, spaced over several minutes, all returnedAPI rate limit exceeded. β©