Cambios en la API pública de Crehana.

Acá publicamos los cambios que afectan el contrato de la API: endpoints nuevos, deprecaciones, cambios de comportamiento y de formato de respuesta.

Los cambios internos que no alteran el contrato no se listan.

Las deprecaciones se anuncian acá antes de retirarse, y los endpoints deprecados quedan marcados en la API Reference con su reemplazo.

Recibí los cambios por correo

Te escribimos cuando cambia el contrato: endpoints nuevos, deprecaciones y cambios de comportamiento. Nada más que eso.

Las vistas viejas de la documentacion redirigen a este portal

GET /api/v5/rest/redocs y GET /api/v5/rest/docs ya no dibujan la referencia por su cuenta: ahora redirigen —con un 302— al API Reference de este portal.

Las dos URLs siguen funcionando, así que un enlace guardado no se rompe: te deja en el mismo contenido, con las guías al lado y con el explorador que ya trae el panel de autenticación.

documentation

course_enroll_date deja de estar documentado en el reporte general v2

GET /org/{slug}/reports/learning/general-v2/ ya no lista course_enroll_date entre sus parámetros. El filtro por fecha de inscripción se pide con from_date y to_date, igual que en los otros tres reportes de learning.

El reemplazo es from_date solo, sin to_date. Es la parte que se presta a confusión: course_enroll_date no tenía techo —devolvía todo desde esa fecha en adelante— así que poner la misma fecha en los dos extremos del rango no es equivalente, deja un solo día.

reportsorganizationsusersdeprecation

Los endpoints deprecados salen del portal

Ocho endpoints que ya estaban marcados como deprecados dejan de aparecer en esta documentación. Siguen respondiendo con normalidad: si tu integración los usa, no se rompe nada y no hay que hacer nada con urgencia.

Lo que cambia es que dejamos de ofrecerlos a quien recién empieza, para que nadie construya sobre un camino que ya está marcado para salir.

reportsorganizationsusersdeprecation

Eliminar una solicitud de tiempo libre

DELETE /org/{slug}/timeoff/requests/{request_id}/ elimina una solicitud de ausencia de la organización. La solicitud deja de aparecer en GET /org/{slug}/timeoff/requests/ y el tiempo que consumía vuelve al saldo del colaborador.

Con una credencial de administrador de la organización —así se crean las api-key— podés eliminar cualquier solicitud y en cualquier estado. Si la credencial corresponde a un colaborador, sólo puede eliminar las solicitudes propias y sólo mientras sigan pendientes; en el resto de los casos la respuesta es 403 Forbidden.

time-offreports

Los reportes de asistencia se pueden consultar por API

Los cuatro seguimientos del producto Asistencia —los mismos que hasta ahora solo se podían bajar en Excel desde el panel— ya están disponibles como endpoints paginados:

EndpointQué devuelveUna fila es
GET /org/{slug}/reports/attendance/shifts/Creación de turnosun turno configurado
GET /org/{slug}/reports/attendance/shifts-schedule/Programación de turnosuna asignación vigente de turno a un colaborador
GET /org/{slug}/reports/attendance/marks/Recepción de marcasuna marca individual
GET /org/{slug}/reports/attendance/daily-management/Gestión diaria de marcasun colaborador en un día
time-offreports

Los rechazos de autorización devuelven 401 y 403

En la sección de usuarios, cuando una operación se rechaza por credenciales o por permisos, la respuesta ahora trae el status HTTP que le corresponde en vez de uno genérico:

SituaciónStatus
Credenciales ausentes o inválidas401 Unauthorized
Credenciales válidas, sin permiso sobre el recurso403 Forbidden

Si tu integración distinguía estos casos leyendo el message de la respuesta, cambiá a leer el status HTTP o el campo code. Los dos son estables; el texto del mensaje no.

usersbreaking-change

Los custom fields de organizations quedan deprecados

La funcionalidad de campos personalizados se movió a su propia sección. Los dos endpoints que vivían bajo organizations quedan deprecados:

DeprecadoReemplazo
POST /org/{slug}/organizations/custom-fields/POST /org/{slug}/custom-fields/
PUT /org/{slug}/organizations/users/{id}/custom-fields/POST /org/{slug}/users/{id}/custom-fields/
organizationscustom-fieldsdeprecation

Se dejaron de emitir los headers internos de diagnóstico

Las respuestas ya no incluyen los headers que la capa proxy usaba para depurar (crehana-graphql-proxy-*, cache-graphql-*, crehana-rest-app-name, crehana-rest-api-version y variantes). Exponían detalle interno —nombre de operación, módulo y versión— que no forma parte del contrato.

El cuerpo de las respuestas no cambió. Si tu integración leía alguno de esos headers, va a encontrarlos ausentes.

breaking-change

Nueva sección: Time off

GET /org/{slug}/timeoff/requests/ lista las solicitudes de ausencia de la organización —vacaciones, licencias y permisos— paginadas y filtrables.

time-offlearning

Asignar un track a varios usuarios

POST /org/{slug}/learning/content/knowledge-hub/enrollments/v2/assign-track/ asigna un track a un conjunto de usuarios en una sola llamada, igual que el assign-course/ que ya existía.

time-offlearning

Asignaciones sin usuarios devuelven 422

Los dos endpoints de asignación (assign-course/ y assign-track/) ahora responden 422 Unprocessable Entity cuando la llamada no termina asignando a ningún usuario, en vez de devolver un 200 con la lista vacía.

time-offlearning

Forzar el cambio de contraseña en el próximo login

Los endpoints de cambio de contraseña aceptan un campo nuevo, force_change_password. Cuando va en true, al usuario se le va a exigir cambiar la contraseña la próxima vez que ingrese.

1{
2 "password": "...",
3 "force_change_password": true
4}

El campo es opcional y por defecto es false, así que las integraciones existentes no cambian de comportamiento.

users

Asignar un curso a varios usuarios

POST /org/{slug}/learning/content/knowledge-hub/enrollments/v2/assign-course/ asigna un curso a un conjunto de usuarios en una sola llamada, en lugar de una petición por usuario.

learning

Editar categorías de posición

PUT /org/{slug}/organizations/position-categories/{position_category_id}/ permite editar una categoría de posición existente. Antes solo se podían listar y crear.

organizations