List Timesheets
/v1/timesheet_idle_times/Returns timesheets with nested idle time segments, grouped by user.
Uses cursor pagination — do not send page. Pass pagination.next_cursor as cursor on subsequent calls. Default limit is 10 users per request (max 20).
Filter modes (provide at least one):
- Date range:
start_date+end_date(max 31-day span) filter by when work
overlapped the calendar window. Optional timezone overrides org timezone for day boundaries.
- Incremental:
updated_sincealone filters bytimesheets.updated_at >=
watermark (no work-overlap window).
- Combined: date range plus
updated_since; watermark must fall within the
date window (inclusive, using request/org timezone).
Payload cap: at most 1,000 timesheets per response. When a single user exceeds 1,000 timesheets and is filtered by user_id, returns 400.
Unknown team_id returns 404 (team exists with no members → 200 empty). Exception: GET /v1/clockinouts/ returns 200 with empty results instead, since it builds its membership roster first.
Parameters
Choose how to filter: set both start_date and end_date, set updated_since on its own, or use both together.
Date range
Filter by when work happened. Set both start_date and end_date — you cannot send only one.
Filter start date (YYYY-MM-DD)
Filter end date (YYYY-MM-DD)
IANA timezone string; overrides organization timezone for day boundaries
Incremental sync
Filter by last change time. Set updated_since alone to poll for changes, or add it to a date range to narrow results further.
Return only timesheets whose updated_at is on or after this ISO 8601 UTC datetime. When used alone, filters by updated_at only (no work-overlap window). When combined with a date range, must fall within start_date/end_date (inclusive). Each timesheet includes updated_at for watermarking the next poll.
Other filters
Filter to a specific user (zero UUID treated as absent)
Filter to members of a specific team (zero UUID treated as absent). Returns 404 when the team does not exist in the organization, except on GET /v1/clockinouts/ (200 with empty results — clockinout builds its membership roster first, so "no members match" is a valid empty state rather than a lookup failure).
Filter to a specific project (zero UUID treated as absent)
Opaque continuation token from a prior response's pagination.next_cursor
Max users per request
