APIsRouter als LibreChat Custom Endpoint hinzufügen.

Updated 2026-07-29

LibreChat behandelt Custom OpenAI-kompatible Endpoints als erstklassiges Feature: ein endpoints.custom-Block in librechat.yaml mit baseURL, apiKey und models.fetch auf true, und der gesamte Katalog erscheint unter einem Key im Model-Selector.

Kurzantwort: ein Block in librechat.yaml.

LibreChats Custom Endpoints werden in librechat.yaml unter endpoints.custom konfiguriert, einem Array, in dem jeder Eintrag einen Provider darstellt. Die drei entscheidenden Felder sind name (das Label im Endpoint-Selector), apiKey (das Umgebungsvariablen in der Form ${VARIABLE} interpoliert, sodass der Key in .env liegt und nie in der YAML) und baseURL. Für APIsRouter lautet die baseURL https://api.apisrouter.com/v1, inklusive /v1, weil LibreChat Routen-Pfade wie /chat/completions an die angegebene Base anhängt. Der models-Block entscheidet, was im Modell-Dropdown erscheint. Setze models.fetch auf true, und LibreChat fragt beim Laden das /v1/models-Listing des Endpoints ab, sodass jede Katalog-ID auswählbar wird, ohne eine handgepflegte Liste zu unterhalten. models.default ist weiterhin als Array erforderlich und dient als Fallback, der vor oder anstelle eines Fetch angezeigt wird. Das ist dokumentierte Upstream-Konfiguration, kein Patch: Die Struktur des Custom-Endpoint-Objekts in der LibreChat-Doku definiert jeden hier verwendeten Key.

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: true

Wie LibreChat Custom Endpoints routet.

LibreChat (danny-avila auf GitHub, rund 41K Stars) ist das am weitesten verbreitete self-hosted ChatGPT-artige Interface: Multi-User, Multi-Model, mit Konversationssuche, Agents, Dateihandling und Per-User-Keys. Anders als Clients mit fest codierter Provider-Liste akzeptiert das endpoints.custom-Array jeden OpenAI-kompatiblen Dienst, und mehrere bekannte Provider in der Doku sind über genau diesen Mechanismus konfiguriert. Wählt ein Nutzer ein Modell von einem Custom Endpoint, sendet LibreChat einen Standard-/v1/chat/completions-Request an die baseURL dieses Endpoints, mit dem model-Feld als reinem String. Im Client spielt es keine Rolle, welcher Anbieter das Modell trainiert hat; der String wird unverändert weitergeleitet. Bedient der Endpoint hinter der baseURL mehrere Anbieter, bringt ein einziger librechat.yaml-Eintrag Claude-, GPT-, Gemini-, DeepSeek- und GLM-IDs in dasselbe Dropdown, und ein Nutzer wechselt mitten im Gespräch zwischen Anbietern genauso, wie er zwischen zwei GPT-Varianten wechseln würde. Das reduziert das übliche Multi-Provider-Setup von LibreChat auf ein Minimum. Statt eines Custom-Eintrags pro Anbieter, jeder mit eigenem Key in .env und eigener Abrechnungsfläche, deckt ein Eintrag mit einem Key den gesamten Katalog ab, und der Admin sieht den Verbrauch pro Modell an einem Ort, statt mehrere Dashboards abzugleichen.

Vollständiges Setup: YAML, .env und der Docker-Mount.

Lege librechat.yaml im Projekt-Root an und trage den Key in .env ein. Die Referenz ${APISROUTER_API_KEY} in der YAML wird beim Start aus der Umgebung aufgelöst, sodass die Config-Datei committable bleibt. Der Schritt, den die meisten Erstsetups übersehen, ist Docker-spezifisch: Der Container sieht deine librechat.yaml erst, wenn du sie mountest. Die Doku lässt dich docker-compose.override.yml mit einem Bind-Mount von ./librechat.yaml nach /app/librechat.yaml anlegen und die Container danach neu erstellen. Auch spätere Änderungen an der YAML erfordern einen Neustart, da die Datei beim Start gelesen und nicht überwacht wird. Ein paar optionale Felder lohnen sich für einen Gateway-Eintrag. titleConvo aktiviert automatische Konversationstitel, und titleModel wählt das Modell, das sie schreibt; LibreChats dokumentierter Standard für titleModel ist gpt-3.5-turbo, eine ID, die ein Nicht-OpenAI-Endpoint möglicherweise nicht bedient — setze sie also explizit auf eine schnelle Katalog-ID oder auf den Spezialwert current_model. modelDisplayLabel steuert den Namen, der bei Assistant-Nachrichten angezeigt wird. Und apiKey akzeptiert den Spezialwert user_provided, wenn jeder Nutzer seinen eigenen Key einfügen soll, statt den des Servers zu teilen.

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"

