OpenRouter puts hundreds of AI models behind a single OpenAI-compatible API key — and a rotating set of them costs nothing at all. No credit card is asked for at any point in the free workflow. Here is exactly how to sign up, create a key, find the models that are actually free right now, and make your first call.
What OpenRouter's free models actually are
OpenRouter is an API gateway: one key, one base URL, and you can switch between models from different providers by changing a string. Models whose IDs end in :free cost $0 per token. The free lineup rotates as providers join and leave the program, but recent snapshots have included NVIDIA's Nemotron 3 family, Google's Gemma 4 models, Cohere North Mini Code, Poolside Laguna models, OpenAI's gpt-oss models, Liquid LFM2.5, and a preview model or two. There is also a special router model called openrouter/free that picks one of the available free models for you.
Two limits apply to free-model calls: 20 requests per minute, and 50 requests per day on an account that has never bought credits. Buying $10 of credits once (optional) raises the daily free-model cap to 1,000 per day; it does not require a recurring subscription, and credits never expire. But the core promise holds: signup and free-model usage work with no card on file.
One honest caveat before you start: some free routes log or train on prompts per the upstream host's policy, and providers can 429 you independently of your own quota when they are saturated. So never send private data through free models, and treat the free tier as great for prototyping, side projects, and learning — not for production SLAs.
Step 1: Create your OpenRouter account
Go to openrouter.ai and sign up with Google, GitHub, or email. This is the entire billing section of the setup: there isn't one. OpenRouter does not ask for a credit card to create an account, and your balance starts at $0, which is all you need for :free models.
After signing in, note your dashboard. The "Keys" page is where API keys live, and the "Models" page lists every model with its current price — type free in the search to see the current free lineup.
Step 2: Create your API key
1. Go to the Keys page at openrouter.ai/keys.
2. Click Create Key.
3. Give it a name like blog-demo so you can revoke it later.
4. Copy the key — it starts with sk-or-v1-... — and store it somewhere safe, for example a .env file.
Treat this key like a password: anyone with it can spend your balance (including paid models if you ever add credits). If it leaks, delete it from the Keys page and create a new one.
Step 3: Pick a working free model
This is the step most tutorials skip, and it is the one that trips people up: the free list changes. A model ID from a three-month-old blog post may have been retired. So before you hard-code anything, check the live list:
- Open the OpenRouter Models page, search
free, and confirm the exact model ID you want is listed with $0 pricing. - Good recent candidates have included
cohere/north-mini-code:free(solid agentic coding),poolside/laguna-xs-2.1:free,google/gemma-4-31b-it:free,nvidia/nemotron-3-ultra-550b-a55b:free(big 1M context), andopenai/gpt-oss-120b:free. - If you do not care which model answers, use
openrouter/free. It auto-routes to an available free model, which also smooths over individual models being retired or rate-limited.
For this guide's examples I will use openrouter/free for maximum compatibility, with a named model as the alternative.
Step 4: Make your first API call
OpenRouter's base URL is https://openrouter.ai/api/v1 and the chat endpoint matches the OpenAI shape, so anything that speaks OpenAI's API can be pointed at it.
With curl:
curl -X POST https://openrouter.ai/api/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_KEY_HERE" \
-d '{
"model": "openrouter/free",
"messages": [
{"role": "user", "content": "Explain recursion in one sentence."}
]
}'With Python (the OpenAI SDK works unchanged apart from the base URL):
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="YOUR_KEY_HERE",
)
response = client.chat.completions.create(
model="openrouter/free",
messages=[{"role": "user", "content": "Explain recursion in one sentence."}],
)
print(response.choices[0].message.content)If the call returns a 402, your balance went negative at some point (spending credits you didn't have) — free-model access is blocked until it is resolved. A 429 usually means the upstream provider is saturated, not you: wait a bit or retry with openrouter/free, which can pick a different backend. A 404 with "model not found" almost always means the model ID was retired — go back to Step 3 and pick a current one.
Understand the limits before you build on them
The three numbers to remember:
- 20 requests per minute per account on free models. This one is fixed; even buying credits does not raise it.
- 50 requests per day on free models if you have never bought credits.
- 1,000 requests per day on free models after a one-time $10 credit purchase.
Concurrent requests are capped low on the free tier (around 5), and during peak hours you may be briefly queued. Because 50 requests a day goes fast, design around it: batch your prompts, cache answers for repeated queries, and keep a local SQLite log so you are not re-asking the model for things it already answered.
Five practical ways to stretch the free tier
1. Use openrouter/free as the default. When one backend saturates, the router can shift you to another, which saves you from burning requests on retries.
2. Keep prompts tight. Short prompts with clear instructions cost fewer requests per task and leave more headroom in your 50/day.
3. Cache aggressively. Hash the prompt and store the response; for dev loops and content drafts, most repeated calls are re-asks of the same question.
4. Use the right small model for the job. You do not need a 550B-class model to format JSON or write commit messages; the smaller free models are faster and under the same quota.
5. Check the /key endpoint to see your remaining daily allowance programmatically — the free_model_daily_requests field tells you limit, used, and remaining.
The optional one-time $10 upgrade
If 50 requests a day cramps your style, the upgrade path is unusually honest: a single $10 credit purchase (credits never expire) lifts free-model calls to 1,000 per day. It also unlocks paid models priced per token. You are not subscribing to anything, and the free tier keeps working without it. Skip it until you actually hit the 50/day wall twice in one week — that is the signal you have a real use case.

