Skip to main content
Three separate reads answer three separate questions, and none of them joins to the others. The two that catch people out are leave, where an unfiltered read returns requests that were never taken, and balances, which are a snapshot rather than a live figure.

What you’ll use

Models - timesheet entry, time off, time off balance
Before you start
  • The connector has synced, and the customer’s time module is in scope. It is licensed separately from payroll on many platforms.

Steps

1

Read timesheet entries

Entries are bounded by time rather than date, and the filter pairs match that.Result: Time entries for the period you asked for.
2

Read leave requests, filtered by status

Filter on status for anything that acts on leave. Without it, declined and canceled requests arrive alongside approved ones, and treating the whole set as booked leave overstates absence.This endpoint has no date filters. Scope by employee, then filter the start_time and end_time you get back yourself.Result: Leave requests with their approval state.
3

Read remaining balances

Each record carries balance, used and policy_type. Read policy_type rather than assuming one balance per person.Result: Remaining leave per policy, as of the last sync.

Frequently Asked Questions

Time and attendance is a separately licensed module on many platforms, with its own permission grant, and an empty result is the usual failure here rather than an error. See Origin-system errors.
Balances are a point-in-time snapshot from the last sync, and accrual runs on the source system’s own schedule. A balance stale by one sync interval is expected - see How syncing works.
An unfiltered status is the usual cause. Declined and canceled requests are returned right alongside approved ones.
Expected rather than a bug. Entries can exist for a period whose run has not been processed, and approval workflows mean not every entry reaches pay. See Payroll.
Correct, and worth handling. The source system decides whether leave is counted in hours or days, and some platforms vary it by policy. Read units on each record rather than assuming one.
Some platforms record time as separate punch events rather than one interval, so a break splits a shift into more than one entry. Check raw_data for the original shape before adding them up - see Inspect raw data.