Voeg APIsRouter toe als een aangepast endpoint in LibreChat.

Updated 2026-07-29

LibreChat behandelt aangepaste OpenAI-compatibele endpoints als een volwaardige functie: één blok endpoints.custom in librechat.yaml met een baseURL, een apiKey, en models.fetch ingesteld op true, en de hele catalogus verschijnt in de modelkiezer onder één sleutel.

Snel antwoord: één blok in librechat.yaml.

De aangepaste endpoints van LibreChat worden geconfigureerd in librechat.yaml onder endpoints.custom, een array waarin elke vermelding één provider is. De drie velden die ertoe doen zijn name (het label in de endpointkiezer), apiKey (dat omgevingsvariabelen interpoleert in de vorm ${VARIABLE}, zodat de sleutel in .env leeft en nooit in de YAML), en baseURL. Voor APIsRouter is de baseURL https://api.apisrouter.com/v1, inclusief /v1, omdat LibreChat routepaden zoals /chat/completions toevoegt aan welke base je ook opgeeft. Het blok models bepaalt wat er in de modeldropdown verschijnt. Zet models.fetch op true en LibreChat bevraagt bij het laden de /v1/models-lijst van het endpoint, zodat elk catalogus-ID selecteerbaar wordt zonder een handmatig geschreven lijst te onderhouden. models.default is nog steeds vereist als array en dient als de fallback die wordt getoond vóór of in plaats van een fetch. Dit is gedocumenteerde upstream-configuratie, geen patch: de objectstructuur van het aangepaste endpoint in de LibreChat-documentatie definieert elke sleutel die hier wordt gebruikt.

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

Hoe LibreChat aangepaste endpoints routeert.

LibreChat (danny-avila op GitHub, ruim 41K sterren) is de meest geïnstalleerde self-hosted interface in ChatGPT-stijl: multi-user, multi-model, met gespreksgeschiedenis-zoekfunctie, agents, bestandsverwerking en sleutels per gebruiker. In tegenstelling tot clients die een providerlijst hardcoderen, accepteert de array endpoints.custom elke OpenAI-compatibele dienst, en verschillende bekende providers in de documentatie zijn precies via dit mechanisme geconfigureerd. Wanneer een gebruiker een model kiest van een aangepast endpoint, stuurt LibreChat een standaard /v1/chat/completions-verzoek naar de baseURL van dat endpoint, met het veld model als platte string. Niets in de client maakt uit welke leverancier het model heeft getraind; de string wordt as-is doorgestuurd. Wanneer het endpoint achter de baseURL meerdere leveranciers bedient, plaatst één vermelding in librechat.yaml Claude-, GPT-, Gemini-, DeepSeek- en GLM-ID's in dezelfde dropdown, en een gebruiker wisselt van leverancier midden in een gesprek op precies dezelfde manier als tussen twee GPT-varianten. Dat laat de gebruikelijke multi-providerinstelling van LibreChat in elkaar vallen. In plaats van één aangepaste vermelding per leverancier, elk met zijn eigen sleutel in .env en zijn eigen factureringsoppervlak, dekt één vermelding met één sleutel de catalogus, en ziet de admin gebruik per model op één plek in plaats van meerdere dashboards te reconciliëren.

Volledige instelling: YAML, .env, en de Docker-mount.

Maak librechat.yaml aan in de projectroot en zet de sleutel in .env. De referentie ${APISROUTER_API_KEY} in de YAML lost bij het opstarten op vanuit de omgeving, zodat het configuratiebestand commitbaar blijft. De stap die de meeste beginners missen, is Docker-specifiek: de container ziet je librechat.yaml pas als je hem mount. De documentatie laat je docker-compose.override.yml aanmaken met een bind mount van ./librechat.yaml naar /app/librechat.yaml, en daarna de containers opnieuw aanmaken. De YAML naderhand bewerken vereist ook een herstart, omdat het bestand bij het opstarten wordt gelezen, niet gevolgd. Een paar optionele velden zijn het waard om in te stellen op een gatewayvermelding. titleConvo schakelt automatische gesprekstitels in, en titleModel kiest het model dat ze schrijft; de gedocumenteerde standaard van LibreChat voor titleModel is gpt-3.5-turbo, een ID dat een niet-OpenAI-endpoint misschien niet bedient, dus stel het expliciet in op een snel catalogus-ID of op de speciale waarde current_model. modelDisplayLabel bepaalt de naam die wordt getoond bij assistentberichten. En apiKey accepteert de speciale waarde user_provided als je wilt dat elke gebruiker zijn eigen sleutel plakt in plaats van die van de server te delen.

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"

