No todas las APIs de IA gratuitas sirven para algo serio. Muchas obligan a escoger un modelo concreto, cambian de condiciones sin avisar o se quedan cortas en cuanto pides herramientas, razonamiento o salidas estructuradas. Por eso resulta interesante openrouter/free, el router gratuito de OpenRouter, lanzado el 1 de febrero de 2026, con 200.000 tokens de contexto y un precio oficial de 0 dólares por millón de tokens de entrada y 0 dólares por millón de tokens de salida.
La idea no es darte un único modelo gratis, sino una capa de enrutado que selecciona entre los modelos gratuitos disponibles en OpenRouter y filtra cuáles son válidos según lo que pida tu solicitud. La propia página del servicio indica que el router tiene en cuenta si necesitas comprensión de imagen, tool calling, razonamiento, salidas estructuradas y otras capacidades antes de elegir backend. Para un administrador de sistemas o un programador, eso significa una cosa muy concreta: menos tiempo comparando modelos y más tiempo automatizando tareas.
Además, OpenRouter expone una API unificada para cientos de modelos y documenta que su endpoint principal para chat y multimodalidad es /api/v1/chat/completions, con autenticación mediante Bearer token y compatibilidad con SDKs tipo OpenAI. No es una API anónima: hace falta crear una clave en OpenRouter, aunque el uso del router openrouter/free tenga coste cero en tokens.
Por qué puede interesar a sysadmins y desarrolladores
Para un perfil técnico, openrouter/free no destaca solo por ser gratis, sino por dos cosas más. La primera es que puedes usarlo como backend temporal o permanente para scripts, bots internos, herramientas CLI, análisis de logs, clasificación de tickets o generación de JSON sin comprometerte desde el minuto uno con un proveedor concreto. La segunda es que OpenRouter permite filtrar modelos por parámetros soportados, por ejemplo tools, tool_choice, structured_outputs, response_format o reasoning, lo que facilita bastante automatizar sin ir a ciegas.
También soporta entradas multimodales en el mismo endpoint. La documentación oficial indica que imágenes, PDFs, audio y vídeo pueden enviarse mediante messages, usando tipos como image_url, file, input_audio o video_url, y que OpenRouter filtra automáticamente qué modelos pueden atender esa modalidad. En el caso de los PDF, incluso documenta que los puede procesar en cualquier modelo, bien pasándolos de forma nativa o parseándolos antes cuando el modelo no soporta archivos directamente.
Eso sí, conviene no venderlo como una base perfecta para producción crítica. La propia página de openrouter/free muestra que el tráfico reciente se reparte entre varios modelos gratuitos distintos —por ejemplo Step 3.5 Flash, Trinity Large Preview, Nemotron 3 Super o Trinity Mini—, así que el backend efectivo puede cambiar con el tiempo. Para pruebas, automatización ligera y herramientas internas, eso puede ser una ventaja. Para cargas sensibles o reproducibilidad estricta, suele ser mejor fijar un modelo concreto en lugar de dejar la elección al router. Esta conclusión es una inferencia razonable a partir del comportamiento documentado del servicio.
Cómo probarlo en 30 segundos
El flujo mínimo es muy simple: crear una clave, exportarla y lanzar una petición contra el endpoint de chat.
export OPENROUTER_API_KEY="tu_api_key"curl https://openrouter.ai/api/v1/chat/completions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openrouter/free",
"messages": [
{
"role": "user",
"content": "Resume en 5 líneas qué hace systemd-journald"
}
]
}'
Este ejemplo usa justo el formato que OpenRouter documenta para POST /api/v1/chat/completions: cuerpo con model y messages, y autenticación por cabecera Authorization: Bearer.
Cómo comprobar si el router puede hacer lo que necesitas
Antes de enchufarlo a un script o a una tarea de cron, tiene sentido validar capacidades. OpenRouter expone un endpoint de modelos y permite filtrarlo por parámetros soportados.
Por ejemplo, si quieres verificar soporte para herramientas:
curl "https://openrouter.ai/api/v1/models?supported_parameters=tools" \
-H "Authorization: Bearer $OPENROUTER_API_KEY"
Y si buscas modelos con salida de imagen, texto o ambos:
curl "https://openrouter.ai/api/v1/models?output_modalities=text,image" \
-H "Authorization: Bearer $OPENROUTER_API_KEY"
La documentación oficial explica que supported_parameters sirve precisamente para filtrar modelos por soporte de tools, reasoning, structured_outputs y otros parámetros, mientras que output_modalities permite filtrar por texto, imagen, audio o embeddings.
Ejemplo útil: extraer un resumen estructurado de logs
Un caso bastante realista para sysadmins es convertir texto desordenado en una estructura que luego puedas pasar a otro script. OpenRouter documenta que el endpoint admite response_format y structured_outputs en los modelos que lo soportan.
Este ejemplo en Python pide una salida JSON simple para clasificar un bloque de logs:
import os
import requestsapi_key = os.environ["OPENROUTER_API_KEY"]payload = {
"model": "openrouter/free",
"messages": [
{
"role": "user",
"content": (
"Analiza este log y devuelve JSON con severity, service y summary.\n\n"
"[ERROR] nginx: upstream timed out while reading response header from upstream"
),
}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "log_summary",
"schema": {
"type": "object",
"properties": {
"severity": {"type": "string"},
"service": {"type": "string"},
"summary": {"type": "string"},
},
"required": ["severity", "service", "summary"],
"additionalProperties": False,
},
},
},
}r = requests.post(
"https://openrouter.ai/api/v1/chat/completions",
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
},
json=payload,
timeout=60,
)print(r.json())
En un entorno real, esto encaja bastante bien para enriquecer alertas, generar resúmenes de incidencias, normalizar respuestas de scripts o producir salidas limpias para pipelines de automatización.
Otro punto interesante: Claude Code y OpenRouter
OpenRouter también documenta integración directa con Claude Code. Si defines ANTHROPIC_BASE_URL=https://openrouter.ai/api, Claude Code puede hablar con OpenRouter mediante su “Anthropic Skin”, sin proxy local, y usando créditos de OpenRouter. Eso no convierte openrouter/free en el backend ideal para Claude Code en todos los casos, pero sí abre una vía interesante para pruebas y laboratorios de agentes.
Qué conviene vigilar en una integración real
Si lo vas a meter en scripts, hay un detalle operativo importante: OpenRouter documenta comportamientos de error distintos según el modo. En chat completions, si no se ha emitido ningún token devuelve un ErrorResponse estándar; si ya había empezado a responder, puede incrustar el error al final en choices; y en streaming lo manda como evento SSE con campo error. Para una CLI rápida da igual, pero para demonios, workers o automatización robusta conviene tratar bien esos casos.
Preguntas frecuentes
¿openrouter/free es realmente gratis?
Sí, según la página oficial del router, su precio es 0 dólares por millón de tokens de entrada y 0 dólares por millón de tokens de salida. (openrouter.ai)
¿Necesito API key aunque no pague tokens?
Sí. OpenRouter exige autenticación con Bearer token y hay que crear una clave para usar la API.
¿Puedo usarlo para imagen o PDF?
Sí. OpenRouter documenta que el mismo endpoint de chat admite entradas multimodales como imágenes y PDFs, y filtra modelos compatibles según el contenido enviado.
¿Es buena idea para producción?
Puede servir para prototipos, automatización ligera y herramientas internas, pero como el router cambia entre modelos gratuitos disponibles, no siempre será la mejor opción cuando necesites comportamiento muy estable o reproducible. Esa es una inferencia razonable a partir de la naturaleza dinámica del servicio.







