Enviar marcajes de asistencia
Cómo mandar las entradas, descansos y salidas de tu reloj biométrico o de tu sistema de control de acceso.
Si tu organización usa Asistencia en Crehana, cada marca que registra un reloj biométrico o tu propio sistema de acceso se puede enviar por API. Una vez recibida, la marca se procesa igual que una hecha desde la app: se asigna al turno del día de la persona, se clasifica por puntualidad y entra en la gestión diaria.
La referencia completa está en Create Attendance Mark.
Antes de empezar
- Credenciales de administrador. Las credenciales de la API tienen que ser
de una cuenta ADMIN de la organización. Con otras, la respuesta es
403. - Las personas tienen que estar dadas de alta en Asistencia. Si alguien no
tiene su configuración de marcaje en la organización, su marca se rechaza
con
404. Se da de alta desde Crehana, en Asistencia. - El id de cada persona.
user_ides el id centralizado: eluser.iddeGET /org/{organization_slug}/users/user-organizations/. No es el id de learning (learning_user_id). Conviene guardarlo en tu sistema junto al legajo o al id que usa el reloj.
Una marca, de punta a punta
Respuesta 201:
marked_at vuelve en UTC: es el mismo instante que mandaste. mark_date es el
día local, calculado en timezone.
Los cuatro campos
Los cuatro son obligatorios y no se aceptan campos de más.
mark_type
Un día normal va en este orden:
Si tu reloj no distingue el tipo de marca, tu integración tiene que decidirlo
antes de enviar (por ejemplo, la primera del día es ENTRY y la siguiente
EXIT). La API no lo adivina.
Si quedó abierta una jornada anterior (una ENTRY sin EXIT), la siguiente
ENTRY la cierra con una salida de sistema y recalcula ese día.
marked_at
- Es la hora en que la persona marcó, no la hora en que la enviás. Si el reloj estuvo sin conexión y manda las marcas horas después, cada una conserva su hora original.
- Tiene que llevar desfase (
-06:00) oZ. Sin desfase la hora es ambigua y se rechaza:- ✅
2026-10-07T08:58:00-06:00 - ✅
2026-10-07T14:58:00Z, el mismo instante en UTC - ❌
2026-10-07T08:58:00 - ❌
2026-10-07 08:58,07/10/2026 08:58o un timestamp numérico
- ✅
- No puede estar en el futuro. Se toleran dos minutos por diferencias de reloj del dispositivo.
- Se evalúa al minuto: los segundos no cuentan.
timezone
La zona IANA de la sede o del dispositivo, por ejemplo America/Lima. Decide a
qué día pertenece la marca y contra qué horario se compara la puntualidad. Lo
que sirve y lo que no, y la lista por país, están en
Zonas horarias.
Una zona equivocada no da error: deja la marca en otro día o la clasifica mal.
Una salida a las 23:30 del 6 en Ciudad de México enviada con "UTC" queda en
el día 7.
Reintentos: mandar dos veces es seguro
Si se corta la conexión y no sabés si la marca llegó, reenviala igual. Si ya
existe una marca del mismo tipo, misma persona y mismo minuto, la respuesta
es 200 con already_registered: true y los datos de la marca guardada. No se
crea un duplicado.
Evitá reenviar en paralelo: si dos copias llegan exactamente a la vez, una se
guarda y la otra responde 409 (INTEGRITY_ERROR).
Es distinto de mandar otra hora para un tipo que el turno ya tiene: una
segunda ENTRY a las 09:15 cuando ya hay una a las 08:58 es un 409. Esa hora
no se corrige por la API: se ajusta desde la edición de la jornada en el panel
de Crehana.
Respuestas
Los 400, 403, 404 y 409 traen el motivo en detail:
Los textos de errors son para un log o para una persona: programá contra el
status y, si hace falta, contra detail.code. Más en
Errores.
Enviar varias marcas
El endpoint recibe una marca por llamada. Para un lote (por ejemplo, lo que
juntó un reloj sin conexión), mandalas en orden cronológico por persona: la
EXIT antes que la ENTRY del día siguiente. Fuera de orden, una EXIT puede
llegar antes que su ENTRY y rechazarse con NO_ACTIVE_ENTRY.
Lista de verificación
- Las credenciales son de un ADMIN de la organización.
- Cada persona está dada de alta en Asistencia y tenés su
user_idcentralizado. -
marked_ates la hora real de la marca y lleva desfase oZ. -
timezonees la zona IANA de la sede, con mayúsculas exactas. - Los lotes van en orden cronológico por persona.
- Los
500y los cortes de red se reintentan. Los4xxse registran y no se reintentan.
