OpenRouter en une phrase — et pourquoi les équipes s'y tournent
OpenRouter est une passerelle LLM : vous authentifiez vos requêtes avec Authorization: Bearer $OPENROUTER_API_KEY, vous postez sur https://openrouter.ai/api/v1/chat/completions, et vous accédez à GPT, Claude, Gemini, Llama, DeepSeek, Qwen ou Mistral sans ouvrir un compte chez chaque éditeur.
Dans le quotidien d'un développeur Apple Silicon, l'intérêt est opérationnel : le même client OpenAI SDK que vous utilisez déjà pour un prototype Swift ou un backend Node.js suffit — il suffit de remplacer base_url et la clé. Les modèles se nomment fournisseur/modèle, par exemple openai/gpt-4o ou anthropic/claude-3.5-sonnet.
Ce qui distingue OpenRouter d'un simple proxy, ce sont deux décisions de routage indépendantes :
| Couche | Question résolue | Levier |
|---|---|---|
| Routage modèle | Quel modèle répond à la requête | Champ model, ou openrouter/auto pour une sélection automatique |
| Routage fournisseur | Quel backend sert ce modèle | Objet provider ; par défaut, pondération favorisant prix et stabilité |
Si le fournisseur principal est saturé ou renvoie une erreur, OpenRouter bascule vers le suivant ou vers le modèle suivant dans votre chaîne models — sans que vous implémentiez vous-même un circuit breaker dans l'application.
Les frictions typiques sans passerelle — création de comptes parallèles, gestion de quotas hétérogènes, rapprochement manuel des factures — sont précisément ce qu'OpenRouter cherche à absorber.
OpenRouter face aux API directes — comment trancher
OpenRouter ne remplace pas les SDK officiels ; il les unifie derrière une interface commune. Le tableau ci-dessous résume les compromis que nous observons le plus souvent en production légère et en phase d'exploration.
| Critère | OpenRouter | API directes |
|---|---|---|
| Comptes et clés | Un seul Key OpenRouter | Un compte par éditeur |
| Migration SDK | Modifier base_url et api_key | SDK et protocoles parfois divergents |
| Résilience | Basculer de fournisseur + fallback modèle intégrés | Retry et failover à coder |
| Facturation | Dashboard unifié | Plusieurs consoles à rapprocher |
| Prix token | Tarif éditeur sans markup token (selon FAQ) | Tarif officiel ; remises enterprise possibles |
| Frais annexes | 5,5 % à l'achat de crédits (min. 0,80 $) ; +5 % en crypto | Pas de couche intermédiaire |
| Latence | Hop supplémentaire, typiquement 10–80 ms | Chemin le plus court |
| Fonctions avancées | Chat Completions générique | Prompt Caching, Batch API, Assistants, Vertex AI, etc. |
Cinq atouts concrets — et les cas où il vaut mieux passer outre
Atout 1 — Un Key, tous les modèles : changer de modèle revient à modifier une chaîne model, pas à réécrire une couche d'adaptation.
Atout 2 — Failover automatique : déclarez une liste models avec route: "fallback" ; OpenRouter enchaîne les tentatives.
Atout 3 — Visibilité consolidée : coûts, TTFT et débit par modèle dans un seul tableau de bord.
Atout 4 — Pas de markup sur les tokens : la FAQ OpenRouter indique une facturation au tarif éditeur ; la marge se concentre sur l'achat de crédits (5,5 %, minimum 0,80 $).
Atout 5 — Cas d'usage nets : prototypage rapide, A/B multi-modèles, applications à volume modéré (quelques milliers de dollars par mois), agents nécessitant une haute disponibilité sans équipe dédiée au routage.
Quand éviter OpenRouter : vous ne consommez qu'un seul modèle à très gros volume (les 5,5 % sur les crédits deviennent significatifs), vous avez besoin de capacités exclusives (Prompt Caching Anthropic, Batch API OpenAI, toolchain Vertex), la latence est critique au millisecond près, ou vos exigences de souveraineté des données interdisent le transit par une passerelle américaine — dans ces scénarios, l'API directe ou le mode BYOK avec vos propres clés reste plus adapté.
Six étapes pour brancher OpenRouter dans votre workflow
Nous recommandons une machine macOS propre — idéalement un Mac mini M4 loué — pour isoler les dépendances Python ou Node.js de votre poste principal.
- Créer un compte : inscription sur openrouter.ai via GitHub ou e-mail.
- Générer une clé API : Dashboard → Keys ; stocker dans
OPENROUTER_API_KEY, jamais dans le dépôt Git. - Créditer le compte (optionnel) : les modèles payants exigent un solde ; frais de 5,5 % à l'achat. Sans crédit, 25+ modèles gratuits restent accessibles avec limites.
- Consulter le catalogue :
GET /api/v1/modelspour les identifiants et tarifs à jour. - Envoyer la première requête : curl ou SDK vers
/v1/chat/completions. - Valider streaming et fallback : tester
stream: trueet le tableaumodelsavant la mise en production.
curl https://openrouter.ai/api/v1/models \
-H "Authorization: Bearer $OPENROUTER_API_KEY"
curl https://openrouter.ai/api/v1/chat/completions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-3.5-sonnet",
"messages": [
{ "role": "user", "content": "Explique l'informatique quantique en une phrase." }
]
}'
import requests
import os
response = requests.post(
url="https://openrouter.ai/api/v1/chat/completions",
headers={
"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}",
"Content-Type": "application/json",
},
json={
"model": "google/gemini-2.5-pro",
"messages": [
{"role": "user", "content": "Écris un tri rapide en Python."}
],
},
)
print(response.json()["choices"][0]["message"]["content"])
from openai import OpenAI
import os
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.environ["OPENROUTER_API_KEY"],
)
completion = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
extra_headers={
"HTTP-Referer": "https://your-app-domain.com",
"X-Title": "My App",
},
)
print(completion.choices[0].message.content)
import OpenAI from "openai";
const openai = new OpenAI({
baseURL: "https://openrouter.ai/api/v1",
apiKey: process.env.OPENROUTER_API_KEY,
});
const completion = await openai.chat.completions.create({
model: "deepseek/deepseek-chat",
messages: [{ role: "user", content: "Explain OpenRouter in one sentence" }],
});
console.log(completion.choices[0].message.content);
const stream = await openai.chat.completions.create({
model: "anthropic/claude-3.5-sonnet",
messages: [{ role: "user", content: "Écris un court poème sur l'automne." }],
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) process.stdout.write(content);
}
{
"model": "anthropic/claude-3.5-sonnet",
"models": [
"anthropic/claude-3.5-sonnet",
"openai/gpt-4o",
"google/gemini-2.5-pro"
],
"route": "fallback",
"messages": [{ "role": "user", "content": "Hello" }]
}
Free tier, BYOK et tarification — ce qu'il faut retenir
- Modèles gratuits : plus de 25 modèles free (Llama, Gemma, DeepSeek, etc.). Compte non crédité : environ 50 requêtes/jour ; à partir de 10 $ de crédits : environ 1 000/jour, 20/minute.
- BYOK : apportez vos clés éditeur — 1 million de requêtes/mois sans frais de service OpenRouter, puis 5 % sur la part excédentaire.
- Tokens : tarif éditeur sans markup selon la FAQ ; frais à l'achat de crédits 5,5 % (min. 0,80 $), +5 % en cryptomonnaie.
- Contrôle des coûts : le Dashboard détaille prix prompt/completion et consommation réelle — indispensable lors d'A/B tests parallèles.
Les paliers gratuits, la liste des modèles et les frais évoluent — référez-vous aux sources officielles plutôt qu'à ce résumé.
OpenRouter — documentation officielle
OpenRouter — FAQ tarifs et BYOK
OpenRouter — mécanisme de Provider Routing
FAQ
OpenRouter est-il payant ?
Plus de 25 modèles gratuits avec quotas. Les modèles payants sont facturés au tarif éditeur ; OpenRouter n'applique pas de markup token selon la FAQ, mais prélève 5,5 % à l'achat de crédits (min. 0,80 $).
Quels modèles sont disponibles ?
70+ fournisseurs, 400+ modèles — GPT-4o, Claude 3.5 Sonnet, Gemini 2.5 Pro, DeepSeek, Llama, Qwen, Mistral, etc. Liste live via GET /api/v1/models.
OpenRouter ou Claude en direct ?
Claude seul, latence minimale et Prompt Caching : API Anthropic. Multi-modèles, facture unique et fallback : OpenRouter.
Les données transitent-elles en sécurité ?
Les requêtes passent par la passerelle OpenRouter avant d'atteindre l'éditeur cible. Pour des contraintes strictes de résidence ou de conformité, évaluez l'API directe ou le BYOK avec des clés restreintes.
Comment appeler OpenRouter depuis Python ?
Via requests sur l'endpoint chat completions, ou via le SDK OpenAI en changeant base_url et la clé.
À quoi sert le mode BYOK ?
Vous conservez vos clés éditeur existantes : 1 M requêtes/mois sans commission OpenRouter, puis 5 % au-delà — pertinent si vous avez déjà des accords enterprise.
OpenRouter rationalise l'accès aux modèles, pas votre environnement local : conflits de virtualenv, agents à moitié codés et processus oubliés en arrière-plan finissent par encrasser la machine principale. Pour enchaîner les essais multi-modèles, un prototype Next.js ou un agent longue durée, une machine Apple Silicon dédiée — louée à la journée, réinitialisable à volonté — offre la même tranquillité d'esprit qu'un runner CI propre. Nous avons documenté cette approche dans notre guide de test Kimi K3 et notre guide runner CI Xcode ; l'intégration OpenRouter s'inscrit dans la même logique de machine jetable et maîtrisée.
Intégrez vos modèles sur du vrai Apple Silicon
Lancez un Mac mini M4 à la journée, branchez vos scripts OpenRouter en SSH, puis résiliez — sans laisser de dépendances sur votre poste principal.