Modellen kiezen voor een gedeelde chatworkspace.

Omdat elk model via dezelfde sleutel factureert, is de praktische lus voor een admin om een week gebruik in de console te bekijken, te zien welke modellen gebruikers daadwerkelijk kiezen, en models.default daarop af te stemmen door te snoeien, terwijl fetch aan blijft zodat powerusers nog steeds bij de volledige lijst kunnen.

  • Dagelijkse chat wil een sterke generalist. claude-sonnet-4-6 en gpt-5.5 dragen lange gesprekken, bestandsdiscussies en agentruns zonder modelangst per bericht.
  • Frequente korte vragen zijn volumewerk. claude-haiku-4-5-20251001 en gemini-3.5-flash antwoorden snel en voorkomen dat een deployment met veel gebruikers uitgaven concentreert op wegwerpbeurten.
  • Titelgeneratie vuurt bij elk gesprek. Wijs titleModel naar een snel ID; frontier-tarieven betalen om titels van zes woorden te schrijven, is de meest voorkomende stille verspilling in een LibreChat-deployment.
  • Meertalige teams moeten deepseek-v4-pro en glm-5.2 testen op hun echte taalmix; een dropdown met meerdere leveranciers maakt daar een in-app vergelijking van in plaats van een herconfiguratie.
  • models.fetch betekent dat nieuwe catalogusmodellen verschijnen zonder de YAML aan te raken, dus een model dat upstream is toegevoegd, is selecteerbaar de volgende keer dat de lijst ververst.

Betaal naar gebruik · onder officiële prijzen

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

ModelOfficiële prijsOnze prijs
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

Faalmodi specifiek voor LibreChat.

De config die stilletjes niet laadt, is de klassieker, en het is bijna altijd de Docker-mount. Zonder de bind mount van docker-compose.override.yml draait de container helemaal zonder librechat.yaml, verschijnt het aangepaste endpoint nooit in de kiezer, en meldt niets een fout. Bevestig dat het bestand binnen de container bestaat voordat je iets anders debugt. Een apiKey die letterlijk aankomt als ${APISROUTER_API_KEY} betekent dat de variabele niet aanwezig was in de omgeving waarmee de server is gestart; de interpolatie gebeurt bij het opstarten vanuit .env, dus een sleutel die naderhand is toegevoegd, vereist een containerherstart. Het symptoom is een 401 van de gateway met een onzinnig bearer-token. Een baseURL zonder /v1 produceert 404's bij elk verzoek, omdat LibreChat /chat/completions toevoegt aan de base zoals opgegeven. De omgekeerde fout, een volledige completions-URL plakken als baseURL, hoort bij de aparte optie directEndpoint en moet niet gecombineerd worden met een normale vermelding. Een lege modeldropdown met fetch uit betekent dat models.default ontbreekt of leeg is; het is een verplichte array. Met fetch aan betekent een lege dropdown meestal dat de fetch zelf is mislukt, wat terugvoert naar de sleutel of de baseURL. En mislukte gesprekstitels bij een verder werkend endpoint zijn de standaard van titleModel die wijst naar een ID dat de gateway niet bedient; stel het expliciet in.

