Documentación
LibreChat
LibreChat configura un gateway como bloque en librechat.yaml: cuatro campos obligatorios, una variable de entorno para la clave y un reinicio. Después, el selector permite elegir ID de Claude y GPT con un solo nombre de endpoint.
LibreChat utiliza una puerta de enlace como bloque endpoints.custom en librechat.yaml — cuatro campos obligatorios, la clave desde .env y un reinicio antes de que aparezca en el selector.
# librechat.yaml — project root, beside your .env
version: 1.3.5 # the value the documentation's own example carries
endpoints:
custom:
# Required: name, apiKey, baseURL, models. The name must be unique and
# must not reuse a built-in endpoint name such as openAI or anthropic.
- name: "Kunavo"
apiKey: "${KUNAVO_API_KEY}" # resolved from .env, not written here
# Keep the /v1. LibreChat appends /chat/completions to this by default.
baseURL: "https://api.kunavo.com/v1"
models:
default: ["claude-sonnet-5", "claude-haiku-4-5"]
fetch: true # fills the picker from GET /v1/models
titleConvo: true
titleModel: "claude-haiku-4-5" # titles are a separate call — pin a cheap id
modelDisplayLabel: "Kunavo"
# Optional but worth the four lines: without it LibreChat prices your
# traffic from a table it ships. prompt/completion are USD per million
# tokens; context is that model's own window. All three required.
tokenConfig:
claude-sonnet-5:
prompt: 1.4
completion: 7
context: 1000000
claude-haiku-4-5:
prompt: 0.7
completion: 3.5
context: 200000baseURL conserva /v1. La documentación lo aclara en el texto, no con un ejemplo: indica que directEndpoint se usa cuando la URL base ya es el endpoint completo de completions, y que es «necesario porque la aplicación añade “/chat/completions” o “/completion” a baseURL de forma predeterminada». Por tanto, https://api.kunavo.com/v1 se resuelve en /v1/chat/completions, que es la ruta a la que hay que enviar la solicitud, y directEndpoint queda sin configurar. Los dos ejemplos prácticos del propio sitio terminan igual: https://api.mistral.ai/v1 y https://openrouter.ai/api/v1. Un origen sin sufijo produce aquí un error 404, no un error de autenticación.librechat.yaml debe existir en la raíz del proyecto, montarse en el contenedor de la API y que hay que reiniciar LibreChat para que el cambio aparezca en la interfaz. Si un endpoint nuevo no aparece en el selector, casi siempre se debe a esto y no a las credenciales; comprueba las credenciales por separado con el curl de abajo.tokenConfig anterior permite anular esa tarifa. Decláralo para cada ID que expongas o interpreta el registro como una estimación y el saldo de /app/billing como el dato real.curl de abajo; el comportamiento del cliente depende de LibreChat.sk-kn-) y añade crédito desde $10; las llamadas se pagan con ese saldo y las llamadas fallidas no se facturan. El panel se abre entonces en la configuración de LibreChat.Paso a paso
- Cree una clave en
/app/keysy cópiela: se muestra una sola vez. - En Docker, monta primero la configuración: la guía de inicio rápido indica que copies
docker-compose.override.yml.exampleadocker-compose.override.ymly descomentes el volumenlibrechat.yaml. En una instalación directa en el equipo, puedes omitir este paso. - Crea o edita
librechat.yamlen la raíz del proyecto, en el mismo directorio que.env, y añade la entradaendpoints.customanterior. - Incluye la clave en
.envcomoKUNAVO_API_KEY=sk-kn-.... El marcador${KUNAVO_API_KEY}del YAML se sustituye por ese valor, así el secreto no queda en el archivo de configuración que confirmas en el repositorio. - Reinicia LibreChat y abre el selector de endpoints: Kunavo aparecerá como una entrada independiente junto a las integradas. La lista de modelos se obtendrá de
GET /v1/modelso, si falla la consulta, se usará tu arraymodels.default. - Envía un mensaje y luego comprueba que el selector de modelos cambia de modelo. Los ID se resuelven en el endpoint, así que es normal que haya un ID de Claude y otro de GPT bajo una misma entrada; no es un error de configuración.
Comprobado con Referencia del objeto de endpoint personalizado de LibreChat el 21 de septiembre de 2026. La configuración de terceros puede cambiar; si el nombre de un campo ya no coincide con lo que ves, esa página es la autoridad, no esta.
Verifica antes de depurar el cliente
Una solicitud determina si el fallo está en el endpoint, la clave o el archivo de configuración. Si devuelve JSON, la misma URL base y la misma clave funcionan en LibreChat.
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."Qué ID de modelo introducir en el campo
Todos los modelos de texto están disponibles mediante un ID de modelo; la lista activa está en GET /v1/models, y el catálogo con precios está en la página de modelos. Las tarifas son USD por 1M de tokens, entrada / salida.
| ID de modelo | Entrada / salida de Kunavo | Dónde encaja en LibreChat |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | la entrada predeterminada en models. |
claude-opus-5 | $3.50 / $17.50 | el ID que se selecciona para un análisis largo, cuando una respuesta mejor justifica el turno |
claude-haiku-4-5 | $0.70 / $3.50 | el volumen de tráfico de una instancia compartida y titleModel: LibreChat genera el título de cada conversación en una llamada independiente |
gpt-5-6-terra | $0.70 / $4.20 | documentos extensos pegados en el chat, donde el factor decisivo es la ventana de contexto |
Tres campos opcionales con comportamientos distintos detrás de un gateway
Todo lo que aparece en esta tabla procede de la misma referencia de campos, consultada en la fecha indicada arriba. Es la descripción de LibreChat de su propia configuración; no es un resultado de una prueba de Kunavo ni una afirmación sobre el comportamiento de un ID de modelo específico cuando la solicitud sale del cliente.
| Campo | Qué indica la referencia | Por qué es relevante para un gateway |
|---|---|---|
provider | Dirige un endpoint personalizado a través de un cliente de proveedor nativo. Actualmente, Anthropic es el valor admitido. | Cambia el protocolo de comunicación, no el proveedor: el mismo bloque puede usar Anthropic Messages en lugar de chat completions. En esa ruta no se obtiene la lista de modelos al estilo OpenAI, así que incluye los ID en models. |
models.fetch | Si está habilitado, intenta obtener una lista de modelos desde la API. Si la respuesta se retrasa, puede ralentizar el inicio del uso. | Kunavo responde a GET /v1/models, así que la lista del selector se completa sola. models. |
tokenConfig | Define las ventanas de contexto y las tarifas por millón de tokens específicas de cada modelo para hacer el seguimiento de costos y calcular el uso. | Sin este campo, el registro calcula el precio de tu tráfico con la tabla incluida en LibreChat, comparando el ID con una tabla que no se diseñó para él. Con este campo, la interfaz muestra las cifras que configures. |
La guía de cuatro pasos —montar, configurar, establecer la variable de entorno y reiniciar— está en la página de inicio rápido de endpoints personalizados de LibreChat, que usa un gateway en su ejemplo práctico.
Preguntas frecuentes
¿Cómo añado un endpoint personalizado a LibreChat?
Crea librechat.yaml en la raíz del proyecto, junto a tu .env, y añade una entrada en endpoints.custom con los cuatro campos obligatorios: name, apiKey, baseURL y models. El nombre debe ser único y no puede coincidir con el de un endpoint integrado, como openAI o anthropic. Guarda la credencial en .env y haz referencia a ella en el YAML como ${YOUR_ENV_VAR}; luego reinicia. En Docker, el archivo también debe montarse en el contenedor de la API mediante docker-compose.override.yml, y la nueva entrada solo aparecerá en el selector de endpoints después del reinicio.
¿La baseURL de LibreChat debe terminar en /v1?
Sí, para un gateway compatible con OpenAI. La referencia de campos de LibreChat indica que la opción directEndpoint se usa cuando la URL base ya es el endpoint completo de completions, y que es necesaria porque la aplicación añade /chat/completions o /completion a baseURL de forma predeterminada. Por tanto, la URL base debe ser la raíz de la API con el sufijo /v1: https://api.kunavo.com/v1; directEndpoint debe quedar sin configurar. Ambos ejemplos del sitio de LibreChat siguen el mismo formato. Si la URL es incorrecta, se produce un error 404 y no un error de autenticación, lo que permite distinguirlo de una clave incorrecta.
¿Por qué los costos que muestra LibreChat no coinciden con lo que cobró el proveedor?
Porque LibreChat calcula el precio de una solicitud a partir de una tabla de precios incluida en el programa, no del importe facturado por tu proveedor, y busca allí el ID de modelo. Un ID de gateway parecido a una entrada de la tabla se calcula con la tarifa de esa entrada; si el ID no coincide con ninguna, se aplica una tarifa fija. Para corregirlo, añade un bloque tokenConfig a tu endpoint personalizado y declara prompt, completion y context para cada ID que expongas, con precios en USD por millón de tokens. LibreChat comprueba este ajuste antes de consultar su propia tabla. Considera el registro de la aplicación como una estimación y el saldo de tu proveedor como el dato definitivo.
¿Puede LibreChat usar modelos de Claude a través de un endpoint personalizado?
Sí, de dos maneras. Un endpoint personalizado compatible con OpenAI transmite el ID del modelo directamente a tu baseURL, así que el ID de Claude se resuelve en ese endpoint y no dentro de LibreChat; no se necesita una cuenta de Anthropic. Como alternativa, el campo provider dirige el mismo bloque al cliente nativo Anthropic Messages de LibreChat; actualmente, anthropic es el valor admitido. En esa ruta no se obtiene la lista de modelos al estilo OpenAI, así que incluye los ID que quieras en models.default en lugar de depender de la obtención automática.
¿Kunavo ha probado LibreChat?
No. La configuración de esta página se transcribió de la documentación de endpoints personalizados de LibreChat en la fecha indicada, y nada de lo que aparece aquí es resultado de una ejecución: no se ha probado ninguna conversación, turno en streaming, ciclo de llamadas a herramientas ni ejecución de Agents. Esto se aplica a todos los clientes documentados aquí; una página de configuración publicada no constituye una prueba. Puedes comprobar por tu cuenta en diez segundos si la URL base y la clave funcionan; para eso sirve el curl de esta página. Todo lo demás depende del comportamiento de LibreChat con el ID de modelo que hayas elegido.