Ajoutez APIsRouter comme endpoint personnalisé dans LibreChat.
Updated 2026-07-29
LibreChat traite les endpoints compatibles OpenAI personnalisés comme une fonctionnalité de première classe : un bloc endpoints.custom dans librechat.yaml avec une baseURL, une apiKey, et models.fetch réglé sur true, et tout le catalogue apparaît dans le sélecteur de modèle sous une seule clé.
Réponse rapide : un bloc dans librechat.yaml.
Les endpoints personnalisés de LibreChat se configurent dans librechat.yaml sous endpoints.custom, un tableau où chaque entrée est un fournisseur. Les trois champs qui comptent sont name (le libellé dans le sélecteur d'endpoint), apiKey (qui interpole des variables d'environnement sous la forme ${VARIABLE}, donc la clé vit dans .env et jamais dans le YAML), et baseURL. Pour APIsRouter, la baseURL est https://api.apisrouter.com/v1, /v1 inclus, car LibreChat ajoute des chemins de route comme /chat/completions à la base que vous lui donnez. Le bloc models décide ce qui apparaît dans le menu déroulant de modèle. Réglez models.fetch sur true et LibreChat interroge le listing /v1/models de l'endpoint au chargement, donc chaque id du catalogue devient sélectionnable sans maintenir une liste écrite à la main. models.default reste requis comme tableau et sert de repli affiché avant ou à la place d'un fetch. C'est une configuration amont documentée, pas un correctif : la structure d'objet d'endpoint personnalisé dans la doc de LibreChat définit chaque clé utilisée ici.
version: 1.2.1
endpoints:
custom:
- name: "APIsRouter"
apiKey: "${APISROUTER_API_KEY}"
baseURL: "https://api.apisrouter.com/v1"
models:
default: ["claude-sonnet-4-6"]
fetch: trueComment LibreChat route les endpoints personnalisés.
LibreChat (danny-avila sur GitHub, environ 41 000 étoiles) est l'interface auto-hébergée de style ChatGPT la plus largement déployée : multi-utilisateur, multi-modèle, avec recherche de conversation, agents, gestion de fichiers, et clés par utilisateur. Contrairement aux clients qui codent en dur une liste de fournisseurs, son tableau endpoints.custom accepte n'importe quel service compatible OpenAI, et plusieurs fournisseurs bien connus dans la doc sont configurés via exactement ce mécanisme. Quand un utilisateur choisit un modèle depuis un endpoint personnalisé, LibreChat envoie une requête /v1/chat/completions standard vers la baseURL de cet endpoint, avec le champ model comme simple chaîne. Rien dans le client ne se soucie de quel fournisseur a entraîné le modèle ; la chaîne est transmise telle quelle. Quand l'endpoint derrière la baseURL sert plusieurs fournisseurs, une seule entrée librechat.yaml met des id Claude, GPT, Gemini, DeepSeek et GLM dans le même menu déroulant, et un utilisateur change de fournisseur en cours de conversation de la même façon qu'il basculerait entre deux variantes de GPT. Cela réduit à néant la configuration multi-fournisseurs habituelle de LibreChat. Au lieu d'une entrée personnalisée par fournisseur, chacune avec sa propre clé dans .env et sa propre surface de facturation, une seule entrée avec une seule clé couvre le catalogue, et l'administrateur voit l'usage par modèle en un seul endroit au lieu de réconcilier plusieurs tableaux de bord.
Configuration complète : YAML, .env et le montage Docker.
Créez librechat.yaml à la racine du projet et placez la clé dans .env. La référence ${APISROUTER_API_KEY} dans le YAML se résout depuis l'environnement au démarrage, donc le fichier de config reste commitable. L'étape que la plupart des premières configurations manquent est propre à Docker : le conteneur ne voit pas votre librechat.yaml tant que vous ne le montez pas. La doc vous fait créer docker-compose.override.yml avec un bind mount de ./librechat.yaml vers /app/librechat.yaml, puis recréer les conteneurs. Éditer le YAML ensuite nécessite aussi un redémarrage, car le fichier est lu au démarrage, pas surveillé. Quelques champs optionnels valent la peine d'être réglés sur une entrée de passerelle. titleConvo active les titres de conversation automatiques, et titleModel choisit le modèle qui les écrit ; le défaut documenté de LibreChat pour titleModel est gpt-3.5-turbo, un id qu'un endpoint non-OpenAI peut ne pas servir, donc réglez-le explicitement sur un id rapide du catalogue ou sur la valeur spéciale current_model. modelDisplayLabel contrôle le nom affiché sur les messages de l'assistant. Et apiKey accepte la valeur spéciale user_provided si vous voulez que chaque utilisateur colle sa propre clé au lieu de partager celle du serveur.
version: 1.2.1
endpoints:
custom:
- name: "APIsRouter"
apiKey: "${APISROUTER_API_KEY}"
baseURL: "https://api.apisrouter.com/v1"
models:
default: ["claude-sonnet-4-6", "gpt-5.5", "deepseek-v4-pro"]
fetch: true
titleConvo: true
titleModel: "claude-haiku-4-5-20251001"
modelDisplayLabel: "APIsRouter"Choisir des modèles pour un espace de travail de chat partagé.
Comme chaque modèle facture via la même clé, la boucle pratique pour un administrateur consiste à observer une semaine d'usage dans la console, voir quels modèles les utilisateurs choisissent réellement, et élaguer models.default en conséquence, tout en gardant fetch activé pour que les utilisateurs avancés puissent toujours atteindre la liste complète.
- Le chat du quotidien veut un généraliste solide. claude-sonnet-4-6 et gpt-5.5 portent les longues conversations, la discussion de fichiers, et les exécutions d'agent sans anxiété de modèle par message.
- Les questions courtes à haute fréquence relèvent du travail en volume. claude-haiku-4-5-20251001 et gemini-3.5-flash répondent vite et empêchent un déploiement multi-utilisateur de concentrer la dépense sur des tours jetables.
- La génération de titre se déclenche sur chaque conversation. Pointez titleModel vers un id rapide ; payer des tarifs frontier pour écrire des titres de six mots est le gaspillage silencieux le plus courant dans un déploiement LibreChat.
- Les équipes multilingues devraient tester deepseek-v4-pro et glm-5.2 sur leur vrai mix de langues ; un menu déroulant multi-fournisseurs fait de cela une comparaison dans l'application plutôt qu'une reconfiguration.
- models.fetch signifie que les nouveaux modèles du catalogue apparaissent sans toucher au YAML, donc un modèle ajouté en amont devient sélectionnable la prochaine fois que la liste se rafraîchit.
Paiement à l'usage · en dessous du tarif officiel
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Modèle | Prix officiel | Notre prix |
|---|---|---|
| Claude Sonnet 4.6 | $3.00 / $15.00 per M | $2.40 / $12.00 per M |
| Claude Haiku 4.5 20251001 | $1.00 / $5.00 per M | $0.80 / $4.00 per M |
| GPT-5.5 | $5.00 / $30.00 per M | $4.00 / $24.00 per M |
| Gemini 3.5 Flash | $1.50 / $9.00 per M | $1.20 / $7.20 per M |
| DeepSeek V4 Pro | $0.43 / $0.87 per M | $0.40 / $0.90 per M |
Modes d'échec spécifiques à LibreChat.
La config qui ne se charge pas silencieusement est le classique, et c'est presque toujours le montage Docker. Sans le bind mount de docker-compose.override.yml, le conteneur tourne sans aucun librechat.yaml, l'endpoint personnalisé n'apparaît jamais dans le sélecteur, et rien ne signale d'erreur. Confirmez que le fichier existe à l'intérieur du conteneur avant de déboguer quoi que ce soit d'autre. Une apiKey qui arrive littéralement comme ${APISROUTER_API_KEY} signifie que la variable n'était pas présente dans l'environnement avec lequel le serveur a démarré ; l'interpolation se produit au démarrage depuis .env, donc une clé ajoutée après coup nécessite un redémarrage du conteneur. Le symptôme est un 401 depuis la passerelle avec un jeton bearer absurde. Une baseURL sans /v1 produit des 404 sur chaque requête, car LibreChat ajoute /chat/completions à la base telle que donnée. L'erreur inverse, coller une URL de completions complète comme baseURL, appartient à l'option directEndpoint séparée et ne devrait pas être combinée avec une entrée normale. Un menu déroulant de modèle vide avec fetch désactivé signifie que models.default est manquant ou vide ; c'est un tableau requis. Avec fetch activé, un menu déroulant vide signifie généralement que le fetch lui-même a échoué, ce qui ramène à la clé ou à la baseURL. Et des titres de conversation en échec sur un endpoint par ailleurs fonctionnel viennent du défaut de titleModel qui pointe vers un id que la passerelle ne sert pas ; réglez-le explicitement.
Qui route LibreChat via une passerelle.
- Les équipes qui auto-hébergent un espace de travail de chat partagé et veulent Claude, GPT, Gemini et DeepSeek dans un seul menu déroulant sans maintenir une entrée endpoints.custom et un compte fournisseur chacun.
- Les administrateurs qui gèrent des déploiements multi-utilisateurs et ont besoin d'une seule surface d'usage. Les journaux par clé montrent quels modèles l'équipe utilise réellement, chiffrés, sans fusionner de tableaux de bord fournisseur.
- Les opérateurs qui donnent à chaque département sa propre clé : même YAML, une clé par groupe, et le journal d'usage devient le rapport de coût par équipe.
- Les foyers et petits groupes qui remplacent plusieurs abonnements de chat par un seul endpoint facturé à l'usage, payant pour les tokens consommés plutôt que pour des sièges.
- Les développeurs sans accès à la facturation d'un fournisseur donné. Un accès basé sur la recharge, sans exigence de carte, supprime la dépendance à une inscription par fournisseur.
Vérifiez l'endpoint et déboguez le premier message.
Prouvez la moitié passerelle avant de toucher à LibreChat : listez les modèles avec votre clé, et confirmez que les id que vous avez mis dans models.default apparaissent. Si cela fonctionne, tout symptôme restant se trouve du côté LibreChat de la connexion. Démarrez ensuite la stack et ouvrez le sélecteur d'endpoint. Le simple fait que l'entrée APIsRouter apparaisse prouve que le YAML s'est chargé ; la liste de modèles qui se remplit prouve le fetch et la clé ; la première réponse prouve le chemin de chat. Traitez ces trois points dans l'ordre plutôt que tous à la fois, car chacun a son propre ensemble d'échecs distinct, respectivement le montage, la variable d'environnement, et la baseURL. Une fois que les messages circulent, la console APIsRouter affiche le modèle par requête, le nombre de tokens et la dépense. Une instance LibreChat partagée est exactement le genre de déploiement où l'usage se concentre silencieusement sur deux ou trois modèles, et le journal d'usage est ce qui vous permet de le découvrir avant que la facture ne le fasse.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50Questions fréquentes
Où configurer un endpoint compatible OpenAI personnalisé dans LibreChat ?
Dans librechat.yaml sous endpoints.custom, un tableau d'entrées de fournisseur avec name, apiKey, baseURL, et un bloc models. Sur les installations Docker, le fichier doit être bind-mounté dans le conteneur via docker-compose.override.yml, sinon il est silencieusement ignoré.
La baseURL doit-elle inclure /v1 ?
Oui pour APIsRouter : https://api.apisrouter.com/v1. LibreChat ajoute des chemins de route comme /chat/completions à la base telle que donnée, donc un /v1 manquant produit des 404 sur chaque requête.
Un seul endpoint LibreChat peut-il servir ensemble des modèles Claude, GPT et DeepSeek ?
Oui. LibreChat transmet l'id du modèle sélectionné comme une simple chaîne vers la baseURL de l'endpoint. Quand l'endpoint sert plusieurs fournisseurs, une seule entrée endpoints.custom met tous leurs id dans le même menu déroulant, et models.fetch garde cette liste à jour automatiquement.
Pourquoi mon endpoint personnalisé manque-t-il dans le sélecteur ?
Le YAML ne s'est pas chargé. Sur Docker, la cause habituelle est un bind mount manquant pour librechat.yaml ; le conteneur tourne sans le fichier et rien ne signale d'erreur. Confirmez que le fichier existe à l'intérieur du conteneur, puis redémarrez, car la config est lue au démarrage.
Pourquoi les titres de conversation échouent-ils alors que le chat fonctionne ?
titleConvo utilise titleModel, dont le défaut documenté est gpt-3.5-turbo, un id que votre endpoint peut ne pas servir. Réglez titleModel explicitement sur un id rapide du catalogue comme claude-haiku-4-5-20251001, ou sur la valeur spéciale current_model.
Chaque utilisateur peut-il apporter sa propre clé au lieu de partager celle du serveur ?
Oui. Réglez apiKey sur la valeur spéciale user_provided et LibreChat demande une clé à chaque utilisateur, stockée par utilisateur. Cela convient bien aux clés de passerelle, puisqu'une clé par utilisateur transforme le journal d'usage en une vue de coût par personne.