Adicione a APIsRouter como um endpoint personalizado do LibreChat.
Updated 2026-07-29
O LibreChat trata endpoints personalizados compatíveis com OpenAI como um recurso de primeira classe: um bloco endpoints.custom no librechat.yaml com uma baseURL, uma apiKey, e models.fetch definido como true, e o catálogo inteiro aparece no seletor de modelo sob uma chave.
Resposta rápida: um bloco no librechat.yaml.
Os endpoints personalizados do LibreChat são configurados no librechat.yaml sob endpoints.custom, um array onde cada entrada é um provider. Os três campos que importam são name (o rótulo no seletor de endpoint), apiKey (que interpola variáveis de ambiente no formato ${VARIABLE}, então a chave vive no .env e nunca no YAML), e baseURL. Para a APIsRouter a baseURL é https://api.apisrouter.com/v1, com o /v1 incluído, porque o LibreChat anexa caminhos de rota como /chat/completions à base que você fornece. O bloco models decide o que aparece no menu suspenso de modelo. Defina models.fetch como true e o LibreChat consulta a listagem /v1/models do endpoint na inicialização, então cada id do catálogo se torna selecionável sem manter uma lista escrita à mão. models.default ainda é obrigatório como um array e serve como o fallback mostrado antes ou no lugar de um fetch. Isso é configuração documentada oficialmente, não um patch: a estrutura de objeto de endpoint personalizado na documentação do LibreChat define cada chave usada aqui.
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: trueComo o LibreChat roteia endpoints personalizados.
O LibreChat (danny-avila no GitHub, cerca de 41 mil estrelas) é a interface auto-hospedada estilo ChatGPT mais implantada: multi-usuário, multi-modelo, com busca de conversa, agentes, manuseio de arquivo, e chaves por usuário. Ao contrário de clientes que fixam uma lista de providers no código, seu array endpoints.custom aceita qualquer serviço compatível com OpenAI, e vários providers conhecidos na documentação são configurados exatamente por esse mecanismo. Quando um usuário escolhe um modelo de um endpoint personalizado, o LibreChat envia uma requisição /v1/chat/completions padrão para a baseURL desse endpoint com o campo model como uma string simples. Nada no cliente se importa com qual fornecedor treinou o modelo; a string é encaminhada como está. Quando o endpoint atrás da baseURL serve vários fornecedores, uma entrada de librechat.yaml coloca ids Claude, GPT, Gemini, DeepSeek e GLM no mesmo menu suspenso, e um usuário troca de fornecedor no meio da conversa da mesma forma que trocaria entre duas variantes GPT. Isso reduz a configuração multi-fornecedor usual do LibreChat. Em vez de uma entrada personalizada por fornecedor, cada uma com sua própria chave no .env e sua própria superfície de faturamento, uma entrada com uma chave cobre o catálogo, e o admin vê o uso por modelo em um só lugar em vez de reconciliar vários painéis.
Configuração completa: YAML, .env, e o mount do Docker.
Crie librechat.yaml na raiz do projeto e coloque a chave no .env. A referência ${APISROUTER_API_KEY} no YAML resolve a partir do ambiente na inicialização, então o arquivo de configuração continua podendo ser commitado. O passo que a maioria das configurações de primeira vez esquece é específico do Docker: o container não vê seu librechat.yaml até você montá-lo. A documentação manda criar docker-compose.override.yml com um bind mount de ./librechat.yaml para /app/librechat.yaml, depois recriar os containers. Editar o YAML depois também exige um restart, porque o arquivo é lido na inicialização, não observado. Alguns campos opcionais valem a pena definir em uma entrada de gateway. titleConvo habilita títulos automáticos de conversa, e titleModel escolhe o modelo que os escreve; o padrão documentado do LibreChat para titleModel é gpt-3.5-turbo, um id que um endpoint não-OpenAI pode não servir, então defina-o explicitamente para um id rápido do catálogo ou para o valor especial current_model. modelDisplayLabel controla o nome mostrado nas mensagens do assistente. E apiKey aceita o valor especial user_provided se você quiser que cada usuário cole sua própria chave em vez de compartilhar a chave do servidor.
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"Escolhendo modelos para um workspace de chat compartilhado.
Como todo modelo é cobrado pela mesma chave, o loop prático para um admin é observar uma semana de uso no console, ver quais modelos os usuários de fato escolhem, e podar models.default para combinar, mantendo fetch ligado para que power users ainda alcancem a lista completa.
- O chat do dia a dia quer um generalista forte. claude-sonnet-4-6 e gpt-5.5 carregam conversas longas, discussão de arquivo, e execuções de agente sem ansiedade de modelo a cada mensagem.
- Perguntas curtas de alta frequência são trabalho de volume. claude-haiku-4-5-20251001 e gemini-3.5-flash respondem rápido e evitam que uma implantação com muitos usuários concentre gasto em turnos descartáveis.
- A geração de título dispara em toda conversa. Aponte titleModel para um id rápido; pagar tarifas de ponta para escrever títulos de seis palavras é o desperdício silencioso mais comum em uma implantação do LibreChat.
- Times multilíngues devem testar deepseek-v4-pro e glm-5.2 na sua mistura real de idiomas; um menu suspenso multi-fornecedor torna isso uma comparação dentro do app em vez de uma reconfiguração.
- models.fetch significa que novos modelos do catálogo aparecem sem tocar no YAML, então um modelo adicionado upstream fica selecionável na próxima vez que a lista atualizar.
Pague pelo uso · abaixo do preço oficial
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Modelo | Preço oficial | Nosso preço |
|---|---|---|
| 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 |
Modos de falha específicos do LibreChat.
A configuração não carregando silenciosamente é o clássico, e quase sempre é o mount do Docker. Sem o bind mount do docker-compose.override.yml, o container roda sem nenhum librechat.yaml, o endpoint personalizado nunca aparece no seletor, e nada dá erro. Confirme que o arquivo existe dentro do container antes de depurar qualquer outra coisa. Uma apiKey que chega literalmente como ${APISROUTER_API_KEY} significa que a variável não estava presente no ambiente com o qual o servidor iniciou; a interpolação acontece na inicialização a partir do .env, então uma chave adicionada depois precisa de um restart do container. O sintoma é um 401 do gateway com um bearer token sem sentido. Uma baseURL sem /v1 produz 404s em toda requisição, porque o LibreChat anexa /chat/completions à base como dada. O erro inverso, colar uma URL completa de completions como baseURL, pertence à opção separada directEndpoint e não deve ser combinado com uma entrada normal. Um menu suspenso de modelo vazio com fetch desligado significa que models.default está ausente ou vazio; é um array obrigatório. Com fetch ligado, um menu suspenso vazio geralmente significa que o próprio fetch falhou, o que volta para a chave ou a baseURL. E títulos de conversa falhando em um endpoint que por outro lado funciona são o padrão de titleModel apontando para um id que o gateway não serve; defina-o explicitamente.
Quem roteia o LibreChat por um gateway.
- Times auto-hospedando um workspace de chat compartilhado que querem Claude, GPT, Gemini e DeepSeek em um menu suspenso sem manter uma entrada endpoints.custom e uma conta de fornecedor para cada um.
- Admins rodando implantações multi-usuário que precisam de uma única superfície de uso. Logs por chave mostram quais modelos o time de fato usa, precificados, sem mesclar painéis de fornecedor.
- Operadores dando aos departamentos suas próprias chaves: mesmo YAML, uma chave por grupo, e o log de uso vira o relatório de custo por time.
- Famílias e grupos pequenos substituindo várias assinaturas de chat por um endpoint medido, pagando pelos tokens usados em vez de por assentos.
- Desenvolvedores sem acesso ao faturamento de um determinado fornecedor. O acesso baseado em recarga sem exigência de cartão remove a dependência de cadastro por provedor.
Verifique o endpoint e depure a primeira mensagem.
Prove a metade do gateway antes de tocar no LibreChat: liste os modelos com sua chave, e confirme que os ids que você colocou em models.default aparecem. Se isso funcionar, todo sintoma restante está do lado do LibreChat. Depois inicie a stack e abra o seletor de endpoint. A entrada APIsRouter aparecendo já prova que o YAML carregou; a lista de modelos populando prova o fetch e a chave; a primeira resposta prova o caminho de chat. Trabalhe essas três etapas em ordem em vez de todas de uma vez, porque cada uma tem um conjunto distinto de falhas: o mount, a variável de ambiente, e a baseURL, respectivamente. Assim que as mensagens fluem, o console da APIsRouter mostra modelo, contagens de token e gasto por requisição. Uma instância compartilhada de LibreChat é exatamente o tipo de implantação onde o uso silenciosamente se concentra em dois ou três modelos, e o log de uso é como você descobre quais antes da fatura.
curl -s https://api.apisrouter.com/v1/models \
-H "Authorization: Bearer $APISROUTER_API_KEY" | head -50Perguntas frequentes
Onde eu configuro um endpoint compatível com OpenAI personalizado no LibreChat?
No librechat.yaml sob endpoints.custom, um array de entradas de provider com name, apiKey, baseURL, e um bloco models. Em instalações Docker o arquivo precisa ser montado via bind no container por docker-compose.override.yml ou é ignorado silenciosamente.
A baseURL deve incluir /v1?
Sim para a APIsRouter: https://api.apisrouter.com/v1. O LibreChat anexa caminhos de rota como /chat/completions à base como dada, então um /v1 ausente produz 404s em toda requisição.
Um endpoint do LibreChat pode servir modelos Claude, GPT e DeepSeek juntos?
Sim. O LibreChat encaminha o id de modelo selecionado como uma string simples para a baseURL do endpoint. Quando o endpoint serve vários fornecedores, uma entrada endpoints.custom coloca todos os ids deles no mesmo menu suspenso, e models.fetch mantém essa lista atualizada automaticamente.
Por que meu endpoint personalizado está ausente do seletor?
O YAML não carregou. No Docker a causa usual é um bind mount ausente para librechat.yaml; o container roda sem o arquivo e nada dá erro. Confirme que o arquivo existe dentro do container, depois reinicie, já que a configuração é lida na inicialização.
Por que os títulos de conversa falham quando o chat funciona?
titleConvo usa titleModel, cujo padrão documentado é gpt-3.5-turbo, um id que seu endpoint pode não servir. Defina titleModel explicitamente para um id rápido do catálogo como claude-haiku-4-5-20251001, ou para o valor especial current_model.
Cada usuário pode trazer sua própria chave em vez de compartilhar a chave do servidor?
Sim. Defina apiKey para o valor especial user_provided e o LibreChat pede a cada usuário uma chave, guardada por usuário. Isso combina bem com chaves de gateway, já que uma chave por usuário transforma o log de uso em uma visão de custo por pessoa.