Reach tiene una API pública para conectar el LMS con otros sistemas de la empresa: el de recursos humanos, el que da los accesos, un tablero de BI o una aplicación propia. La mayoría de los equipos no la necesita, porque el panel de Reach ya muestra los reportes y los exporta. Hace falta cuando un curso habilita algo fuera del LMS y ese dato tiene que llegar al otro sistema sin que nadie lo cargue a mano.
En esta página contamos qué permite la API y qué no, según la documentación oficial que revisamos en octubre de 2026. También mostramos la prueba que hicimos con un curso nuestro. Las dos tablas de más abajo salen de la API de nuestra cuenta de Reach, que el sitio consulta cada doce horas.
Para qué se conecta Reach con otro sistema
La pregunta que ordena todo es qué tiene que pasar fuera de Reach cuando alguien termina un curso. Estos son casos donde la integración se justifica:
- Una certificación auditable que habilita a entrar a un sector restringido, a operar una máquina o a usar un sistema
- Una comisión o un puntaje de desempeño que sube cuando alguien completa una ruta de aprendizaje
- El legajo del sistema de recursos humanos, que registra qué capacitaciones hizo cada persona
- Un tablero de BI que cruza la capacitación con las ventas o con la rotación
Cuándo alcanza con el panel de Reach
Si lo que hace falta es ver quién hizo qué, la API sobra. El tablero Analyze de Reach muestra reportes por curso, por persona, por grupo y por ruta de aprendizaje, con el detalle de cada pregunta de los cuestionarios. Los reportes se exportan a CSV con un clic y a una persona se le puede dar el rol de reporter para que vea los de su grupo sin administrar la cuenta.
Hay otras tres cosas que suelen pedirse a la API y que Reach ya resuelve de otra forma:
- Los recordatorios a quien no terminó un curso, que Reach manda por mail, Slack o Microsoft Teams con la frecuencia que se configure
- El alta y la baja de usuarios, que con inicio de sesión único y SCIM se sincronizan con el directorio de la empresa
- Las automatizaciones chicas, como anotar en una planilla cada curso terminado, que se arman con Zapier sin programar (salvo en las cuentas alojadas en el data center europeo)
Qué permite la API y qué no
Es una API REST que se autentica con una clave. La clave se genera en Reach, desde Manage > Settings > Manage API Keys. Con ella se puede:
- Invitar personas por mail y sumarlas a grupos desde la misma invitación.
- Crear, renombrar y borrar grupos, y sumar o sacar personas de cada uno.
- Inscribir personas o grupos enteros en cursos y rutas de aprendizaje, y darlos de baja.
- Leer el catálogo de cursos y de rutas.
- Traer el reporte de actividad de la cuenta y los de cada curso, persona, ruta y grupo. El de curso trae, por persona, el estado, el avance, la nota del cuestionario y la fecha de finalización.
- Cargar como completado un curso que alguien hizo en otro lado, con sus fechas.
- Avisarle a otro sistema (con webhooks) cuando alguien termina un curso, cuando se crea un usuario, cuando hay inscripciones nuevas o cuando un autor manda un curso a revisión.
Lo que no se puede hacer:
- Filtrar por fecha. Los reportes aceptan un solo parámetro, que fija cuántos registros trae cada página (hasta 2.000).
- Saber cuándo alguien completó una ruta de aprendizaje. Su reporte trae el estado de cada persona pero no la fecha.
- Recibir avisos de otros eventos. No hay webhook de ruta completada, de curso comenzado, de cuestionario desaprobado ni de baja de usuario.
- Crear o editar usuarios. La API invita y la persona tiene que aceptar la invitación.
- Crear o editar cursos y rutas. El catálogo es de solo lectura.
- Emitir o descargar certificados.
La prueba: el reporte de un curso
Para probarla usamos un curso que publicamos en Reach en mayo de 2024 con dos requisitos a la vez: el 80 % de las lecciones completadas y el resultado del cuestionario final.
Con la clave y el ID del curso, que sale de consultar el catálogo, el reporte se pide a una sola dirección. Así lo hace nuestro sitio, que está en WordPress:
// La clave vive en wp-config.php, fuera del código y del repositorio
$respuesta = wp_remote_get(
'https://api.reach360.com/reports/courses/' . $id_del_curso,
array(
'timeout' => 5,
'headers' => array( 'Authorization' => 'Bearer ' . PMOV_REACH_KEY ),
)
);
$datos = json_decode( wp_remote_retrieve_body( $respuesta ), true );
$personas = isset( $datos['learners'] ) ? $datos['learners'] : array();
La respuesta trae un registro por cada persona inscripta. Entre otros campos están el estado del curso (status) y la nota del cuestionario (quizScorePercent). Con esos dos armamos la tabla:
| Persona | Nota del cuestionario | Estado |
|---|---|---|
| Sebastián C. | 100 | Complete |
| Agustín D. | Not Started | |
| Martín F. | Not Started | |
| Abril F. | 100 | In Progress |
| Soporte I. | 67 | In Progress |
| Sofía M. | Not Started | |
| Santiago P. | Not Started | |
| Equipo P. | In Progress | |
| Plataforma P. | Not Started | |
| Lucas R. | In Progress | |
| Ventas R. | 100 | Complete |
| Learning R. | Not Started | |
| Luciana R. | 67 | Complete |
| Analí S. | Not Started | |
| Soporte S. | 33 | Complete |
| Victor Eduardo T. | Not Started |
Estado y nota viajan por separado. Puede aparecer alguien con 100 en el cuestionario y el curso en In Progress, porque fue directo al cuestionario sin recorrer las lecciones. También puede aparecer alguien con el curso en Complete y una nota baja. Cuando de este reporte depende algo, la regla tiene que mirar los dos campos.
Filtrar a quienes completaron y aprobaron
Supongamos que el curso habilita la entrada a una planta solo a quien lo completó y sacó más de 80 en el cuestionario. La API no tiene un filtro para eso, así que el reporte llega completo y el recorte se hace en el sistema que lo recibe.
// Quedan solo quienes completaron el curso y sacaron más de 80
$habilitados = array_filter( $personas, function ( $persona ) {
return 'Complete' === $persona['status']
&& $persona['quizScorePercent'] > 80;
} );
El resultado es la lista de personas habilitadas:
| Persona | Nota del cuestionario | Estado |
|---|---|---|
| Sebastián C. | 100 | Complete |
| Ventas R. | 100 | Complete |
Con las fechas pasa lo mismo, porque los reportes no se pueden pedir por período. El de curso trae la fecha de finalización de cada persona en el campo completedAt, así que para saber quiénes completaron en septiembre se trae entero y se filtra por ese campo. Con las rutas de aprendizaje no alcanza, porque su reporte no trae la fecha. Para fecharlas hay que guardar el estado en cada consulta y compararlo con el de la anterior.
Antes de programar la integración
- Una clave por integración, guardada fuera del código y del repositorio. Si una se filtra, se revoca solo esa.
- Un tiempo de espera corto y una copia de la última respuesta buena. Si la API tarda o falla, la página o el proceso siguen con el último dato. Nuestro sitio espera 5 segundos y guarda el reporte durante 12 horas.
- Los webhooks para lo que tiene que pasar en el momento y los reportes para lo que se revisa cada tanto. Cada aviso se responde con un 200 y, si esa respuesta no llega, Reach lo reintenta 14 veces durante 48 horas.
- El desarrollo a cargo del equipo técnico de la empresa. El soporte de Articulate no escribe ni depura scripts.
Fuentes, consultadas el 14 de octubre de 2026 (en inglés): la introducción a la API de Reach, la API de reportes, los eventos de los webhooks, la gestión de claves y la integración con Zapier.
Para publicar los cursos en otro LMS o mandar los datos a un LRS, el camino está en Publicar y conectar. Y si la duda es más general, en ¿Qué es una API en elearning?