Saltar al contenido
MiJornada

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: .