Cursos con lecciones, actividades entregables, cuestionarios autocalificados e inscripciones con progreso.
Las rutas públicas identifican cursos y lecciones por slug (/learn/courses/vue-desde-cero/lessons/componentes). Las rutas de administración usan ids.
Cada curso tiene sus propios roles, independientes del rol en el sitio: student (cursa), teacher (gestiona lecciones, preguntas y califica) y admin (además puede eliminar). Un usuario puede autoinscribirse como student si el curso tiene autoEnroll activo; los demás roles los asigna el owner del sitio.
El progreso del estudiante (0–100) se recalcula automáticamente cuando ve una lección, envía una actividad o completa un cuestionario.
Inscribe al usuario como student con estado active. Solo funciona si el curso tiene autoEnroll.
Parámetros de ruta
courserequerido
string
Slug del curso.
Responde 400 si el curso no permite autoinscripción o si el usuario ya está inscrito.
GET/learn/courses/:course/enrollments Teacher / Admin del curso
Listar inscritos del curso
Parámetros de ruta
courserequerido
string
Slug del curso.
Query string
page
number
Página a consultar (por defecto 1).
per_page
number
Resultados por página (por defecto 10).
GET/learn/courses/:course/enrollments/:id Teacher / Admin del curso
Ver una inscripción
Parámetros de ruta
courserequerido
string
Slug del curso.
idrequerido
string
ID de la inscripción.
Mi aprendizaje
Rutas para armar el panel del estudiante: los cursos en los que está inscrito y las lecciones que ya completó, en todos los cursos del sitio.
GET/learn/user/courses Autenticado
Listar mis cursos
Cursos activos del sitio en los que el usuario autenticado está inscrito (con cualquier rol), del más reciente al más antiguo. Cada curso incluye en enrollments la inscripción del propio usuario.
Lecciones que el usuario autenticado ya vio al menos una vez (el mismo criterio con el que se calcula el progreso), ordenadas por fecha de creación de la lección descendente. Cada lección incluye su curso en course.
Si el usuario está inscrito, registra la vista, actualiza su progreso y agrega su entrega (myAnswer), su último intento de cuestionario (myQuiz) y las preguntas del cuestionario sin la respuesta correcta (quizQuestions).
PUT/learn/courses/:course/lessons/:lesson Teacher / Admin del curso
Actualizar una lección
Parámetros de ruta
courserequerido
string
Slug del curso.
lessonrequerido
string
Slug de la lección.
Cuerpo (JSON)
name
string
Título. El slug se genera a partir de él.
description
string | null
Resumen.
format
'text' | 'html' | 'markdown'
Formato del contenido.
content
string | null
Contenido de la lección.
activity
string | null
Enunciado de la actividad entregable. Si es null, la lección no recibe entregas.
video
string | null
URL de video.
order
number
Posición dentro del curso.
active
boolean
Visible para estudiantes.
limit_date
string | null
Fecha límite ISO para actividad y cuestionario.
DELETE/learn/courses/:course/lessons/:lesson Admin del curso
Eliminar una lección
Parámetros de ruta
courserequerido
string
Slug del curso.
lessonrequerido
string
Slug de la lección.
Actividades y cuestionarios
Una lección puede tener una actividad abierta (texto y/o archivo, calificada por un teacher) y un cuestionario de selección múltiple que appi califica automáticamente.
POST/learn/courses/:course/lessons/:lesson/answers Estudiante del curso
Entregar la actividad de una lección
Parámetros de ruta
courserequerido
string
Slug del curso.
lessonrequerido
string
Slug de la lección.
Cuerpo (JSON)
answerrequerido
string
Respuesta del estudiante.
attachment
string | null
URL de un archivo (puedes subirlo antes con /content/attachments).
Una sola entrega por lección. Responde 400 si la lección no tiene actividad, si pasó la fecha límite o si ya entregaste.
GET/learn/courses/:course/lessons/:lesson/answers/:id Inscrito en el curso
Ver una entrega
El estudiante solo puede ver la suya.
Parámetros de ruta
courserequerido
string
Slug del curso.
lessonrequerido
string
Slug de la lección.
idrequerido
string
ID de la entrega.
GET/learn/courses/:course/lessons/:lesson/answers Teacher / Admin del curso
Listar entregas de la lección
Parámetros de ruta
courserequerido
string
Slug del curso.
lessonrequerido
string
Slug de la lección.
Query string
page
number
Página a consultar (por defecto 1).
per_page
number
Resultados por página (por defecto 10).
PUT/learn/courses/:course/lessons/:lesson/answers/:id Teacher / Admin del curso
Calificar una entrega
Parámetros de ruta
courserequerido
string
Slug del curso.
lessonrequerido
string
Slug de la lección.
idrequerido
string
ID de la entrega.
Cuerpo (JSON)
feedback
string | null
Retroalimentación para el estudiante.
result
number (0-100) | null
Nota.
Ejemplo de petición
{ "feedback": "¡Bien!", "result": 90 }
DELETE/learn/courses/:course/lessons/:lesson/answers/:id Admin del curso
Eliminar una entrega
Parámetros de ruta
courserequerido
string
Slug del curso.
lessonrequerido
string
Slug de la lección.
idrequerido
string
ID de la entrega.
POST/learn/courses/:course/lessons/:lesson/quizzes Estudiante del curso
Enviar un intento de cuestionario
Envía en una sola petición la opción elegida para cada pregunta de quizQuestions. appi califica, guarda el intento y actualiza el progreso. Se permiten varios intentos.
Parámetros de ruta
courserequerido
string
Slug del curso.
lessonrequerido
string
Slug de la lección.
Cuerpo (JSON)
answersrequerido
{ question_id: string, selected: 1-5 }[]
Exactamente una respuesta por cada pregunta vinculada a la lección.
answers y questions llegan como JSON serializado en string: usa JSON.parse.
Responde 400 si faltan o sobran preguntas, si la lección no tiene preguntas o si pasó la fecha límite.
GET/learn/courses/:course/lessons/:lesson/quizzes/:id Inscrito en el curso
Ver un intento
El estudiante solo puede ver los suyos.
Parámetros de ruta
courserequerido
string
Slug del curso.
lessonrequerido
string
Slug de la lección.
idrequerido
string
ID del intento.
GET/learn/courses/:course/lessons/:lesson/quizzes Teacher / Admin del curso
Listar intentos de la lección
Parámetros de ruta
courserequerido
string
Slug del curso.
lessonrequerido
string
Slug de la lección.
Query string
page
number
Página a consultar (por defecto 1).
per_page
number
Resultados por página (por defecto 10).
PUT/learn/courses/:course/lessons/:lesson/quizzes/:id Teacher / Admin del curso
Corregir un intento
Parámetros de ruta
courserequerido
string
Slug del curso.
lessonrequerido
string
Slug de la lección.
idrequerido
string
ID del intento.
Cuerpo (JSON)
status
'pending' | 'completed'
Estado del intento.
results
number (0-100) | null
Nota.
DELETE/learn/courses/:course/lessons/:lesson/quizzes/:id Admin del curso
Eliminar un intento
Parámetros de ruta
courserequerido
string
Slug del curso.
lessonrequerido
string
Slug de la lección.
idrequerido
string
ID del intento.
Banco de preguntas del curso
Preguntas de selección múltiple reutilizables entre lecciones. appi lleva estadísticas de aciertos (wons), fallos (losses) y dificultad (% de fallos). Los teachers/admins del curso crean preguntas en el banco y las vinculan a cada lección para armar su cuestionario.
GET/learn/courses/:course/questions Teacher / Admin del curso
Listar preguntas
Parámetros de ruta
courserequerido
string
Slug del curso.
Query string
page
number
Página a consultar (por defecto 1).
per_page
number
Resultados por página (por defecto 10).
GET/learn/courses/:course/questions/:id Teacher / Admin del curso
Ver una pregunta
Parámetros de ruta
courserequerido
string
Slug del curso.
idrequerido
string
ID de la pregunta.
POST/learn/courses/:course/questions Teacher / Admin del curso
Crear una pregunta
Parámetros de ruta
courserequerido
string
Slug del curso.
Cuerpo (JSON)
namerequerido
string
Enunciado.
response_1, response_2requerido
string
Opciones obligatorias.
response_3 … response_5
string | null
Opciones adicionales.
response_correctrequerido
number (1-5)
Número de la opción correcta.
description
string | null
Contexto adicional.
picture
string | null
URL de imagen.
attachment
string | null
URL de archivo de apoyo.
Ejemplo de petición
{ "name": "¿Qué es un prop?", "response_1": "Un dato que recibe el componente", "response_2": "Un evento", "response_correct": 1 }
PUT/learn/courses/:course/questions/:id Teacher / Admin del curso
Actualizar una pregunta
Parámetros de ruta
courserequerido
string
Slug del curso.
idrequerido
string
ID de la pregunta.
Cuerpo (JSON)
name
string
Enunciado.
response_1, response_2
string
Opciones obligatorias.
response_3 … response_5
string | null
Opciones adicionales.
response_correct
number (1-5)
Número de la opción correcta.
description
string | null
Contexto adicional.
picture
string | null
URL de imagen.
attachment
string | null
URL de archivo de apoyo.
DELETE/learn/courses/:course/questions/:id Admin del curso
Eliminar una pregunta
Parámetros de ruta
courserequerido
string
Slug del curso.
idrequerido
string
ID de la pregunta.
GET/learn/courses/:course/lessons/:lesson/exam-questions Teacher / Admin del curso
Listar preguntas vinculadas a una lección
Preguntas del banco que forman el cuestionario de la lección. Cada vínculo incluye la pregunta completa (con la respuesta correcta) en question.