Skip to content

List Timesheets

Auth required
GET/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_since alone filters by timesheets.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