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 recordsSchema
| Field | Type | Required | Description |
|---|---|---|---|
externalId | string | Yes | Stable time-entry identifier. |
employeeExternalId | string | — | Employee identifier. |
jobExternalId | string | — | Job / role identifier. |
shiftExternalId | string | — | Parent shift identifier. |
startAt | string · ISO 8601 | — | Punch-in time. |
endAt | string · ISO 8601 | — | Punch-out time. |
regularHours | number | — | Regular hours worked. |
overtimeHours | number | — | Overtime hours worked. |
status | string | — | Source 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
curl "https://api.linktoany.com/unified/{accountId}/time_entry?pageSize=10" \
-H "accept: application/json" \
-H "authorization: Bearer ak_<your_api_key>"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
| System | Read | Write | Auth | Rate limit |
|---|---|---|---|---|
| Toast | Yes | — | API token | 5 req / s |