Skip to navigation

Cambios en la API pública de Crehana.

Nuevo endpoint para crear turnos

POST /org/{slug}/time/attendance/shifts/ crea un turno de Asistencia, fijo o rotativo, con sus descansos y tolerancias, igual que un administrador desde Crehana. Está pensado para sistemas de RR. HH. o de planificación que son dueños de los horarios.

{
"shift_type": "NON_ROTATING",
"name": "Mañana 09-18",
"weekly_schedule": [
{ "day": "MONDAY", "entry_time": "09:00", "exit_time": "18:00" },
{ "day": "TUESDAY", "entry_time": "09:00", "exit_time": "18:00" },
{ "day": "WEDNESDAY", "entry_time": "09:00", "exit_time": "18:00" },
{ "day": "THURSDAY", "entry_time": "09:00", "exit_time": "18:00" },
{ "day": "FRIDAY", "entry_time": "09:00", "exit_time": "18:00" }
]
}

La respuesta trae el id del turno y, en un rotativo, el id de cada ciclo: son el shift_id y el start_cycle_id que pide Asignar turnos. Los días que no se mandan son de descanso, las horas van en HH:MM y una salida menor que la entrada es un turno nocturno.

El nombre es único entre los turnos activos de la organización: reenviar la misma creación responde 409 con el id del turno que ya existe, así que un reintento nunca duplica. Requiere credenciales de un administrador de la organización.

Guía completa en Crear turnos.

Nuevo reporte: resultados de evaluaciones por clase

GET /api/v5/rest/org/{organization_slug}/reports/learning/quiz-results/ devuelve los resultados de los quizzes de clase (las evaluaciones de cada video, no la evaluación final del curso, que ya está en reports/learning/quizzes) con una fila por usuario, curso y quiz. Es la misma información del Excel “Resultados de Evaluaciones por Clase” del panel de administración, lista para integrar.

Cada fila consolida los intentos: attempts_count, las fechas del primero, el último y el mejor intento (first_attempt_at, last_attempt_at, best_attempt_at, en UTC), el puntaje del último intento (score) y el más alto (best_score), el mínimo para aprobar (passing_percentage), respuestas correctas e incorrectas, total de preguntas, duración y límite de tiempo en segundos (time_limit_seconds, null cuando no hay límite) y el estado del último intento (status: approved, failed, incomplete o not_started). También viene el curso (course_id, course_title), el quiz (quiz_id, quiz_name, quiz_type summative o formative) y la persona (user_id, user_full_name, user_email, user_document).

Filtros: course_id (repetible, hasta 100), user_email, document, status y el rango from_date / to_date sobre last_attempt_at. Las filas llegan ordenadas por last_attempt_at, de la más reciente a la más antigua, y se recorren con cursor / next_cursor (limit hasta 500). Este reporte no acepta offset.

{
"total": 45,
"next_cursor": "cXVpel9yZXN1bHRzOlsiMjAyNi0wMy0xMFQxOTozNDoxNSIsMjQ4Nzg4XQ==",
"has_next_page": true,
"results": [
{
"course_id": 47847,
"course_title": "Curso con quiz",
"user_id": 6816375,
"user_full_name": "Ana Pérez",
"user_email": "ana@empresa.com",
"user_document": "0000000002",
"quiz_id": 20461,
"quiz_name": "Evaluación como clase 1",
"quiz_type": "summative",
"evaluation_type": "class",
"attempts_count": 2,
"first_attempt_at": "2026-03-10T19:30:00+00:00",
"last_attempt_at": "2026-03-10T19:34:15+00:00",
"best_attempt_at": "2026-03-10T19:34:15+00:00",
"correct_answers": 8,
"incorrect_answers": 1,
"total_questions": 9,
"passing_percentage": 80,
"score": 88.89,
"best_score": 88.89,
"status": "approved",
"duration_seconds": 60,
"time_limit_seconds": null
}
]
}