Unified HRIS API

Get timesheets

Retrieve attendance data and timesheets from HRIS tools.

For a detailed explanation of the data model, validation rules, time zones, payable hours, approvals, and break patterns, see the Time & Attendance guide.

<Note> By default, only the last 2 months of timesheets are kept up to date during sync (configurable via the "Historical timesheet months to sync" setting). Kombo only deletion-tracks timesheets inside that window — timesheets that age out are kept and are not marked as deleted just because they were not re-fetched. Within the window, timesheets that disappear from the remote HRIS are marked with `remote_deleted_at` as usual. See the [Time & Attendance guide](/hris/features/time-and-attendance) for details. </Note>

Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: (id IN ids) AND (remote_id IN remote_ids)

get/hris/timesheets

Request

Query parameters

cursorstring

An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response.

page_sizeinteger

The number of results to return per page. Maximum is 250.

updated_afterstring date-time

Filter the entries based on the modification date in format YYYY-MM-DDTHH:mm:ss.sssZ. Returns records where either the record itself OR its nested data has been updated since this timestamp, even if the record's own changed_at field remains unchanged.

If you want to track entry deletion, also set the include_deleted=true query parameter, because otherwise, deleted entries will be hidden.

For more details, see Understanding changed_at vs updated_after Behavior.

For this endpoint, only changes to the returned record itself are considered.

include_deleted'true' | 'false'

By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too.

ignore_unsupported_filters'true' | 'false'

When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results.

idsstring

Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3.

remote_idsstring

Filter by a comma-separated list of remote IDs.

employee_idstring

Returns timesheets for a specific employee.

started_beforestring date-time

Return timesheets whose start time is before the given timestamp.

started_afterstring date-time

Return timesheets whose start time is on or after the given timestamp.

ended_beforestring date-time

Return timesheets whose end time is on or before the given timestamp.

ended_afterstring date-time

Return timesheets whose end time is on or after the given timestamp.

Headers

X-Integration-Idstring required

ID of the integration you want to interact with.

Response

GET /hris/timesheets Positive response

status'success' required

Example response

{
  "data": {
    "next": "eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=",
    "results": [
      {
        "id": "C1BB1C36-FE1D-4185-AAB8-0716D8FBA017",
        "remote_id": "446655440000",
        "employee_id": "289AD550-8659-4305-92B2-6EAA006AAB17",
        "started_at": "2025-04-16T09:02:00.000Z",
        "ended_at": "2025-04-16T16:59:00.000Z",
        "timezone": "-04:00",
        "payable_hours": 8,
        "unpaid_break_minutes": 30,
        "breaks": [
          {
            "ended_at": "2025-04-16T12:30:00.000Z",
            "paid": false,
            "started_at": "2025-04-16T12:00:00.000Z"
          }
        ],
        "approval_status": "APPROVED",
        "approved_at": "2025-04-16T17:05:31.000Z",
        "comment": "Sprint planning & code review",
        "custom_fields": {},
        "integration_fields": [],
        "changed_at": "2022-08-07T14:01:29.196Z",
        "remote_deleted_at": null,
        "remote_data": {}
      }
    ]
  }
}

Changes