Wie routeert LibreChat via een gateway.

  • Teams die een gedeelde chatworkspace self-hosten en Claude, GPT, Gemini en DeepSeek in één dropdown willen zonder één endpoints.custom-vermelding en één leveranciersaccount elk te onderhouden.
  • Admins die deployments met meerdere gebruikers draaien en één gebruiksoppervlak nodig hebben. Logboeken per sleutel tonen welke modellen het team daadwerkelijk gebruikt, geprijsd, zonder leveranciersdashboards samen te voegen.
  • Operators die afdelingen hun eigen sleutels geven: dezelfde YAML, één sleutel per groep, en het gebruikslogboek wordt het kostenrapport per team.
  • Huishoudens en kleine groepen die verschillende chatabonnementen vervangen door één gemeten endpoint, en betalen voor gebruikte tokens in plaats van voor plekken.
  • Developers zonder toegang tot de facturering van een bepaalde leverancier. Toegang op basis van opwaarderen zonder kaartvereiste verwijdert de aanmeldingsafhankelijkheid per provider.

Verifieer het endpoint en debug het eerste bericht.

Bewijs de gateway-helft voordat je LibreChat aanraakt: lijst modellen op met je sleutel, en bevestig dat de ID's die je in models.default hebt gezet, verschijnen. Als dat werkt, zit elk resterend symptoom aan de LibreChat-kant van de lijn. Start dan de stack en open de endpointkiezer. Dat de vermelding APIsRouter überhaupt verschijnt, bewijst dat de YAML is geladen; dat de modellijst wordt gevuld, bewijst de fetch en de sleutel; het eerste antwoord bewijst het chatpad. Werk deze drie in volgorde af in plaats van allemaal tegelijk, omdat elk zijn eigen faalset heeft: respectievelijk de mount, de omgevingsvariabele en de baseURL. Zodra berichten vloeien, toont de APIsRouter-console model per verzoek, tokenaantallen en uitgaven. Een gedeelde LibreChat-instantie is precies het soort deployment waarbij gebruik zich stilletjes concentreert op twee of drie modellen, en het gebruikslogboek is hoe je erachter komt welke, voordat de factuur het doet.

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

Veelgestelde vragen

Waar configureer ik een aangepast OpenAI-compatibel endpoint in LibreChat?

In librechat.yaml onder endpoints.custom, een array van providervermeldingen met name, apiKey, baseURL, en een blok models. Bij Docker-installaties moet het bestand via docker-compose.override.yml in de container worden bind-mount, anders wordt het stilletjes genegeerd.

Moet de baseURL /v1 bevatten?

Ja, voor APIsRouter: https://api.apisrouter.com/v1. LibreChat voegt routepaden zoals /chat/completions toe aan de base zoals opgegeven, dus een ontbrekende /v1 produceert 404's bij elk verzoek.

Kan één LibreChat-endpoint Claude-, GPT- en DeepSeek-modellen samen bedienen?

Ja. LibreChat stuurt het geselecteerde model-ID als platte string door naar de baseURL van het endpoint. Wanneer het endpoint meerdere leveranciers bedient, plaatst één endpoints.custom-vermelding al hun ID's in dezelfde dropdown, en models.fetch houdt die lijst automatisch actueel.

Waarom ontbreekt mijn aangepaste endpoint in de kiezer?

De YAML is niet geladen. Op Docker is de gebruikelijke oorzaak een ontbrekende bind mount voor librechat.yaml; de container draait zonder het bestand en niets meldt een fout. Bevestig dat het bestand binnen de container bestaat, en herstart dan, aangezien de config bij het opstarten wordt gelezen.

Waarom mislukken gesprekstitels terwijl chat werkt?

titleConvo gebruikt titleModel, waarvan de gedocumenteerde standaard gpt-3.5-turbo is, een ID dat je endpoint misschien niet bedient. Stel titleModel expliciet in op een snel catalogus-ID zoals claude-haiku-4-5-20251001, of op de speciale waarde current_model.

Kan elke gebruiker zijn eigen sleutel meebrengen in plaats van die van de server te delen?

Ja. Zet apiKey op de speciale waarde user_provided en LibreChat vraagt elke gebruiker om een sleutel, opgeslagen per gebruiker. Dat past goed bij gatewaysleutels, aangezien één sleutel per gebruiker het gebruikslogboek verandert in een kostenoverzicht per persoon.