Operations
Working days and clock events
Each day's figures and the raw record.
List working days
GET /v1/workdays
One row per person and day, with approved corrections already applied.
These are the figures shown in MiJornada and in the inspection report,
so this is the endpoint to use for payroll. Requires the time:read
scope.
Parameters
from required | string (date) | First day, in the company's time zone. |
to required | string (date) | Last day, included. At most 93 days after from, or a year for absences. |
employeeId optional | string | |
include optional | timeline | Pass timeline to add the day's movements. |
limit optional | integer | |
cursor optional | string | The nextCursor of the previous page. |
Response 200
Each item in data:
id | string | |
employeeId | string | |
employeeName | string | |
employeeCode | string | null | |
dayKey | string (date) | |
workedMinutes | integer | Minutes that count as worked, including paid breaks. |
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 | True when an approved correction applies to this day. |
timeline | object[] | Only with include=timeline. |
Possible errors: 401, 403, 422, 429.
Example
curl "https://api.mijornada.app/v1/workdays?from=2026-10-01&to=2026-10-31" \
-H "Authorization: Bearer mj_live_…" Example response
{
"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
} List clock events
GET /v1/time-events
The raw record of clock events, oldest first. Approved corrections do
not change these rows: use /workdays for the figures in force.
A clock event appears here about 90 seconds after it is made, once it
can no longer be undone. Requires the time:read scope.
Parameters
from required | string (date) | First day, in the company's time zone. |
to required | string (date) | Last day, included. At most 93 days after from, or a year for absences. |
employeeId optional | string | |
source optional | MOBILE | KIOSK | ADMIN | IMPORT | SYSTEM | |
limit optional | integer | |
cursor optional | string | The nextCursor of the previous page. |
Response 200
Each item in 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) | When it happened. An offline clock event keeps its original time. |
receivedAt | string (date-time) | null | When the server received it. Empty for events older than this field. |
dayKey | string (date) | |
worksiteId | string | null | |
autoClosed | boolean | True when MiJornada closed a forgotten shift. |
Possible errors: 401, 403, 422, 429.
Example
curl "https://api.mijornada.app/v1/time-events?from=2026-10-01&to=2026-10-31" \
-H "Authorization: Bearer mj_live_…" Example response
{
"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
} Last updated: .