Flow Unified API
API ReferenceRestaurant

Time entry · time_entry

Portable restaurant labor time-entry / punch-clock contract.

Entity type: time_entry · Methods: GET

Portable restaurant labor time-entry / punch-clock contract.

Endpoints

GET  /unified/{accountId}/time_entry  # List normalized time_entry records

Schema

FieldTypeRequiredDescription
externalIdstringYesStable time-entry identifier.
employeeExternalIdstringEmployee identifier.
jobExternalIdstringJob / role identifier.
shiftExternalIdstringParent shift identifier.
startAtstring · ISO 8601Punch-in time.
endAtstring · ISO 8601Punch-out time.
regularHoursnumberRegular hours worked.
overtimeHoursnumberOvertime hours worked.
statusstringSource time-entry status.

Example object

{
  "externalId": "te_43011",
  "employeeExternalId": "emp_2214",
  "jobExternalId": "job_line_cook",
  "shiftExternalId": "shf_88213",
  "startAt": "2026-07-08T15:00:00Z",
  "endAt": "2026-07-08T23:00:00Z",
  "regularHours": 8,
  "overtimeHours": 0,
  "status": "CLOSED"
}

The same shape is used as the POST request body and returned by GET reads — reads from every connected system are normalized to it.

Requests

pull time_entry
curl "https://api.linktoany.com/unified/{accountId}/time_entry?pageSize=10" \
  -H "accept: application/json" \
  -H "authorization: Bearer ak_<your_api_key>"
pull time_entry · SDK
const page = await client.records.list(accountId, 'time_entry', {
  pageSize: 10,
});

for (const timeEntry of page.data) {
  console.log(timeEntry);
}

// Or walk every page — the SDK follows the cursor for you
for await (const timeEntry of client.records.iterate(accountId, 'time_entry')) {
  await save(timeEntry);
}

Supported systems

SystemReadWriteAuthRate limit
ToastYesAPI token5 req / s

On this page