Modellwahl für einen gemeinsam genutzten Chat-Workspace.

Da jedes Modell über denselben Key abgerechnet wird, sieht der praktische Ablauf für einen Admin so aus: eine Woche Verbrauch in der Konsole beobachten, sehen, welche Modelle Nutzer tatsächlich wählen, und models.default entsprechend zurechtstutzen — fetch bleibt dabei an, damit Power-User weiterhin die volle Liste erreichen.

  • Daily-Driver-Chat braucht einen starken Generalisten. claude-sonnet-4-6 und gpt-5.5 tragen lange Gespräche, Datei-Diskussionen und Agent-Runs, ohne Modell-Sorgen pro Nachricht.
  • Häufige kurze Fragen sind Volumenarbeit. claude-haiku-4-5-20251001 und gemini-3.5-flash antworten schnell und verhindern, dass sich der Verbrauch eines Many-User-Deployments auf Wegwerf-Turns konzentriert.
  • Titelgenerierung feuert bei jeder Konversation. Zeige titleModel auf eine schnelle ID; Frontier-Preise für Sechs-Wort-Titel zu zahlen, ist die häufigste stille Verschwendung in einem LibreChat-Deployment.
  • Mehrsprachige Teams sollten deepseek-v4-pro und glm-5.2 an ihrem echten Sprachmix testen; ein Multi-Vendor-Dropdown macht daraus einen In-App-Vergleich statt einer Neukonfiguration.
  • models.fetch bedeutet, dass neue Katalogmodelle erscheinen, ohne die YAML anzufassen — ein upstream hinzugefügtes Modell ist beim nächsten Aktualisieren der Liste sofort auswählbar.

Nutzungsbasiert · unter offiziellem Preis

Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.

ModellOffizieller PreisUnser Preis
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

Fehlerbilder, die spezifisch für LibreChat sind.

Dass die Config stillschweigend nicht lädt, ist der Klassiker, und fast immer liegt es am Docker-Mount. Ohne den Bind-Mount aus docker-compose.override.yml läuft der Container ganz ohne librechat.yaml, der Custom Endpoint erscheint nie im Selector, und es gibt keinen Fehler. Bestätige zuerst, dass die Datei im Container existiert, bevor du sonst irgendetwas debuggst. Kommt der apiKey wortwörtlich als ${APISROUTER_API_KEY} an, war die Variable in der Umgebung, mit der der Server gestartet wurde, nicht vorhanden; die Interpolation aus .env passiert beim Start, also braucht ein nachträglich hinzugefügter Key einen Container-Neustart. Das Symptom ist ein 401 vom Gateway mit einem sinnlosen Bearer-Token. Eine baseURL ohne /v1 erzeugt bei jedem Request 404s, weil LibreChat /chat/completions an die angegebene Base anhängt. Der umgekehrte Fehler, eine vollständige Completions-URL als baseURL einzufügen, gehört zur separaten directEndpoint-Option und sollte nicht mit einem normalen Eintrag kombiniert werden. Ein leeres Modell-Dropdown bei ausgeschaltetem fetch bedeutet, dass models.default fehlt oder leer ist; es ist ein Pflicht-Array. Bei eingeschaltetem fetch bedeutet ein leeres Dropdown meist, dass der Fetch selbst fehlgeschlagen ist, was wieder auf den Key oder die baseURL zurückführt. Und fehlschlagende Konversationstitel bei einem sonst funktionierenden Endpoint liegen daran, dass der titleModel-Standard auf eine ID zeigt, die das Gateway nicht bedient; setze ihn explizit.

