timesheetreads only
Read a timesheet
One person's timesheet days over a date range: status, hours per project or cost center, overtime claimed, remarks, and whether the day is draft, submitted, approved or locked for payroll. Leave employeePublicId out for the signed-in person's own.
Someone asks: “Show me Juan's timesheet for the first cutoff of October.”
Input
{
"employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
"from": "2026-10-01",
"to": "2026-10-15"
}
What comes back
Dela Cruz, Juan (EMP-001), 2026-10-01 to 2026-10-15: 3 days, 24.00h
2026-10-13 · Present · Acme Steel - Bridge retrofit 8.00h · approved
2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h (+2.00 OT) · submitted · from the time clock
2026-10-15 · Present · Administration 8.00h · yard day · draft
Structured content
Show the structured answer
{
"employee": {
"employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
"name": "Dela Cruz, Juan",
"employeeNumber": "EMP-001"
},
"days": [
{
"publicId": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f",
"date": "2026-10-14",
"dayStatus": "present",
"dayStatusLabel": "Present",
"status": "submitted",
"source": "punches",
"totalHours": "8.00",
"totalOvertimeHours": "2.00",
"remarks": null,
"allocations": [
{
"projectPublicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
"costCenterPublicId": null,
"label": "Acme Steel - Bridge retrofit",
"hours": "8.00",
"overtimeHours": "2.00"
}
]
}
]
}
plan_time_entriesreads only
Plan time entries
Step one of logging time for people. Resolves every employee, date and project or cost center, says which days already exist and would be replaced, and returns a planId. Show the plan to the person; call commit_time_entries with the planId only after they agree. One entry is one line of a day; several entries on the same employee and date become one day with several lines. A day that already exists is replaced whole by the lines given here.
Someone asks: “Log 8 hours on the bridge for Juan and Maria yesterday, Juan did 1 hour overtime.”
Input
{
"entries": [
{
"employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
"date": "2026-10-14",
"projectPublicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
"hours": 8,
"overtimeHours": 1
},
{
"employeePublicId": "7a8b9c0d-1e2f-4a3b-8c4d-5e6f7a8b9c0d",
"date": "2026-10-14",
"projectPublicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
"hours": 8
}
]
}
What comes back
Plan kQ3x9Lm2pA: 2 days for 2 people, 1 replacing a day already encoded.
Dela Cruz, Juan (EMP-001) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h (+1.00 OT) — replaces the Present day already there (8.00h, from the time clock)
Santos, Maria (EMP-007) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h
Show this to the person. If they agree, call commit_time_entries with planId "kQ3x9Lm2pA".
Structured content
Show the structured answer
{
"planId": "kQ3x9Lm2pA",
"days": [
"Dela Cruz, Juan (EMP-001) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h (+1.00 OT) — replaces the Present day already there",
"Santos, Maria (EMP-007) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h"
],
"replacing": 1
}
commit_time_entrieschanges data
Commit time entries
Step two: writes the days exactly as plan_time_entries showed them. Takes the planId from that plan. A plan can be committed once and expires after fifteen minutes.
Someone asks: “Yes, go ahead.”
Input
{
"planId": "kQ3x9Lm2pA"
}
What comes back
2 days saved.
saved · Dela Cruz, Juan (EMP-001) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h (+1.00 OT) — replaces the Present day already there (8.00h, from the time clock)
saved · Santos, Maria (EMP-007) · 2026-10-14 · Present · Acme Steel - Bridge retrofit 8.00h
Structured content
Show the structured answer
{
"saved": 2,
"refused": []
}
attendancereads only
Attendance
Who worked which day over a range, with hours, overtime claimed and approved, the day's status and any leave on it. Narrow by people, project or cost center. Totals come back with the rows.
Someone asks: “Who worked on the bridge last week?”
Input
{
"from": "2026-10-06",
"to": "2026-10-10",
"projectPublicId": "0c9d8e7f-6a5b-4c3d-9e2f-1a0b9c8d7e6f",
"limit": 3
}
What comes back
Attendance 2026-10-06 to 2026-10-10: 3 days.
2026-10-06 · Dela Cruz, Juan (EMP-001) · Present · 8.00h · ALPHA
2026-10-07 · Dela Cruz, Juan (EMP-001) · Present · 8.00h (+2.00 OT, 2.00 approved) · ALPHA
2026-10-07 · Santos, Maria (EMP-007) · Present · 4.00h · ALPHA · on leave: Vacation leave
Structured content
Show the structured answer
{
"rows": [
{
"recordDate": "2026-10-06",
"employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
"employeeName": "Dela Cruz, Juan",
"employeeNumber": "EMP-001",
"dayStatusLabel": "Present",
"totalHours": "8.00",
"overtimeHours": "0.00",
"approvedOvertimeHours": "0.00",
"targetsLabel": "ALPHA"
}
],
"summary": {
"days": 3,
"people": 1,
"totalHours": "24.00",
"overtimeHours": "2.00",
"approvedOvertimeHours": "2.00"
},
"totalRows": 3
}
unfiled_overtimereads only
Overtime claimed but not filed
Overtime hours sitting on timesheets with no overtime request covering them, so nobody has approved them and payroll will not pay them. One row per person, day and job.
Someone asks: “Is there overtime nobody has filed a request for?”
Input
{
"from": "2026-10-01",
"to": "2026-10-15"
}
What comes back
1 row of overtime with no request:
2026-10-14 · Dela Cruz, Juan (EMP-001) · Acme Steel - Bridge retrofit · claimed 2.00h, filed 0.00h, unfiled 2.00h
Structured content
Show the structured answer
{
"rows": [
{
"employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
"employeeName": "Dela Cruz, Juan",
"employeeNumber": "EMP-001",
"recordDate": "2026-10-14",
"targetLabel": "Acme Steel - Bridge retrofit",
"claimedHours": "2.00",
"requestedHours": "0.00",
"unfiledHours": "2.00",
"isLocked": false
}
]
}
timesheet_gapsreads only
Timesheet completeness
How much of a pay period is encoded: who has days missing, so the period can be closed. Name the period, or any date inside it.
Someone asks: “Is the current cutoff fully encoded?”
Input
{
"payPeriodPublicIds": [
"6f7a8b9c-0d1e-4f2a-8b3c-4d5e6f7a8b9c"
]
}
What comes back
2026-10-01 → 2026-10-15 (Semi-monthly) · encoded up to 2026-10-13 · 198 person(s) on the roster
Structured content
Show the structured answer
{
"periods": [
{
"payPeriodPublicId": "6f7a8b9c-0d1e-4f2a-8b3c-4d5e6f7a8b9c",
"scheduleName": "Semi-monthly",
"startDate": "2026-10-01",
"endDate": "2026-10-15",
"throughDate": "2026-10-13",
"hasStarted": true,
"people": 198
}
]
}
clock_daysreads only
Time clock days
Days built from people's own clock-in and clock-out punches: first in, last out, hours worked and on break, whether the day is still open, how it was verified, and whether a timekeeper has approved it. `flaggedOnly` narrows to days the suite has flagged for review.
Someone asks: “Show me the clock days waiting for approval.”
Input
{
"from": "2026-10-13",
"to": "2026-10-15",
"status": "pending"
}
What comes back
1 of 1 clock day:
2026-10-14 · Dela Cruz, Juan (EMP-001) · 07:58 to 17:04 · worked 8.10h, break 1.00h · pending · passkey, selfie
Structured content
Show the structured answer
{
"days": [
{
"employeePublicId": "5f1c2a9e-3b7d-4c21-9e4a-1d2f3c4b5a60",
"employeeName": "Dela Cruz, Juan",
"recordDate": "2026-10-14",
"firstIn": "07:58",
"lastOut": "17:04",
"workedHours": 8.1,
"breakHours": 1,
"approval": {
"status": "pending"
},
"verifications": [
"passkey",
"selfie"
],
"flags": []
}
],
"total": 1
}
my_clockreads only
My clock
Whether the signed-in person may clock in or out right now, which it would be, and the company's current time and date. Clocking itself is done in the app, which can read the device's location.
Takes no input.
Someone asks: “Can I clock out yet?”
Input
{}
What comes back
2026-10-15 17:12 (Asia/Manila).
You may clock: the next punch would be out.
Clocking in or out is done in the suite itself, which checks where you are.
Structured content
Show the structured answer
{
"clock": {
"canClock": true,
"unavailableReason": null,
"today": "2026-10-15",
"localTime": "17:12",
"timeZone": "Asia/Manila",
"nextKind": "out",
"anyLocation": false
}
}