Lessen API Documentation
Lessen es un middleware de inteligencia artificial que te permite acceder a múltiples modelos de IA a través de una sola API. Compatible con el formato de OpenAI, puedes integrar Lessen en tus proyectos con cambios mínimos.
La API de Lessen sigue el mismo formato que la API de OpenAI. Si ya usas el SDK de OpenAI, solo
necesitas cambiar la base_url y tu API key.
Quick Start
Empieza a usar la API de Lessen en 3 pasos:
1. Obtén tu API Key
Regístrate en app.lessen.es y genera una API key desde el portal
de cliente. Las keys tienen el prefijo lsn_sk_.
2. Haz tu primera petición
curl https://api.lessen.es/v1/chat/completions \
-H "Authorization: Bearer lsn_sk_tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"model": "lessen/lite",
"messages": [
{"role": "user", "content": "Hola, ¿cómo funciona Lessen?"}
]
}'
from openai import OpenAI client = OpenAI( base_url="https://api.lessen.es/v1", api_key="lsn_sk_tu_api_key" ) response = client.chat.completions.create( model="lessen/lite", messages=[ {"role": "user", "content": "Hola, ¿cómo funciona Lessen?"} ] ) print(response.choices[0].message.content)
import OpenAI from 'openai'; const client = new OpenAI({ baseURL: 'https://api.lessen.es/v1', apiKey: 'lsn_sk_tu_api_key' }); const response = await client.chat.completions.create({ model: 'lessen/lite', messages: [ { role: 'user', content: 'Hola, ¿cómo funciona Lessen?' } ] }); console.log(response.choices[0].message.content);
3. Recibe la respuesta
{
"id": "chatcmpl-abc123def456",
"object": "chat.completion",
"created": 1708000000,
"model": "gemma3:latest",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "¡Hola! Lessen es un middleware de IA que..."
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 15,
"completion_tokens": 42,
"total_tokens": 57
}
}
Autenticación
Todas las peticiones a la API requieren autenticación mediante un Bearer token en la
cabecera Authorization.
Authorization: Bearer lsn_sk_tu_api_key
Scopes de API Key
Cada API key tiene un scope que determina los permisos:
| Scope | Permisos |
|---|---|
full |
Acceso completo: listar modelos + crear completions |
read |
Solo lectura: listar modelos + crear completions |
models |
Solo listar modelos disponibles (sin completions) |
Nunca expongas tu API key en el código del frontend. Usa un servidor backend para hacer las peticiones a la API.
Base URL
Todas las peticiones deben dirigirse a:
https://api.lessen.es
Los endpoints de la API siguen el formato /v1/..., por ejemplo:
https://api.lessen.es/v1/models.
Health Check
Verifica el estado del servicio y la conexión con los backends de IA.
curl https://api.lessen.es/health
{
"status": "ok",
"version": "1.0.0",
"ollama": "connected",
"timestamp": "2026-02-14T22:00:00.000Z"
}
Este endpoint no requiere API key. Es útil para monitoreo y health checks.
Listar Modelos
Devuelve la lista de modelos de IA disponibles en la plataforma. Compatible con el formato OpenAI.
curl https://api.lessen.es/v1/models \ -H "Authorization: Bearer lsn_sk_tu_api_key"
{
"object": "list",
"data": [
{ "id": "lessen/lite", "owned_by": "lessen", "backend": "ollama" },
{ "id": "lessen/go", "owned_by": "lessen", "backend": "huggingface" },
{ "id": "lessen/pro", "owned_by": "lessen", "backend": "gemini" },
{ "id": "gemma3:latest", "owned_by": "ollama" },
{ "id": "Qwen/Qwen3-235B-A22B", "owned_by": "huggingface" },
{ "id": "gemini-2.5-flash", "owned_by": "google" }
]
}
Smart Models ⚡
Los modelos lessen/* usan routing inteligente —
un clasificador de 3 capas analiza tu prompt y elige automáticamente el mejor modelo para cada
tarea.
Cada petición pasa por 3 capas de análisis: System Prompt Hints (instrucciones
explícitas),
Análisis Estructural (longitud, bloques de código, formato) y
Keywords (palabras clave del dominio). El resultado clasifica la tarea como
speed, quality, code o reasoning y
selecciona
el modelo más adecuado del backend elegido.
Lessen Lite
lessen/lite
Lessen Go
lessen/go
Lessen Pro
lessen/pro
Routing por Tipo de Tarea
El clasificador detecta 4 tipos de tarea y selecciona el modelo óptimo de cada backend:
| Tipo | Ejemplo | Lite (Ollama) | Go (HuggingFace) | Pro (Gemini) |
|---|---|---|---|---|
speed |
Traducir, clasificar, extraer datos | gemma3:latest | Qwen3-4B | gemini-2.5-flash |
quality |
Análisis, documentos, informes | qwen3:latest | Qwen2.5-72B | gemini-2.5-pro |
code |
Generar código, SQL, debugging | qwen3-coder:latest | Qwen2.5-Coder-32B | gemini-2.5-pro |
reasoning |
Lógica, matemáticas, razonamiento | qwq:latest | Qwen3-235B-A22B | gemini-2.5-pro |
Lessen vs. Competencia
| Característica | Lessen | OpenAI API | Google AI | Anthropic |
|---|---|---|---|---|
| Modelos Lite sin coste | ✓ 17 modelos | ✗ | ✗ | ✗ |
| Auto-routing inteligente | ✓ 4 tipos | ✗ | ✗ | ✗ |
| Multi-backend (Ollama + HF + Gemini) | ✓ | ✗ | ✗ | ✗ |
| Self-hosted / Privado | ✓ | ✗ | ✗ | ✗ |
| Datos en la UE 🇪🇺 | ✓ | ✗ | ✗ | ✗ |
| OpenAI SDK compatible | ✓ | ✓ | ✗ | ✗ |
Headers de transparencia
Cada request a un modelo lessen/* incluye headers para total visibilidad:
x-lessen-routed-to
Modelo real utilizado para la request
x-lessen-task-type
Tipo detectado: speed, quality, code, reasoning
x-lessen-backend
Backend utilizado: ollama, huggingface, gemini
x-lessen-confidence
Confianza del clasificador (0-1)
¿Listo para empezar?
Crea tu API key gratis y empieza a usar Smart Models en menos de un minuto.
Chat Completions
Genera respuestas de chat usando modelos de IA. Soporta streaming vía Server-Sent Events (SSE).
Parámetros del Body
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| model | string |
Sí | ID del modelo a usar (ej: "lessen/lite", "lessen/go",
"lessen/pro") |
| messages | array |
Sí | Array de mensajes con role y content |
| stream | boolean |
No | Si true, devuelve la respuesta como SSE stream. Default: false
|
| temperature | number |
No | Creatividad de la respuesta (0.0 – 2.0) |
| max_tokens | integer |
No | Máximo de tokens en la respuesta |
| top_p | number |
No | Nucleus sampling (0.0 – 1.0) |
Formato de Mensajes
| Role | Descripción |
|---|---|
system |
Instrucciones de comportamiento para el modelo |
user |
Mensaje del usuario |
assistant |
Respuesta previa del asistente (para contexto) |
curl https://api.lessen.es/v1/chat/completions \
-H "Authorization: Bearer lsn_sk_tu_api_key" \
-H "Content-Type: application/json" \
-d '{
"model": "lessen/go",
"messages": [
{"role": "system", "content": "Eres un experto en programación."},
{"role": "user", "content": "¿Cómo hago una petición HTTP en Python?"}
],
"temperature": 0.7,
"max_tokens": 500
}'
response = client.chat.completions.create(
model="lessen/go",
messages=[
{"role": "system", "content": "Eres un experto en programación."},
{"role": "user", "content": "¿Cómo hago una petición HTTP en Python?"}
],
temperature=0.7,
max_tokens=500
)
const response = await client.chat.completions.create({ model: 'lessen/go', messages: [ { role: 'system', content: 'Eres un experto en programación.' }, { role: 'user', content: '¿Cómo hago una petición HTTP en Python?' } ], temperature: 0.7, max_tokens: 500 });
Streaming
Para recibir respuestas en tiempo real, activa stream: true. La respuesta se envía como
Server-Sent Events (SSE), donde cada chunk contiene un delta del contenido.
stream = client.chat.completions.create(
model="lessen/lite",
messages=[{"role": "user", "content": "Cuéntame un chiste"}],
stream=True
)
for chunk in stream:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)
const res = await fetch('https://api.lessen.es/v1/chat/completions', { method: 'POST', headers: { 'Authorization': 'Bearer lsn_sk_tu_api_key', 'Content-Type': 'application/json' }, body: JSON.stringify({ model: 'lessen/lite', messages: [{ role: 'user', content: 'Hola' }], stream: true }) }); const reader = res.body.getReader(); const decoder = new TextDecoder(); while (true) { const { done, value } = await reader.read(); if (done) break; const text = decoder.decode(value); // Parsear cada línea "data: {...}" console.log(text); }
curl -N https://api.lessen.es/v1/chat/completions \
-H "Authorization: Bearer lsn_sk_tu_api_key" \
-H "Content-Type: application/json" \
-d '{"model":"lessen/lite","messages":[{"role":"user","content":"Hola"}],"stream":true}'
Formato SSE
Cada evento SSE tiene el formato data: {json}\n\n. El stream finaliza con
data: [DONE].
data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"delta":{"content":"¡"},"index":0}]}
data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"delta":{"content":"Hola"},"index":0}]}
data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"delta":{"content":"!"},"index":0,"finish_reason":"stop"}]}
data: [DONE]
Errores
La API devuelve errores en formato JSON con un campo error que contiene
message y type.
| Código HTTP | Tipo | Descripción |
|---|---|---|
| 401 | authentication_error |
API key inválida o no proporcionada |
| 403 | permission_error |
La API key no tiene permisos suficientes (scope) |
| 429 | rate_limit_error |
Límite de peticiones diarias excedido |
| 400 | invalid_request |
Parámetros inválidos o faltantes |
| 502 | upstream_error |
Error en el modelo de IA (servicio caído o modelo no encontrado) |
| 404 | not_found |
Endpoint no encontrado |
{
"error": {
"message": "Invalid or revoked API key",
"type": "authentication_error"
}
}
Rate Limits
Los límites de peticiones se aplican por API key y se reinician cada 24 horas (UTC).
| Plan | Peticiones / día | Modelos |
|---|---|---|
| Free | 100 | 3 modelos locales (Ollama) |
| Pro | 10.000 | Todos los modelos locales + GPT-4o, Claude, Gemini |
| Enterprise | Ilimitadas | Todos + modelos premium + fine-tuned |
Cuando superas el límite, recibirás un 429 Too Many Requests con un mensaje indicando
cuándo se reinicia.
SDKs & Librerías
Lessen es 100% compatible con el SDK de OpenAI. Solo necesitas cambiar la base URL.
Python
pip install openai
from openai import OpenAI client = OpenAI( base_url="https://api.lessen.es/v1", api_key="lsn_sk_tu_api_key" )
Node.js / JavaScript
npm install openai
import OpenAI from 'openai'; const client = new OpenAI({ baseURL: 'https://api.lessen.es/v1', apiKey: 'lsn_sk_tu_api_key' });
cURL / HTTP directo
Si prefieres no usar un SDK, puedes hacer peticiones HTTP directas a la API. Cualquier cliente HTTP funciona.
Cualquier librería o herramienta que soporte la API de OpenAI funciona con Lessen. Esto incluye LangChain, LlamaIndex, Vercel AI SDK, y más.
Precios
Elige el plan que mejor se adapte a tu proyecto. Todos los planes incluyen acceso a la API.
- Modelo:
lessen/lite - Backend: Ollama (17 modelos locales)
- Routing inteligente incluido
- €0.00 / token — completamente gratis
- Privacidad total, sin datos en la nube
- Modelo:
lessen/go - Backend: HuggingFace (9 modelos cloud)
- Qwen 235B, Llama 70B, Mistral y más
- €0.00 / token — sin coste
- Streaming de alta velocidad
- Modelo:
lessen/pro - Backend: Google Gemini (2 modelos)
- Gemini 2.5 Flash + Pro
- Desde €0.15/1M tokens input
- Visión, 1M contexto, razonamiento
Soporte
¿Necesitas ayuda? Estamos aquí para ti.
- Email: dev@lessen.es
- Portal de cliente: app.lessen.es
- Status:
GET /healthpara verificar el estado del servicio
