Votre équipe accumule les clés OpenAI, Anthropic et Google, trois SDK et autant de tableaux de facturation — puis un agent en production tombe parce qu'un modèle est saturé. OpenRouter unifie l'accès via https://openrouter.ai/api/v1/chat/completions avec la convention fournisseur/modèle. Ce guide s'adresse aux développeurs et tech leads qui veulent (1) comprendre le routage et la tarification réelle, (2) copier des exemples prêts pour curl, Python et Node, (3) déployer des agents persistants sur un nœud Mac cloud NUKCLOUD. Complétez avec le classement CLI OpenRouter et les parts de tokens hebdo.
00Qu'est-ce qu'OpenRouter ?
OpenRouter est une passerelle LLM unifiée : un compte, une clé sk-or-..., un endpoint REST compatible OpenAI. Vous appelez openai/gpt-5.6-sol, anthropic/claude-sonnet-5 ou google/gemini-2.5-pro sans changer de client HTTP. La plateforme route plus de 100 billions de tokens par mois (juin 2026) et agrège 70+ fournisseurs et 400+ modèles — voir aussi notre analyse des tendances LLM OpenRouter.
Le nommage suit toujours vendor/model-id. Les en-têtes HTTP recommandés incluent HTTP-Referer et X-Title pour le classement apps ; le corps JSON reprend le schéma OpenAI (messages, stream, max_tokens). Pour lister les modèles disponibles : GET /api/v1/models.
PainCoûts cachés du multi-fournisseur
- Fragmentation des clés : rotation, quotas et alertes budget triplés ; un agent oublié peut vider une clé Anthropic pendant qu'OpenAI reste inutilisée.
- Fallback artisanal : scripts maison qui basculent entre endpoints — sans SLA unifié ni journalisation centralisée des erreurs 429/503.
- Surprise de latence : chaque saut proxy ajoute typiquement 10–80 ms ; acceptable pour agents batch, problématique pour chat vocal temps réel.
- Conformité floue : données qui traversent un agrégateur US alors que le contrat exige un DPA direct avec un seul fournisseur.
- Hôte instable : gateway Hermes ou Claude Code sur VPS macOS mutualisé — jitter réseau, surbooking CPU et coupures de longues connexions SSE qui tuent les sessions agent avant un mauvais modèle.
01Routage modèle vs fournisseur
OpenRouter propose deux stratégies de routage. Le choix impacte coût, latence et résilience.
| Dimension | Model Routing | Provider Routing |
|---|---|---|
| Logique | Vous fixez model ; OpenRouter choisit le fournisseur le moins cher ou le plus rapide pour ce modèle | Vous ciblez un fournisseur (provider ou préfixe) ; bascule entre modèles du même éditeur |
| Cas d'usage | Appels GPT-5.6 ou Claude Sonnet 5 avec fallback automatique | Conformité « tout reste chez Anthropic » ou facturation consolidée |
| Fallback | Liste models: ["a", "b", "c"] dans le corps ou via paramètre dédié | Chaîne de modèles du même vendor en cas de rate limit |
| Latence typique | +10–50 ms vs API directe | +15–80 ms selon région du provider |
| Tarification token | Prix affiché = tarif fournisseur, sans markup token | Idem ; crédits prépayés + 5,5 % frais de recharge |
Modèles gratuits : plus de 25 modèles en accès gratuit — 50 requêtes/jour sans crédit, puis 1 000/jour après recharge de 10 $. Idéal pour prototypage ; pas pour production agent 7×24.
02Cinq avantages et limites
- Un seul SDK : migrez en changeant
base_urletmodel— zéro fork client. - Fallback natif : chaînes multi-modèles sans orchestrateur maison.
- BYOK sans markup token : branchez vos clés OpenAI/Anthropic/Google — 1 M req/mois gratuites côté plateforme.
- Visibilité marché : classements apps et modèles pour calibrer stack et budget — aligné avec nos bilans parts modèles juin 2026.
- Expérimentation rapide : tester Kimi K3, DeepSeek V4 ou Grok 4.5 en une ligne sans nouveau compte.
03Démarrage en trois étapes
-
A
Créer un compte sur openrouter.ai, générer une clé API, optionnellement activer BYOK pour vos clés fournisseurs.
-
B
Exporter
OPENROUTER_API_KEY=sk-or-...dans l'environnement du nœud (Mac local ou cloud). -
C
Tester un appel curl (section code) puis brancher votre SDK existant sur
https://openrouter.ai/api/v1.
04Exemples de code
curl — chat completion :
curl https://openrouter.ai/api/v1/chat/completions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-H "HTTP-Referer: https://votredomaine.com" \
-H "X-Title: Mon Agent" \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [{"role": "user", "content": "Explique le routage OpenRouter en 3 phrases."}]
}'
Python — requests :
import os, requests
r = requests.post(
"https://openrouter.ai/api/v1/chat/completions",
headers={
"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}",
"HTTP-Referer": "https://votredomaine.com",
},
json={
"model": "openai/gpt-5.6-sol",
"messages": [{"role": "user", "content": "Hello"}],
},
timeout=120,
)
print(r.json()["choices"][0]["message"]["content"])
Python — SDK OpenAI :
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.environ["OPENROUTER_API_KEY"],
)
resp = client.chat.completions.create(
model="google/gemini-2.5-pro",
messages=[{"role": "user", "content": "Résume en français."}],
)
print(resp.choices[0].message.content)
Node — SDK OpenAI :
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://openrouter.ai/api/v1",
apiKey: process.env.OPENROUTER_API_KEY,
});
const completion = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
messages: [{ role: "user", content: "Bonjour" }],
});
console.log(completion.choices[0].message.content);
Streaming (Node) :
const stream = await client.chat.completions.create({
model: "openai/gpt-5.6-sol",
messages: [{ role: "user", content: "Stream test" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
Fallback multi-modèles :
{
"models": [
"anthropic/claude-sonnet-5",
"openai/gpt-5.6-sol",
"google/gemini-2.5-pro"
],
"messages": [{"role": "user", "content": "Tâche critique"}],
"route": "fallback"
}
Lister les modèles :
curl -s https://openrouter.ai/api/v1/models \
-H "Authorization: Bearer $OPENROUTER_API_KEY" | jq '.data[:5]'
05BYOK, crédits et observabilité
En mode Bring Your Own Key, OpenRouter relaie vos clés directes : pas de markup token, quota gratuit de 1 million de requêtes/mois sur la plateforme. Les crédits prépayés OpenRouter facturent le tarif affiché du modèle plus 5,5 % à l'achat de crédits — pas de surcoût caché par token consommé.
- Point 1 : activez les alertes budget dans la console avant de lancer un agent Hermes 7×24.
- Point 2 : journalisez
model,provider, tokens et latence côté client — OpenRouter expose un ID de génération pour le support. - Point 3 : pour Claude Code ou Cursor, configurez
OPENROUTER_API_KEYet la base URL dans les paramètres IDE — voir le guide Agent Skills.
06Diagnostic trafic multilingue faible
Si votre documentation OpenRouter ou votre blog technique peine en anglais ou en français malgré un bon contenu zh, vérifiez cette checklist :
- Search Console : pages indexées par locale, requêtes réelles vs impressions, erreurs d'exploration.
- CDN / WAF : blocage géographique ou bot filter sur
/en/ou/fr/. - hreflang : matrice cohérente sur la page index blog, pas sur chaque article détail (convention NUKCLOUD).
- Traduction automatique : contenu dupliqué ou qualité linguistique pénalisée — réécrire, ne pas traduire mot à mot.
- Backlinks : ancres en langue cible depuis docs dev, GitHub README et communautés (Dev.to, Hacker News Show).
07Stratégie SEO bilingue
| Signal | Marché chinois (zh) | Marché anglais / français |
|---|---|---|
| Mots-clés | OpenRouter 教程, 大模型 API 聚合 | OpenRouter API guide, GPT Claude Gemini one key |
| Title | Année + 保姆级 + modèles listés | How to + modèles + (2026 Guide) |
| Meta | 70–80 caractères, 2 mots-clés, runbook | 120–160 caractères, bénéfice + étapes |
| Corps | Tableaux comparatifs, prix en $ | Paragraphes courts, une idée par phrase |
| Localisation | Cas WeChat / docs CN | Cas GDPR, liens openrouter.ai/apps |
Règle d'or : localiser l'intention de recherche, pas traduire la structure zh mot pour mot. Chaque locale NUKCLOUD possède son propre blog-data.js et ses slugs identiques mais titres natifs.
08Technique : canonical, sitemap, schema
- URL :
https://nukcloud.com/{lang}/blog/{slug}.html— slug identique sur les 8 langues. - Canonical : auto-référent sur chaque détail ; pas de hreflang sur les articles (liste index uniquement).
- Sitemap : régénérer via le script projet après publication ; soumettre dans GSC par propriété.
- Schema :
BlogPosting+FAQPageembarqué dansmainEntity— comme cet article. - IndexNow : pousser les nouvelles URLs pour Bing/Yandex selon le runbook site.
09Distribution et métriques
| Canal | Priorité | Action |
|---|---|---|
| GitHub README / docs | P0 | Snippet curl + lien vers cet article |
| Dev.to / Medium EN-FR | P0 | Version abrégée avec canonical vers nukcloud.com |
| Newsletter produit | P1 | Segment dev vs achats |
| Discord OpenRouter / r/LocalLLaMA | P1 | Répondre aux threads API, pas spam |
| LinkedIn tech FR | P2 | Infographie routage vs fallback |
| YouTube walkthrough | P2 | 6 min : clé → curl → SDK → Mac cloud |
Métriques à suivre (30 jours) : impressions GSC par locale, CTR title, temps sur page > 4 min, clics vers tarifs et commander, inscriptions console corrélées UTM ?utm_source=blog&utm_campaign=openrouter-api.
10Runbook production en six étapes
-
01
Compte et clés : créer le compte OpenRouter, générer
sk-or-..., configurer BYOK si vous avez déjà des crédits OpenAI/Anthropic, plafond budget à 80 % du seuil alerte. -
02
Smoke test local : curl + SDK OpenAI sur votre poste ; valider streaming et fallback JSON avec trois modèles.
-
03
Provisionner le nœud : console NUKCLOUD — Mac mini M4 32 Go+ pour agents parallèles ; région proche de votre registry Git.
-
04
Baseline SSH :
brew install node python@3.12, secrets dans~/.zshrc, tester latence versopenrouter.ai(< 100 ms depuis le nœud). -
05
Gateway agent : launchd pour Hermes / Claude Code / service maison ; prompts récurrents en SKILL.md — voir install Hermes.
- 06
Les pools macOS mutualisés échangent un démarrage rapide contre jitter bande passante, surbooking et resets de longues connexions SSE — fatal quand un agent enchaîne des milliers d'appels outils. Pour des gateways OpenRouter 7×24 auditable, les nœuds Mac bare-metal multi-régions NUKCLOUD offrent frontière locataire, Seatbelt et RAM unifiée prévisibles — test horaire sur commander, puis engagement mensuel.
11Questions fréquentes
base_url=https://openrouter.ai/api/v1 et votre clé sk-or-.... Chat, streaming et list models fonctionnent sans réécrire le client Python ou Node.