API v1Node.jsno-store100 req/minCORS

Consulta perfiles academicos de LEO con una peticion POST.

Este servicio envuelve la libreria publica de LEO y entrega respuestas compactas para apps, bots, integraciones internas o paneles administrativos.

no-store

Respuestas privadas sin cache.

compact

Payload listo para interfaces.

json

Errores y exitos con formato estable.

rate-limit

Limite por IP, ruta y ventana de tiempo.

cors

Origenes permitidos configurables.

resend

Contacto conectado por correo.

Endpoint principal

Perfil academico compacto

La ruta recomendada para construir interfaces sin cargar respuestas pesadas.

POSTv1

Ruta

/profile

Cache

no-store

Respuesta

compacta

cURL

curl -X POST https://leo.sklconnect.com/api/leo/profile \
  -H "Content-Type: application/json" \
  -d '{  "codigo": "A00000000",  "password": "tu_contraseña"}'

Peticiones registradas

local

--

Cargando contador

Endpoints disponibles

Primer bloque de capacidades expuestas por la API.

POST/api/leo/profile

Perfil compacto para UI.

POST/api/leo/profile/full

Perfil completo sanitizado.

POST/api/leo/kardex

Kardex, ciclos y progreso.

POST/api/leo/schedules

Horarios por ciclo.

POST/api/leo/card

Credencial resumida.

GET/api/leo/stats

Contador operativo persistente si Redis esta conectado.

Body

Credenciales enviadas por el consumidor de la API.

JSON

{
  "codigo": "A00000000",
  "password": "tu_contraseña"
}

Respuesta OK

Perfil academico compacto, listo para UI.

200

{
  "ok": true,
  "profile": {
    "student": {},
    "plan": {},
    "stats": {},
    "cycles": [],
    "completedCourses": [],
    "schedules": [],
    "studentCard": {}
  }
}

Errores

Formato estable para credenciales, LEO o servidor.

4xx/5xx

{
  "ok": false,
  "code": "INVALID_CREDENTIALS",
  "message": "No se pudo iniciar sesion en LEO. Revisa tu codigo y contraseña."
}

Acceso

Todos los endpoints POST usan el mismo body.

Header

Content-Type: application/json

Por ahora el consumo documentado no requiere clave adicional. Las credenciales del alumno se envian en el body y solo se usan para ejecutar la consulta solicitada.

Rate limit

Proteccion basica contra abuso.

Limite

100

Ventana

60s

Agrupado por

IP + ruta

Headers

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 99
X-RateLimit-Reset: 2026-06-01T18:00:00.000Z

Referencia de endpoints

Que devuelve cada ruta y cuando usarla.

Perfil compacto

/api/leo/profile

Uso recomendado para interfaces, dashboards y apps cliente.

Perfil completo

/api/leo/profile/full

Respuesta amplia de la libreria, sanitizada antes de salir.

Kardex

/api/leo/kardex

Materias capturadas, ciclos, progreso y datos de historial.

Horarios

/api/leo/schedules

Materias actuales o inscritas por ciclo, separadas del kardex.

Credencial

/api/leo/card

Resumen de credencial sin imagenes, firma ni QR en base64.

Estadisticas

/api/leo/stats

Contador operativo y desglose por ruta.

Codigos de error

Todos los errores mantienen el formato ok/code/message.

INVALID_JSON

error

El body no es JSON valido.

MISSING_CREDENTIALS

error

Falta codigo o contraseña.

CORS_ORIGIN_DENIED

error

El origen web no esta permitido.

RATE_LIMITED

error

Se excedio el limite de peticiones.

INVALID_CREDENTIALS

error

LEO no acepto las credenciales.

HTTP_ERROR

error

LEO respondio con un error temporal.

UNKNOWN_ERROR

error

Error inesperado del servidor.

Perfil compacto

Campos principales devueltos por /api/leo/profile.

student

profile

Datos basicos del alumno.

plan

profile

Plan academico, estado, nivel y ciclo activo.

stats

profile

Creditos, promedio, ciclos y conteos.

cycles

profile

Resumen por ciclo cursado.

completedCourses

profile

Materias capturadas en kardex.

schedules

profile

Horarios y materias por ciclo.

studentCard

profile

Credencial resumida y estado de recursos.

Seguridad y privacidad

Medidas aplicadas en servidor.

  • No se guardan contraseñas ni sesiones academicas.
  • Las respuestas privadas usan Cache-Control: no-store.
  • Se sanitizan raw, tokens, imagenes, firmas, QR y base64.
  • La credencial de servidor permanece solo en variables de entorno.

Casos de uso

Escenarios donde esta API tiene sentido.

Dashboard academico privado
Bots internos de consulta
Reportes administrativos
Integraciones escolares autorizadas

Acceso e integraciones

¿Tienes dudas o quieres empezar?

Escríbenos para solicitar acceso, revisar una integración o resolver dudas sobre el uso de la API.