Operaciones
Jornadas y fichajes
Las cifras de cada día y el registro en bruto.
Listar jornadas
GET /v1/workdays
Una fila por persona y día, con las correcciones aprobadas ya aplicadas. Son las cifras que enseñan MiJornada y el informe de Inspección, así que es lo que hay que usar para la nómina. Pide el permiso time:read.
Parámetros
from obligatorio | string (date) | Primer día, en la zona horaria de la empresa. |
to obligatorio | string (date) | Último día, incluido. Como mucho 93 días después de from, o un año en las ausencias. |
employeeId opcional | string | |
include opcional | timeline | Pasa timeline para añadir los movimientos del día. |
limit opcional | integer | |
cursor opcional | string | El nextCursor de la página anterior. |
Respuesta 200
Cada elemento de data:
id | string | |
employeeId | string | |
employeeName | string | |
employeeCode | string | null | |
dayKey | string (date) | |
workedMinutes | integer | Minutos que cuentan como trabajados, pausas pagadas incluidas. |
breakMinutes | integer | |
paidBreakMinutes | integer | |
breakOverAllowanceMinutes | integer | |
firstInAt | string (date-time) | null | |
lastOutAt | string (date-time) | null | |
lastAction | NONE | IN | BREAK_START | BREAK_END | OUT | |
state | string | |
corrected | boolean | Verdadero si se aplica una corrección aprobada a ese día. |
timeline | object[] | Solo con include=timeline. |
Errores posibles: 401, 403, 422, 429.
Ejemplo
curl "https://api.mijornada.app/v1/workdays?from=2026-10-01&to=2026-10-31" \
-H "Authorization: Bearer mj_live_…" Respuesta de ejemplo
{
"data": [
{
"id": "abc123",
"employeeId": "abc123",
"employeeName": "Ana García López",
"employeeCode": "E014",
"dayKey": "2026-10-15",
"workedMinutes": 480,
"breakMinutes": 30,
"paidBreakMinutes": 0,
"breakOverAllowanceMinutes": 0,
"firstInAt": "2026-10-15T07:02:11Z",
"lastOutAt": "2026-10-15T07:02:11Z",
"lastAction": "OUT",
"state": "FINISHED",
"corrected": false,
"timeline": [
{
"action": "IN",
"at": "2026-10-15T07:02:11Z",
"origin": "PUNCH"
}
]
}
],
"nextCursor": null
} Listar fichajes
GET /v1/time-events
El registro en bruto, del más antiguo al más nuevo. Las correcciones aprobadas no cambian estas filas: las cifras vigentes están en /workdays. Un fichaje aparece aquí unos 90 segundos después de hacerse, cuando ya no se puede deshacer. Pide el permiso time:read.
Parámetros
from obligatorio | string (date) | Primer día, en la zona horaria de la empresa. |
to obligatorio | string (date) | Último día, incluido. Como mucho 93 días después de from, o un año en las ausencias. |
employeeId opcional | string | |
source opcional | MOBILE | KIOSK | ADMIN | IMPORT | SYSTEM | |
limit opcional | integer | |
cursor opcional | string | El nextCursor de la página anterior. |
Respuesta 200
Cada elemento de data:
id | string | |
employeeId | string | |
employeeName | string | |
employeeCode | string | null | |
action | IN | BREAK_START | BREAK_END | OUT | |
source | string | |
clockingMethod | string | null | |
occurredAt | string (date-time) | Cuándo ocurrió. Un fichaje offline conserva su hora original. |
receivedAt | string (date-time) | null | Cuándo lo recibió el servidor. Vacío en los fichajes anteriores a este campo. |
dayKey | string (date) | |
worksiteId | string | null | |
autoClosed | boolean | Verdadero si MiJornada cerró una jornada olvidada. |
Errores posibles: 401, 403, 422, 429.
Ejemplo
curl "https://api.mijornada.app/v1/time-events?from=2026-10-01&to=2026-10-31" \
-H "Authorization: Bearer mj_live_…" Respuesta de ejemplo
{
"data": [
{
"id": "abc123",
"employeeId": "abc123",
"employeeName": "Ana García López",
"employeeCode": "E014",
"action": "IN",
"source": "MOBILE",
"clockingMethod": "MOBILE",
"occurredAt": "2026-10-15T07:02:11Z",
"receivedAt": "2026-10-15T07:02:11Z",
"dayKey": "2026-10-15",
"worksiteId": "centro-1",
"autoClosed": false
}
],
"nextCursor": null
} Última actualización de esta página: .