Skip to navigation

Create Attendance Mark

Records one attendance mark of a person — entry, break start, break end or exit — with the real time it happened. Built for biometric clocks and access-control systems that send each mark as it occurs, or later in a batch. Step-by-step guide: Send attendance marks.

The mark goes through the same rules as a mark made in Crehana: it is assigned to the person’s shift for that day, classified for punctuality and included in the daily attendance.

  • marked_at is the real time of the mark, with UTC offset. Marks sent hours later keep their original time.
  • timezone is the IANA zone where the person marked. It decides the local day of the mark: 23:30 on the 6th in Mexico City is the 6th, not the 7th in UTC. See the time zones guide.
  • Sending the same mark again (same person, type and minute) does not duplicate it: the answer is 200 with already_registered: true. Retrying after a timeout is safe.
  • A different time for a type the shift already has (a second ENTRY) is a 409.
  • A mark out of order (an EXIT with no open ENTRY, a break the shift does not have, two marks in the same minute) is a 400, with the rule in the message.
  • The person must be set up in Attendance in the organization, otherwise 404.
  • Requires credentials of an administrator of the organization.

Authentication

Api-Keystring

API key of the organization. Always sent together with the Secret-Access header.

Path parameters

organization_slugstringRequired

Headers

Secret-AccessstringRequired

Request

This endpoint expects an object.
user_idintegerRequired

Centralized id of the person who marked: user.id in GET /org/{organization_slug}/users/user-organizations/. Not the learning user id. The person must be set up in Attendance in the organization.

mark_typeenumRequired

ENTRY starts the workday, BREAK_START / BREAK_END wrap a break, EXIT ends it. A day goes ENTRY → BREAK_START → BREAK_END → EXIT.

Allowed values:
marked_atdatetimeRequired

Real date and time of the mark in ISO 8601 with UTC offset (2026-10-07T08:58:00-06:00) or in UTC with Z (2026-10-07T14:58:00Z). A value without offset is rejected. It cannot be in the future; seconds are ignored.

timezonestringRequired

IANA time zone of the place where the person marked, with its exact upper/lower case (America/Mexico_City, America/Lima). It decides the local day of the mark and the shift it is compared with. Offsets (-06:00) and abbreviations (CST) are not time zones.

Response

The same mark had already been sent; nothing new

successboolean
True when the mark is stored.
messagestring
Human readable result.
codestring

attendance-001 when the mark was created, attendance-002 when it already existed. Not an HTTP status.

datetimestring
Datetime of the API in ISO Format
dataobject

Errors

400
Bad Request Error
401
Unauthorized Error
403
Forbidden Error
404
Not Found Error
409
Conflict Error
422
Unprocessable Entity Error