Wer LibreChat über ein Gateway routet.

  • Teams, die einen gemeinsam genutzten Chat-Workspace selbst hosten und Claude, GPT, Gemini und DeepSeek in einem Dropdown wollen, ohne für jeden Anbieter einen eigenen endpoints.custom-Eintrag und ein eigenes Konto zu pflegen.
  • Admins von Multi-User-Deployments, die eine einzige Verbrauchsfläche brauchen. Per-Key-Logs zeigen bepreist, welche Modelle das Team tatsächlich nutzt, ohne Vendor-Dashboards zusammenführen zu müssen.
  • Betreiber, die Abteilungen eigene Keys geben: dieselbe YAML, ein Key pro Gruppe, und das Usage-Log wird zum Kostenbericht pro Team.
  • Haushalte und kleine Gruppen, die mehrere Chat-Abos durch einen abgerechneten Endpoint ersetzen und für genutzte Token statt für Seats zahlen.
  • Entwickler ohne Zugang zur Abrechnung eines bestimmten Anbieters. Guthabenbasierter Zugang ohne Kartenpflicht entfernt die Abhängigkeit von der Anmeldung bei jedem einzelnen Provider.

Den Endpoint verifizieren und die erste Nachricht debuggen.

Beweise die Gateway-Hälfte, bevor du LibreChat anfasst: Liste die Modelle mit deinem Key auf und bestätige, dass die IDs, die du in models.default eingetragen hast, erscheinen. Funktioniert das, liegt jedes verbleibende Symptom auf der LibreChat-Seite der Leitung. Starte dann den Stack und öffne den Endpoint-Selector. Dass der APIsRouter-Eintrag überhaupt erscheint, beweist, dass die YAML geladen wurde; dass sich die Modellliste füllt, beweist Fetch und Key; die erste Antwort beweist den Chat-Pfad. Arbeite diese drei nacheinander ab statt alle auf einmal, denn jeder hat sein eigenes Fehlerbild — den Mount, die Env-Var beziehungsweise die baseURL. Sobald Nachrichten fließen, zeigt die APIsRouter-Konsole Modell, Token-Zahlen und Kosten pro Request. Eine gemeinsam genutzte LibreChat-Instanz ist genau die Art von Deployment, bei der sich der Verbrauch still auf zwei oder drei Modelle konzentriert, und das Usage-Log verrät dir, welche das sind, bevor es die Rechnung tut.

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $APISROUTER_API_KEY" | head -50

Häufige Fragen

Wo konfiguriere ich einen Custom OpenAI-kompatiblen Endpoint in LibreChat?

In librechat.yaml unter endpoints.custom, einem Array von Provider-Einträgen mit name, apiKey, baseURL und einem models-Block. Bei Docker-Installationen muss die Datei über docker-compose.override.yml in den Container gemountet werden, sonst wird sie stillschweigend ignoriert.

Sollte die baseURL /v1 enthalten?

Für APIsRouter ja: https://api.apisrouter.com/v1. LibreChat hängt Routen-Pfade wie /chat/completions an die angegebene Base an, ein fehlendes /v1 erzeugt also bei jedem Request 404s.

Kann ein LibreChat-Endpoint Claude-, GPT- und DeepSeek-Modelle gemeinsam bedienen?

Ja. LibreChat leitet die gewählte Modell-ID als reinen String an die baseURL des Endpoints weiter. Bedient der Endpoint mehrere Anbieter, bringt ein endpoints.custom-Eintrag alle ihre IDs in dasselbe Dropdown, und models.fetch hält diese Liste automatisch aktuell.

Warum fehlt mein Custom Endpoint im Selector?

Die YAML wurde nicht geladen. Bei Docker ist die übliche Ursache ein fehlender Bind-Mount für librechat.yaml; der Container läuft ohne die Datei, und es gibt keinen Fehler. Bestätige, dass die Datei im Container existiert, und starte dann neu, da die Config beim Start gelesen wird.

Warum schlagen Konversationstitel fehl, obwohl der Chat funktioniert?

titleConvo verwendet titleModel, dessen dokumentierter Standard gpt-3.5-turbo ist — eine ID, die dein Endpoint möglicherweise nicht bedient. Setze titleModel explizit auf eine schnelle Katalog-ID wie claude-haiku-4-5-20251001 oder auf den Spezialwert current_model.

Kann jeder Nutzer seinen eigenen Key statt des Server-Keys mitbringen?

Ja. Setze apiKey auf den Spezialwert user_provided, und LibreChat fragt jeden Nutzer nach einem Key, der pro Nutzer gespeichert wird. Das passt gut zu Gateway-Keys, da ein Key pro Nutzer das Usage-Log zu einer Kostenansicht pro Person macht.