Documentación de la API
Cada institución tiene su propia documentación interactiva de la API, disponible en /docs/ a partir de la dirección de su Eduvem - por ejemplo, https://love.eduvem.com/docs/. Es el material que el equipo técnico responsable de la integración (RH, ERP, BI o cualquier sistema externo) usará para conocer y probar la API antes de escribir cualquier código.

Qué encuentra allí
Sección titulada «Qué encuentra allí»La documentación reúne todos los endpoints de la API de integración: parámetros aceptados, esquemas de solicitud y de respuesta, y los alcances (scopes) exigidos por cada llamada. La página es interactiva - puede expandir cualquier endpoint, completar los parámetros y enviar la solicitud directamente desde el navegador, usando un token real, sin necesitar Postman ni ninguna otra herramienta externa.
Dónde encontrar el enlace
Sección titulada «Dónde encontrar el enlace»En la pestaña Integraciones de la configuración de la institución (Institución > Integraciones), la sección Configuración de la API para Integraciones incluye:
- El enlace Documentación de la API, que abre el
/docs/de su institución. - La URL de la API, ya lista para copiar - la dirección base usada en toda llamada de integración.
Autenticación
Sección titulada «Autenticación»Para probar una llamada directamente en la documentación interactiva - o para configurar una integración real - usted necesita un token de la API válido. La creación, la revocación y los alcances de los tokens se gestionan en la misma pestaña Integraciones: consulte Tokens de la API de integración. Sin un token, la documentación sigue siendo navegable y cada endpoint permanece visible, pero el botón para enviar la solicitud devuelve un error de autenticación.
Clases de un contenido
Sección titulada «Clases de un contenido»Una integración que trata cada clase como una tarea propia - un plan de desarrollo individual en un sistema de RRHH, por ejemplo - puede consultar la lista de clases de un contenido y, por matrícula, el estado de cada una:
GET /integrations/courseVersions/{courseVersionUUID}/lessonsdevuelve la lista ordenada y de solo lectura de las clases del contenido publicado - clases del wizard agrupadas por módulo, los SCOs de un paquete SCORM, o la unidad única de un coursebox.GET /integrations/enrollments/{enrollmentUUID}/lessonsdevuelve la misma lista para una matrícula específica, con el estado “visualizada”/“completada” de cada clase y el progreso general de la matrícula.
Ambas llamadas tienen su propio límite de uso: 120 solicitudes por minuto, por institución, para cada una.
Todos los campos, alcances y ejemplos completos de cada endpoint están en la documentación interactiva de la API de su institución (arriba).
Etapas y progreso de una ruta
Sección titulada «Etapas y progreso de una ruta»Una integración que hace seguimiento de una ruta - un conjunto de salas que forman un mismo recorrido - puede consultar la lista de etapas de la ruta y el progreso de cada participante en ella:
GET /integrations/categories/{categoryUUID}/stepsdevuelve la lista ordenada y de solo lectura de las etapas (salas) que forman la ruta, con el nombre de cada una y el plazo en días configurado (0cuando no hay plazo). Solo funciona para una categoría marcada como ruta - en cualquier otra categoría, la llamada devuelve un error de “no encontrado”.GET /integrations/categories/{categoryUUID}/progressdevuelve, por participante, el total de etapas completadas y el estado de cada etapa (no matriculado, matriculado, bloqueado por una etapa anterior, esperando evaluación o completado). Exige el permiso Informes (lectura) en el token y tiene su propio límite de uso: 120 solicitudes por minuto.
Como en las clases de un contenido, todos los campos de cada respuesta están en la documentación interactiva de la API de su institución (arriba).
Capacitaciones NR para sistemas de SST
Sección titulada «Capacitaciones NR para sistemas de SST»Las integraciones con el sistema de SST de la empresa (SOC, Senior, TOTVS) pueden obtener las capacitaciones NR concluidas, las mismas del informe Exportación de capacitaciones NR:
GET /integrations/reports/nrTrainingRecordsdevuelve, paginada, la lista de capacitaciones NR con certificado emitido en el período. Exige el permiso Informes (lectura) en el token. El parámetrocertifiedSincees obligatorio (aaaa-mm-ddo un instante ISO-8601 conZo desplazamiento) ycertifiedUntiles opcional (por defecto, ahora);pslimita la página a 500 registros. La respuesta también trae el total, la cantidad de personas anonimizadas excluidas y la versión del diseño de la Tabla 28 de eSocial.
El endpoint tiene su propio límite de uso (60 solicitudes por minuto) y solo responde para instituciones con la función de NR habilitada; para las demás, la llamada devuelve un error. Todos los campos están en la documentación interactiva de la API de su institución (arriba).
Resumen de una sala
Sección titulada «Resumen de una sala»Una integración que muestra el avance de una sala en otro sistema (un panel de BI, por ejemplo) puede consultar su resumen agregado:
GET /integrations/reports/courseClasses/{courseClassUUID}/summarydevuelve la cantidad de matriculados y de certificados de la sala, la tasa de finalización y el promedio de las notas. Exige el permiso Informes (lectura) en el token y tiene su propio límite de uso: 120 solicitudes por minuto.
Una sala que existe pero todavía no tiene ninguna matrícula responde con normalidad (HTTP 200) con un resumen vacío: enrolledCount y certifiedCount iguales a 0, y completionRate y averageAssessmentScore nulos. Una sala que no existe, fue eliminada, es una sala de prueba o pertenece a otra institución sigue devolviendo “no encontrada” (HTTP 404, courseClassNotFound).
Identificador de su sistema de RR. HH. (externalId)
Sección titulada «Identificador de su sistema de RR. HH. (externalId)»Cuando la institución carga a las personas mediante la sincronización de personas, cada persona tiene un externalId: el código que el sistema de RR. HH. usa para ella. La API de integración ahora lo devuelve, para que el sistema externo no tenga que cruzar por e-mail o CPF:
- Usuarios (
GET /integrations/usersy la consulta de un usuario): campoexternalId. - Matrículas (
GET /integrations/enrollments): campopersonExternalId, en el bloque de la persona. - Webhooks de matrícula y de ruta: campo
person.externalIden el bloque de la persona del aviso. - Filtro:
GET /integrations/users?externalId=<código>devuelve solo a la persona cuyoexternalIdes exactamente igual al valor indicado.
La clave se omite cuando la persona no tiene externalId. Por eso, las respuestas y los avisos firmados de las instituciones que no usan la sincronización de personas siguen idénticos a los de antes. La descripción de cada campo está en la documentación interactiva, en los cuatro idiomas.
Copiar la lista de matrículas
Sección titulada «Copiar la lista de matrículas»Para copiar todas las matrículas de la institución a otro sistema (un BI o un data lake, por ejemplo), use el cursor de GET /integrations/enrollments en lugar de pedir página por página por número:
- Haga la primera llamada sin
pn(o conpn=1). Cada página completa trae el camponextCursor. - Llame de nuevo enviando
cursor=<el nextCursor recibido>, exactamente como vino, hasta que una respuesta traiganextCursornulo.
Cada página por cursor cuesta lo mismo, sea la primera o la milésima, mientras que pedir la página 500 por número obliga a releer las 499 anteriores. En las respuestas por cursor, count, pageCount y pageNumber vienen nulos.
- No combine
cursorconpnmayor que 1,lastModifiednistartedSince, y repita los mismos filtroscourseClassUUID,userUUIDyteamUUIDde la llamada que generó el cursor. De lo contrario, la respuesta es un errorcursorConflict. - Cambios recientes: el cursor solo entrega matrículas modificadas hace más de 5 minutos. Un cambio aparece en una copia por cursor después de ese plazo.
- Entrega al menos una vez: una matrícula modificada durante la copia puede llegar de nuevo más adelante. Actualice por
enrollmentUUIDen lugar de insertar de nuevo. - Sincronización incremental: guarde el mayor
lastModificationDaterecibido y, en la próxima ejecución, empiece conlastModified=<ese valor menos 5 minutos>.