Put the whole catalog behind one LibreChat endpoint
LibreChat is the open-source, self-hosted ChatGPT-style chat interface, and any OpenAI-compatible API can be added to it as a custom endpoint in librechat.yaml. One entry pointing at Router One puts GPT, Claude, Gemini, and Grok family models in the endpoint menu for every user on your instance — and each conversation is traced for cost on the gateway, so a shared deployment stops being one opaque bill.
Configure LibreChat to use the Router One base URL
Add an entry under endpoints.custom in librechat.yaml — the file is mounted into the API container as /app/librechat.yaml — with the gateway base URL, an apiKey that references a variable from your .env file, and models.fetch set to true so the list is pulled from the gateway's /models endpoint. The models.default array is the fallback shown if that fetch fails, and titleConvo lets the endpoint name new conversations with the model in use:
# librechat.yaml — add under your existing endpoints: key
endpoints:
custom:
- name: "Router One"
apiKey: "${ROUTER_ONE_API_KEY}"
baseURL: "https://api.router.one/v1"
models:
default: ["<model-id-from-/models>"]
fetch: true
titleConvo: true
titleModel: "current_model"
modelDisplayLabel: "Router One"
# .env
ROUTER_ONE_API_KEY=sk-your-router-one-keyWhich model ID should LibreChat send?
Copy the exact model ID from /models, preserving case, hyphens, and version suffixes; do not substitute a display name. Open its detail page and match the supported API endpoints, context window, and capabilities such as tool calling to the provider and features selected in LibreChat. A catalog listing does not mean the client can use every feature of that model. Give each tool a dedicated API key with a maxSpend cap.
Which API protocol is LibreChat using?
OpenAI-compatible describes an interface format; it does not make Chat Completions (/v1/chat/completions), Responses (/v1/responses), and Anthropic Messages (/v1/messages) interchangeable. Check the installed client version, provider configuration, and actual request path against the model detail page and API compatibility fact sheet. A successful plain-text chat does not establish support for hosted tools, conversation state, or file-editing features.
Verify the LibreChat call in your request trace
Send a simple text request from LibreChat, then match its trace in Dashboard → Logs by time, model, and request_id: tokens, cost, latency, and status. Next, test streaming, tool calls, and multi-turn history separately. For failures, retain the actual request path, full error message, and request_id. If there is no matching log, check client configuration and connectivity before attributing the error to the gateway or upstream.
FAQ
Should I use models.fetch or a static model list?
Use fetch: true when you want every catalog model to appear as soon as it exists — LibreChat queries the gateway's /models endpoint, and the default array is only the fallback if that request fails. Use fetch: false with an explicit default list when you want to curate what users see, say three models with the exact IDs from /models; users can then only pick what you listed.
Can users bring their own Router One key?
Yes — set apiKey to user_provided instead of an environment reference and LibreChat asks each user for a key in the UI. Each user's spend then lands on their own key and its own trace, which is the simplest way to split a shared instance's bill without touching your wallet.
Which models can LibreChat use through the gateway?
Choose a current catalog model that supports both the endpoint and the features LibreChat uses. Check /models and the model detail page for the exact ID, current rates, and capabilities; a family name such as GPT or Claude is not a compatibility guarantee. Seeing a model in the picker confirms discovery, so verify an actual request too.
Models are listed, but requests fail with 400 or 404. What should I check?
Record the actual request path and error message, then check the exact model ID. A 400 can indicate invalid parameters, unsupported tools, or a model/endpoint mismatch; a 404 can indicate an incorrect path or missing resource, so it does not by itself establish that a model was retired. If the error says must be called via, use the named endpoint or select a model supported on the current endpoint. Do not add or remove /v1 or /chat/completions across all clients indiscriminately.
Does this work from Mainland China?
Yes. The gateway is reachable from Mainland China without a VPN, and the configuration is identical to the global setup.
How do I debug a 401/402/403/429?
Match the request and error message in Dashboard → Logs. For 401, check whether the key was sent and is valid; for 402, check wallet balance and maxSpend; for 403, check key permissions and access restrictions. For 429, distinguish request/token limits from upstream throttling using the error details. Keep the request_id and follow the error-codes reference.