Skip to content
ClockLap Developers
API reference clocklap.com Get an API key

API reference

Punches

2 endpoints. Click one to see its parameters, fields and an example. Code samples use the region you pick.

POST/v1/punchesClock in / out / break. Idempotent on local_id.

Clock in / out / break. Idempotent on local_id.

Used by the app (geofence + manual), kiosks, admins and integrations. Rejected punches are recorded as evidence and return 422 with the reason.

Body (JSON)

NameTypeDescription
typerequired"in" | "out" | "break_start" | "break_end"
atrequiredstring (date-time)
sourcerequired"geofence" | "manual" | "kiosk" | "admin" | "api"
user_idstring
location_idstring
geofence_idstring
latnumber
lngnumber
accuracy_mnumber
mockedboolean
low_confidenceboolean
local_idrequiredstring
device_idstring
notestring
photo_asset_idstring
reasonstring
project_idstring or null
activity_idstring or null
attestationobject
attestation.answersrequiredarray of object
attestation.notestring
device_nowstring (date-time)The device's current time when sending. When it differs from the server's by more than 2 minutes, punch times are corrected by that difference (and flagged for review beyond 10 minutes).

Example

curl -X POST "https://ca-api.clocklap.com/v1/punches" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"in","at":"2026-10-26T13:00:00Z","source":"geofence","local_id":"loc_01J…"}'

Responses

200

POST/v1/punches/batchUpload queued offline punches in order. Each is applied independently.

Upload queued offline punches in order. Each is applied independently.

Body (JSON)

NameTypeDescription
punchesrequiredarray of object
punches[].typerequired"in" | "out" | "break_start" | "break_end"
punches[].atrequiredstring (date-time)
punches[].sourcerequired"geofence" | "manual" | "kiosk" | "admin" | "api"
punches[].user_idstring
punches[].location_idstring
punches[].geofence_idstring
punches[].latnumber
punches[].lngnumber
punches[].accuracy_mnumber
punches[].mockedboolean
punches[].low_confidenceboolean
punches[].local_idrequiredstring
punches[].device_idstring
punches[].notestring
punches[].photo_asset_idstring
punches[].reasonstring
punches[].project_idstring or null
punches[].activity_idstring or null
punches[].attestationobject
device_nowstring (date-time)The device's current time when sending. When it differs from the server's by more than 2 minutes, punch times are corrected by that difference (and flagged for review beyond 10 minutes).

Example

curl -X POST "https://ca-api.clocklap.com/v1/punches/batch" \
  -H "Authorization: Bearer $CLOCKLAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"punches":[{"type":"in","at":"2026-10-26T13:00:00Z","source":"geofence","local_id":"loc_01J…"}],"device_now":"2026-10-26T13:00:00Z"}'

Responses

200