A developer was using OpenAI for GPT-4, Anthropic for Claude, Google for Gemini. Three API keys, three billing dashboards, three SDK versions. Then he found OpenRouter — one API, one key, 100+ models.
What OpenRouter Offers
OpenRouter:
- Free models available — Llama 3, Gemma, Mistral (free tiers)
- 100+ models — GPT-4, Claude, Gemini, Llama, Mistral, and more
- One API key — access all providers
- OpenAI-compatible — drop-in replacement for OpenAI SDK
- Fallback routing — if one provider is down, auto-switch
- Pay-per-token — only pay for what you use
- No minimums — add $5 credit and start
Quick Start
# Use OpenAI SDK with OpenRouter
npm install openai
import OpenAI from 'openai';
const openai = new OpenAI({
baseURL: 'https://openrouter.ai/api/v1',
apiKey: process.env.OPENROUTER_API_KEY
});
// Use any model with the same API
const completion = await openai.chat.completions.create({
model: 'anthropic/claude-3.5-sonnet', // or 'openai/gpt-4o', 'google/gemini-pro', etc.
messages: [{ role: 'user', content: 'Explain quantum computing' }]
});
console.log(completion.choices[0].message.content);
Free Models
// These models are FREE on OpenRouter:
const freeModels = [
'meta-llama/llama-3-8b-instruct:free',
'google/gemma-7b-it:free',
'mistralai/mistral-7b-instruct:free',
'huggingfaceh4/zephyr-7b-beta:free'
];
// Use any free model
const response = await openai.chat.completions.create({
model: 'meta-llama/llama-3-8b-instruct:free',
messages: [{ role: 'user', content: 'Write a haiku about programming' }]
});
REST API
# Chat completion
curl 'https://openrouter.ai/api/v1/chat/completions' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"model": "anthropic/claude-3.5-sonnet",
"messages": [{"role": "user", "content": "Hello!"}]
}'
# Streaming
curl 'https://openrouter.ai/api/v1/chat/completions' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"model": "openai/gpt-4o",
"messages": [{"role": "user", "content": "Tell me a story"}],
"stream": true
}'
# List available models
curl 'https://openrouter.ai/api/v1/models'
# Check your credits
curl 'https://openrouter.ai/api/v1/auth/key' \
-H 'Authorization: Bearer YOUR_API_KEY'
Model Routing (Fallback)
// Auto-fallback: if Claude is down, use GPT-4
const response = await openai.chat.completions.create({
model: 'anthropic/claude-3.5-sonnet',
messages: [{ role: 'user', content: 'Hello' }],
// OpenRouter automatically falls back to available providers
});
// Or specify fallback chain
const response2 = await fetch('https://openrouter.ai/api/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.OPENROUTER_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'anthropic/claude-3.5-sonnet',
route: 'fallback',
models: ['anthropic/claude-3.5-sonnet', 'openai/gpt-4o', 'google/gemini-pro'],
messages: [{ role: 'user', content: 'Hello' }]
})
});
Compare Models
// Test the same prompt across models
const models = [
'openai/gpt-4o',
'anthropic/claude-3.5-sonnet',
'google/gemini-pro',
'meta-llama/llama-3-70b-instruct'
];
const results = await Promise.all(
models.map(async (model) => {
const start = Date.now();
const res = await openai.chat.completions.create({
model,
messages: [{ role: 'user', content: 'Explain recursion in one sentence' }],
max_tokens: 100
});
return {
model,
response: res.choices[0].message.content,
latency: Date.now() - start,
tokens: res.usage?.total_tokens
};
})
);
console.table(results);
Why OpenRouter
| OpenRouter | Direct APIs |
|---|---|
| 1 API key | 5+ API keys |
| 1 billing dashboard | 5+ dashboards |
| Auto-fallback | Manual error handling |
| Free models included | Each provider's free tier |
| OpenAI SDK compatible | Different SDKs per provider |
Need AI-powered data extraction? Check out my web scraping actors on Apify.
Need AI integration? Email me at spinov001@gmail.com.
Top comments (0)