API reference
Time entries
10 endpoints. Click one to see its parameters, fields and an example. Code samples use the region you pick.
GET/v1/time-entriesList time entries
List time entries
Query parameters
| Name | Type | Description |
|---|---|---|
user_id | string | |
location_id | string | |
from | string (date-time) | |
to | string (date-time) | |
status | "open" | "closed" | "flagged" | "approved" | "locked" | |
open | boolean | |
limit | integer | Default 100 |
cursor | string | |
project_id | string | Only entries on this project ("none" for entries without one) |
activity_id | string | Only entries for this activity ("none" for entries without one) |
expand | string | Comma-separated: punches, exceptions, location, user. Adds those records to each entry. |
Example
curl "https://ca-api.clocklap.com/v1/time-entries" \
-H "Authorization: Bearer $CLOCKLAP_API_KEY"Responses
200
POST/v1/time-entriesAdd an entry for someone (admin)
Add an entry for someone (admin)
Body (JSON)
| Name | Type | Description |
|---|---|---|
user_idrequired | string | |
location_idrequired | string | |
clock_in_atrequired | string (date-time) | |
clock_out_at | string (date-time) or null | |
note | string | |
reasonrequired | string | |
project_id | string or null | |
activity_id | string or null | |
billable | boolean or null |
Example
curl -X POST "https://ca-api.clocklap.com/v1/time-entries" \
-H "Authorization: Bearer $CLOCKLAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"user_id":"use_01J…","location_id":"loc_01J…","clock_in_at":"2026-10-26T13:00:00Z","clock_out_at":"2026-10-26T13:00:00Z","reason":"string"}'Responses
200
GET/v1/time-entries/{id}Entry with raw punches, map evidence, exceptions and edit history
Entry with raw punches, map evidence, exceptions and edit history
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | string |
Example
curl "https://ca-api.clocklap.com/v1/time-entries/{id}" \
-H "Authorization: Bearer $CLOCKLAP_API_KEY"Responses
200
PATCH/v1/time-entries/{id}Edit times, location, project, activity or billable (reason required, audited)
Edit times, location, project, activity or billable (reason required, audited)
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | string |
Body (JSON)
| Name | Type | Description |
|---|---|---|
clock_in_at | string (date-time) | |
clock_out_at | string (date-time) or null | |
location_id | string | |
note | string or null | |
project_id | string or null | |
activity_id | string or null | |
billable | boolean or null | |
reasonrequired | string |
Example
curl -X PATCH "https://ca-api.clocklap.com/v1/time-entries/{id}" \
-H "Authorization: Bearer $CLOCKLAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"reason":"string"}'Responses
200
DELETE/v1/time-entries/{id}Delete one time entry
Delete one time entry
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | string |
Body (JSON)
| Name | Type | Description |
|---|---|---|
reasonrequired | string |
Example
curl -X DELETE "https://ca-api.clocklap.com/v1/time-entries/{id}" \
-H "Authorization: Bearer $CLOCKLAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"reason":"string"}'Responses
200
POST/v1/time-entries/{id}/attestationAnswer the clock-out questions for a closed shift
Answer the clock-out questions for a closed shift
For phones that clocked out offline or without the questions, kiosks (within 30 minutes of a clock-out made there) and managers recording a paper answer. You can also send attestation with the clock-out punch itself. A "No" raises an attestation_flag exception. Sending the same answers again is a no-op; different answers are refused (409 already_answered).
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | string |
Body (JSON)
| Name | Type | Description |
|---|---|---|
answersrequired | array of object | |
answers[].idrequired | string | |
answers[].answerrequired | "yes" | "no" | |
note | string |
Example
curl -X POST "https://ca-api.clocklap.com/v1/time-entries/{id}/attestation" \
-H "Authorization: Bearer $CLOCKLAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"answers":[{"id":"id_01J…","answer":"yes"}],"note":"string"}'Responses
200
POST/v1/time-entries/approveCreate a approve
Create a approve
Body (JSON)
| Name | Type | Description |
|---|---|---|
idsrequired | array of string |
Example
curl -X POST "https://ca-api.clocklap.com/v1/time-entries/approve" \
-H "Authorization: Bearer $CLOCKLAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ids":["string"]}'Responses
200
POST/v1/time-entries/current/switchSwitch project/activity while on shift
Switch project/activity while on shift
Ends your open entry at at (default now) and starts a new one at the same instant and location on the new project/activity; a break in progress ends first. Returns { closed, opened, undo_punch_id }. Within a minute of clocking in it just relabels the open entry (closed is null); choosing what you already have changes nothing.
Body (JSON)
| Name | Type | Description |
|---|---|---|
project_id | string or null | |
activity_id | string or null | |
note | string | |
at | string (date-time) | |
device_now | string (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/time-entries/current/switch" \
-H "Authorization: Bearer $CLOCKLAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Responses
200