- get_employees - Get employees
- get_employee_form - Get employee form
- create_employee_with_form - Create employee with form
- add_employee_document - Add document to employee
- get_employee_document_categories - Get employee document categories
- get_groups - Get groups
- get_employments - Get employments
- get_locations - Get work locations
- get_absence_types - Get absence types
- get_time_off_balances - Get time off balances
- get_absences - Get absences
- create_absence - Create absence
- delete_absence - Delete absence
- get_legal_entities - Get legal entities
- get_timesheets - Get timesheets
- get_performance_review_cycles - Get performance review cycles
- get_performance_reviews - Get performance reviews
- get_staffing_entities - Get staffing entities
Retrieve all employees.
Not interested in most fields? You can use our our Scopes feature to customize what data points are synced.
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)
from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.get_employees(page_size=100, include_deleted=False, ignore_unsupported_filters=False)
while res is not None:
# Handle items
res = res.next()| Parameter | Type | Required | Description |
|---|---|---|---|
cursor |
Optional[str] | ➖ | An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response. |
page_size |
Optional[int] | ➖ | The number of results to return per page. Maximum is 250. |
updated_after |
date | ➖ | 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, updated_after matches when the returned record changed, or when related data changed as described below.| Path | Relationship | Target Record | | --- | --- | --- | | employments | ✓ Yes | ✓ Yes || time_off_balances | ✓ Yes | ✓ Yes || manager | n/a | ✓ Yes || group_memberships | ✓ Yes | ✗ No || legal_entity | n/a | ✓ Yes || work_location | n/a | ✓ Yes |Relationship: Whether adding or removing entries from this list triggers an update (n/a for single references that are not lists). Target Record: Whether changes to the linked record itself trigger an update. |
include_deleted |
Optional[bool] | ➖ | By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too. |
ignore_unsupported_filters |
Optional[bool] | ➖ | When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. |
ids |
List[str] | ➖ | Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3. |
remote_ids |
List[str] | ➖ | Filter by a comma-separated list of remote IDs. |
employment_statuses |
List[str] | ➖ | Filter by a comma-separated list of ACTIVE, PENDING, INACTIVE, LEAVE * ACTIVE: the employee is actively employed * PENDING: the employee is not actively employed yet (but they signed their contract or are part of an onboarding process) * INACTIVE: a full-time employee is no longer employed, or, for a contract worker when their contract runs out * LEAVE: the employee is still employed but currently on leave (note that not all HR systems support this status — use our absences API for detailed information) Leave this blank to get results matching all values. |
group_ids |
List[str] | ➖ | Filter by a comma-separated list of group IDs. We will only return employees that are members of any of the groups. |
legal_entity_ids |
List[str] | ➖ | Filter by a comma-separated list of legal entity IDs. We will only return employees that are members of any of the legal entities. |
work_location_ids |
List[str] | ➖ | Filter by a comma-separated list of work location IDs. We will only return employees who are at any of the work locations. |
work_emails |
List[str] | ➖ | Filter by a comma-separated list of work emails. We will only return employees who have any of the work emails. The format of the emails is case-insensitive. |
personal_emails |
List[str] | ➖ | Filter by a comma-separated list of personal emails. We will only return employees who have any of the personal emails. The format of the emails is case-insensitive. |
custom_fields |
Optional[str] | ➖ | A JSON string with a single key-value pair like {"fieldKey":"fieldValue"} to filter employees by a specific custom field value. Note that the value must be a string, number, boolean or null and the key must be a valid custom field key. Custom fields with a value of type array or object are not supported. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.GetHrisEmployeesResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Get the form for creating an employee. This form can be rendered dynamically on your frontend to allow your customers to create employees in their HRIS.
Follow our create employee guide here to learn how this form is generated and how you can use it.
{
"properties": {
"firstName": {
"type": "text",
"label": "First Name",
"required": true,
"description": "Employee's first name",
"unified_key": "first_name",
"min_length": 1,
"max_length": 100
},
"startDate": {
"type": "date",
"label": "Start Date",
"required": true,
"description": "Employee's start date",
"unified_key": "start_date"
},
"workLocation": {
"type": "object",
"label": "Work Location",
"required": false,
"description": "Employee's work location",
"unified_key": null,
"properties": {
"site": {
"type": "single_select",
"label": "Site",
"required": true,
"description": "Employee's site",
"unified_key": null,
"options": {
"type": "inline",
"entries": [
{
"label": "Site 1",
"id": "FXrER44xubBqA9DLgZ3PFNNx",
"unified_value": "1",
"remote_id": "site_1"
},
{
"label": "Site 2",
"id": "2rv75UKT2XBoQXsUb9agiTUm",
"unified_value": "2",
"remote_id": "site_2"
}
]
}
},
"keyNumbers": {
"type": "array",
"label": "Key Numbers",
"required": false,
"description": "Employee's key numbers",
"unified_key": null,
"min_items": 2,
"max_items": 5,
"item_type": {
"type": "number",
"label": "Key Number",
"required": false,
"description": "The number of the keys which belong to the employee",
"unified_key": null,
"min": 0,
"max": 99
}
}
}
}
}
}from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.get_employee_form()
# Handle response
print(res)| Parameter | Type | Required | Description |
|---|---|---|---|
request |
models.GetHrisEmployeesFormRequest | ✔️ | The request object to use for the request. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.GetHrisEmployeesFormPositiveResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Create an employee, based on the form schema.
This endpoint requires the permission **Create and manage employees** to be enabled in [your scope config](/scopes).{
"properties": {
"firstName": "John",
"startDate": "2025-01-01",
"workLocation": {
"site": "8e422bf8cav",
"keyNumbers": [
142,
525,
63
]
}
}
}from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.create_employee_with_form(properties={
"key": 3571.27,
})
# Handle response
print(res)from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.create_employee_with_form(properties={
"key": 3571.27,
})
# Handle response
print(res)from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.create_employee_with_form(properties={
"firstName": "John",
"startDate": "2025-01-01T00:00:00Z",
"workLocation": {
"site": "8e422bf8cav",
"keyNumbers": {
"0": 142,
"1": 525,
"2": 63,
},
},
})
# Handle response
print(res)| Parameter | Type | Required | Description |
|---|---|---|---|
properties |
Dict[str, models.Schema4] | ✔️ | N/A |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.PostHrisEmployeesFormPositiveResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Uploads an document file for the specified employee.
This endpoint requires the permission **Manage documents** to be enabled in [your scope config](/scopes).{
"category_id": "3Cjwu7nA7pH5cX5X1NAPmb7M",
"document": {
"name": "Frank Doe Employment Contract.txt",
"data": "SGkgdGhlcmUsIEtvbWJvIGlzIGN1cnJlbnRseSBoaXJpbmcgZW5naW5lZXJzIHRoYXQgbG92ZSB0byB3b3JrIG9uIGRldmVsb3BlciBwcm9kdWN0cy4=",
"content_type": "text/plain"
}
}from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.add_employee_document(employee_id="<id>", category_id="<id>", document={
"name": "<value>",
})
# Handle response
print(res)from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.add_employee_document(employee_id="<id>", category_id="<id>", document={
"name": "<value>",
})
# Handle response
print(res)from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.add_employee_document(employee_id="GRKdd9dibYKKCrmGRSMJf3wu", category_id="3Cjwu7nA7pH5cX5X1NAPmb7M", document={
"name": "Frank Doe Employment Contract.txt",
"content_type": "text/plain",
"data": "SGkgdGhlcmUsIEtvbWJvIGlzIGN1cnJlbnRseSBoaXJpbmcgZW5naW5lZXJzIHRoYXQgbG92ZSB0byB3b3JrIG9uIGRldmVsb3BlciBwcm9kdWN0cy4=",
})
# Handle response
print(res)| Parameter | Type | Required | Description |
|---|---|---|---|
employee_id |
str | ✔️ | POST /hris/employees/:employee_id/documents Parameter |
category_id |
str | ✔️ | N/A |
document |
models.Document | ✔️ | N/A |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.PostHrisEmployeesEmployeeIDDocumentsPositiveResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Get employee document categories.
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)
from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.get_employee_document_categories(page_size=100, include_deleted=False, ignore_unsupported_filters=False)
while res is not None:
# Handle items
res = res.next()| Parameter | Type | Required | Description |
|---|---|---|---|
cursor |
Optional[str] | ➖ | An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response. |
page_size |
Optional[int] | ➖ | The number of results to return per page. Maximum is 250. |
updated_after |
date | ➖ | 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 |
Optional[bool] | ➖ | By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too. |
ignore_unsupported_filters |
Optional[bool] | ➖ | When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. |
ids |
List[str] | ➖ | Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3. |
remote_ids |
List[str] | ➖ | Filter by a comma-separated list of remote IDs. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.GetHrisEmployeeDocumentCategoriesResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Retrieve all "groups" (teams, departments, and cost centers).
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)
from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.get_groups(page_size=100, include_deleted=False, ignore_unsupported_filters=False)
while res is not None:
# Handle items
res = res.next()| Parameter | Type | Required | Description |
|---|---|---|---|
cursor |
Optional[str] | ➖ | An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response. |
page_size |
Optional[int] | ➖ | The number of results to return per page. Maximum is 250. |
updated_after |
date | ➖ | 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 |
Optional[bool] | ➖ | By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too. |
ignore_unsupported_filters |
Optional[bool] | ➖ | When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. |
ids |
List[str] | ➖ | Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3. |
remote_ids |
List[str] | ➖ | Filter by a comma-separated list of remote IDs. |
types |
List[str] | ➖ | Filter by a comma-separated list of group types: DEPARTMENT, TEAM, COST_CENTER, or null to filter groups without a type. Leave this blank to get results matching all values. |
name_contains |
Optional[str] | ➖ | Filter by the name field. Can be used to find a group by keywords present in the group name. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Retrieve all employments.
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)
from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.get_employments(page_size=100, include_deleted=False, ignore_unsupported_filters=False)
while res is not None:
# Handle items
res = res.next()| Parameter | Type | Required | Description |
|---|---|---|---|
cursor |
Optional[str] | ➖ | An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response. |
page_size |
Optional[int] | ➖ | The number of results to return per page. Maximum is 250. |
updated_after |
date | ➖ | 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 |
Optional[bool] | ➖ | By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too. |
ignore_unsupported_filters |
Optional[bool] | ➖ | When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. |
ids |
List[str] | ➖ | Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3. |
remote_ids |
List[str] | ➖ | Filter by a comma-separated list of remote IDs. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.GetHrisEmploymentsResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Retrieve all work locations.
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)
from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.get_locations(page_size=100, include_deleted=False, ignore_unsupported_filters=False)
while res is not None:
# Handle items
res = res.next()| Parameter | Type | Required | Description |
|---|---|---|---|
cursor |
Optional[str] | ➖ | An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response. |
page_size |
Optional[int] | ➖ | The number of results to return per page. Maximum is 250. |
updated_after |
date | ➖ | 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 |
Optional[bool] | ➖ | By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too. |
ignore_unsupported_filters |
Optional[bool] | ➖ | When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. |
ids |
List[str] | ➖ | Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3. |
remote_ids |
List[str] | ➖ | Filter by a comma-separated list of remote IDs. |
name_contains |
Optional[str] | ➖ | Filter by the name field. Can be used to find a location by keywords present in the location name. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.GetHrisLocationsResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Retrieve all absence types.
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)
from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.get_absence_types(page_size=100, include_deleted=False, ignore_unsupported_filters=False)
while res is not None:
# Handle items
res = res.next()| Parameter | Type | Required | Description |
|---|---|---|---|
cursor |
Optional[str] | ➖ | An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response. |
page_size |
Optional[int] | ➖ | The number of results to return per page. Maximum is 250. |
updated_after |
date | ➖ | 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 |
Optional[bool] | ➖ | By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too. |
ignore_unsupported_filters |
Optional[bool] | ➖ | When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. |
ids |
List[str] | ➖ | Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3. |
remote_ids |
List[str] | ➖ | Filter by a comma-separated list of remote IDs. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.GetHrisAbsenceTypesResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Retrieve all time off balances.
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)
from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.get_time_off_balances(page_size=100, include_deleted=False, ignore_unsupported_filters=False)
while res is not None:
# Handle items
res = res.next()| Parameter | Type | Required | Description |
|---|---|---|---|
cursor |
Optional[str] | ➖ | An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response. |
page_size |
Optional[int] | ➖ | The number of results to return per page. Maximum is 250. |
updated_after |
date | ➖ | 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, updated_after matches when the returned record changed, or when related data changed as described below.| Path | Relationship | Target Record | | --- | --- | --- | | type | n/a | ✓ Yes |Relationship: Whether adding or removing entries from this list triggers an update (n/a for single references that are not lists). Target Record: Whether changes to the linked record itself trigger an update. |
include_deleted |
Optional[bool] | ➖ | By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too. |
ignore_unsupported_filters |
Optional[bool] | ➖ | When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. |
ids |
List[str] | ➖ | Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3. |
remote_ids |
List[str] | ➖ | Filter by a comma-separated list of remote IDs. |
employee_id |
Optional[str] | ➖ | Filter by a specific employee using their ID. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.GetHrisTimeOffBalancesResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Retrieve all absences.
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)
from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.get_absences(page_size=100, include_deleted=False, ignore_unsupported_filters=False)
while res is not None:
# Handle items
res = res.next()| Parameter | Type | Required | Description |
|---|---|---|---|
cursor |
Optional[str] | ➖ | An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response. |
page_size |
Optional[int] | ➖ | The number of results to return per page. Maximum is 250. |
updated_after |
date | ➖ | 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, updated_after matches when the returned record changed, or when related data changed as described below.| Path | Relationship | Target Record | | --- | --- | --- | | type | n/a | ✓ Yes |Relationship: Whether adding or removing entries from this list triggers an update (n/a for single references that are not lists). Target Record: Whether changes to the linked record itself trigger an update. |
include_deleted |
Optional[bool] | ➖ | By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too. |
ignore_unsupported_filters |
Optional[bool] | ➖ | When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. |
ids |
List[str] | ➖ | Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3. |
remote_ids |
List[str] | ➖ | Filter by a comma-separated list of remote IDs. |
date_from |
date | ➖ | Filter for all the absences that either start or haven't ended yet on/after this day. If you imagine a calendar displaying absences, this defines the left-most visible day. This is a plain date (i.e., yyyy-MM-dd), all time information is discarded. |
date_until |
date | ➖ | Filter for absences that start on or before this day (but might continue after). If you imagine a calendar displaying absences, this defines the right-most visible day. This is a plain date (i.e., yyyy-MM-dd), all time information is discarded. |
type_ids |
List[str] | ➖ | Filter by a comma-separated list of absence type IDs. |
employee_id |
Optional[str] | ➖ | Filter by a specific employee using their ID. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.GetHrisAbsencesResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Create a new absence.
Check this page for a detailed guide.
This endpoint requires the permission **Manage absences** to be enabled in [your scope config](/scopes).{
"employee_id": "wXJMxwDvPAjrJ4CyqdV9",
"absence_type_id": "3YKtQ7qedsrcCady1jSyAkY1",
"start_date": "2019-09-17",
"end_date": "2019-09-21",
"start_time": "08:30:00",
"end_time": "16:00:00",
"start_half_day": false,
"end_half_day": false,
"employee_note": "Visiting the aliens"
}from kombo import Kombo
from kombo.utils import parse_datetime
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.create_absence(employee_id="<id>", absence_type_id="<id>", start_date=parse_datetime("2023-09-09T17:57:22.170Z"), end_date=parse_datetime("2024-03-21T09:03:29.368Z"), employee_note="<value>", status="REQUESTED", start_half_day=False, end_half_day=False)
# Handle response
print(res)from kombo import Kombo
from kombo.utils import parse_datetime
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.create_absence(employee_id="<id>", absence_type_id="<id>", start_date=parse_datetime("2023-09-09T17:57:22.170Z"), end_date=parse_datetime("2024-03-21T09:03:29.368Z"), employee_note="<value>", status="REQUESTED", start_half_day=False, end_half_day=False)
# Handle response
print(res)from kombo import Kombo
from kombo.utils import parse_datetime
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.create_absence(employee_id="wXJMxwDvPAjrJ4CyqdV9", absence_type_id="3YKtQ7qedsrcCady1jSyAkY1", start_date=parse_datetime("2019-09-17T00:00:00Z"), end_date=parse_datetime("2019-09-21T00:00:00Z"), employee_note="Visiting the aliens", status="REQUESTED", start_half_day=False, end_half_day=False, start_time="08:30:00", end_time="16:00:00")
# Handle response
print(res)| Parameter | Type | Required | Description |
|---|---|---|---|
employee_id |
str | ✔️ | The ID of the employee in Kombo or their ID in the remote system by prefixing it with remote: (e.g., remote:12312) |
absence_type_id |
str | ✔️ | The ID of the absence type in Kombo (not its remote_id). |
start_date |
date | ✔️ | The date that the absence starts. This is a plain date (i.e., yyyy-MM-dd), with all time information discarded. |
end_date |
date | ✔️ | When the absence ends.The date that the absence ends. This is a plain date (i.e., yyyy-MM-dd), with all time information discarded. |
employee_note |
Nullable[str] | ✔️ | A note describing the reason for this absence. |
status |
Optional[models.PostHrisAbsencesRequestBodyStatus] | ➖ | The state that the absence should be created in. Some tools may approve absences automatically if they were created for an absence type that does not require approval. |
start_half_day |
Optional[bool] | ➖ | true if the absence should start in the middle of the day. |
end_half_day |
Optional[bool] | ➖ | true if the absence should end in the middle of the day. |
amount |
Optional[float] | ➖ | The amount of time of the absence. Specifying this also requires specifying unit. This is supported by very few tools. |
unit |
Optional[models.PostHrisAbsencesRequestBodyUnit] | ➖ | The time unit of the amount value. Specifying this also requires specifying amount. |
start_time |
Optional[str] | ➖ | The time of when the absence begins. Follows the format HH:mm or HH:mm:ss (e.g., 14:45:15). If start_time is specified, end_time has to be specified as well. |
end_time |
Optional[str] | ➖ | The time of when the absence ends. Follows the format HH:mm or HH:mm:ss (e.g., 14:45:15). If end_time is specified, start_time has to be specified as well. |
remote_fields |
Optional[models.PostHrisAbsencesRequestBodyRemoteFields] | ➖ | Additional fields that we will pass through to specific HRIS systems. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.PostHrisAbsencesPositiveResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Delete this absence.
This endpoint requires the permission **Manage absences** to be enabled in [your scope config](/scopes).{
"absence_id": "wXJMxwDvPAjrJ4CyqdV9"
}from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.delete_absence(absence_id="<id>")
# Handle response
print(res)from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.delete_absence(absence_id="<id>")
# Handle response
print(res)from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.delete_absence(absence_id="wXJMxwDvPAjrJ4CyqdV9")
# Handle response
print(res)| Parameter | Type | Required | Description |
|---|---|---|---|
absence_id |
str | ✔️ | The Kombo ID of the absence |
remote_fields |
Optional[models.DeleteHrisAbsencesAbsenceIDRequestBodyRemoteFields] | ➖ | Additional fields that we will pass through to specific HRIS systems. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.DeleteHrisAbsencesAbsenceIDPositiveResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Retrieve all legal entites.
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)
from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.get_legal_entities(page_size=100, include_deleted=False, ignore_unsupported_filters=False)
while res is not None:
# Handle items
res = res.next()| Parameter | Type | Required | Description |
|---|---|---|---|
cursor |
Optional[str] | ➖ | An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response. |
page_size |
Optional[int] | ➖ | The number of results to return per page. Maximum is 250. |
updated_after |
date | ➖ | 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 |
Optional[bool] | ➖ | By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too. |
ignore_unsupported_filters |
Optional[bool] | ➖ | When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. |
ids |
List[str] | ➖ | Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3. |
remote_ids |
List[str] | ➖ | Filter by a comma-separated list of remote IDs. |
name_contains |
Optional[str] | ➖ | Filter by the name field. Can be used to find a legal entity by keywords present in the legal entity name. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.GetHrisLegalEntitiesResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Get timesheets
Retrieve attendance data and timesheets from HRIS tools.
Open Beta Feature: This endpoint is currently in beta. Please reach out to our support team if you need assistance with implementation.
For a detailed explanation of the data model, validation rules, time zones, payable hours, approvals, and break patterns, see the Time & Attendance guide.
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)
from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.get_timesheets(page_size=100, include_deleted=False, ignore_unsupported_filters=False)
while res is not None:
# Handle items
res = res.next()| Parameter | Type | Required | Description |
|---|---|---|---|
cursor |
Optional[str] | ➖ | An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response. |
page_size |
Optional[int] | ➖ | The number of results to return per page. Maximum is 250. |
updated_after |
date | ➖ | 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 |
Optional[bool] | ➖ | By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too. |
ignore_unsupported_filters |
Optional[bool] | ➖ | When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. |
ids |
List[str] | ➖ | Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3. |
remote_ids |
List[str] | ➖ | Filter by a comma-separated list of remote IDs. |
employee_id |
Optional[str] | ➖ | Returns timesheets for a specific employee. |
started_before |
date | ➖ | Return timesheets whose start time is before the given timestamp. |
started_after |
date | ➖ | Return timesheets whose start time is on or after the given timestamp. |
ended_before |
date | ➖ | Return timesheets whose end time is on or before the given timestamp. |
ended_after |
date | ➖ | Return timesheets whose end time is on or after the given timestamp. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.GetHrisTimesheetsResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Get performance review cycles
Retrieve performance review cycles data from HRIS tools.
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)
from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.get_performance_review_cycles(page_size=100, include_deleted=False, ignore_unsupported_filters=False)
while res is not None:
# Handle items
res = res.next()| Parameter | Type | Required | Description |
|---|---|---|---|
cursor |
Optional[str] | ➖ | An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response. |
page_size |
Optional[int] | ➖ | The number of results to return per page. Maximum is 250. |
updated_after |
date | ➖ | 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 |
Optional[bool] | ➖ | By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too. |
ignore_unsupported_filters |
Optional[bool] | ➖ | When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. |
ids |
List[str] | ➖ | Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3. |
remote_ids |
List[str] | ➖ | Filter by a comma-separated list of remote IDs. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.GetHrisPerformanceReviewCyclesResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Get performance reviews
Retrieve performance review data from HRIS tools.
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)
from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.get_performance_reviews(page_size=100, include_deleted=False, ignore_unsupported_filters=False)
while res is not None:
# Handle items
res = res.next()| Parameter | Type | Required | Description |
|---|---|---|---|
cursor |
Optional[str] | ➖ | An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response. |
page_size |
Optional[int] | ➖ | The number of results to return per page. Maximum is 250. |
updated_after |
date | ➖ | 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, updated_after matches when the returned record changed, or when related data changed as described below.| Path | Relationship | Target Record | | --- | --- | --- | | review_cycle | n/a | ✓ Yes || reviewee | n/a | ✓ Yes || reviewer | n/a | ✓ Yes |Relationship: Whether adding or removing entries from this list triggers an update (n/a for single references that are not lists). Target Record: Whether changes to the linked record itself trigger an update. |
include_deleted |
Optional[bool] | ➖ | By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too. |
ignore_unsupported_filters |
Optional[bool] | ➖ | When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. |
ids |
List[str] | ➖ | Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3. |
remote_ids |
List[str] | ➖ | Filter by a comma-separated list of remote IDs. |
types |
List[str] | ➖ | Filter by a comma-separated list of MANAGER, DIRECT_REPORT, PEER, SELF Leave this blank to get results matching all values. |
review_cycle_ids |
List[str] | ➖ | Filter by a comma-separated list of review cycle IDs. |
reviewee_ids |
List[str] | ➖ | Filter by a comma-separated list of reviewee IDs. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.GetHrisPerformanceReviewsResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |
Retrieve all staffing entities.
Retrieve all staffing entities (positions, requisitions, and jobs) from the HRIS system.
Many enterprise HRIS platforms distinguish between positions, requisitions, and jobs — three related but different concepts used to manage headcount and hiring. Not every HRIS uses all three, and naming varies across systems, but here is a general overview:
- Position: A slot in the organizational structure that represents a role to be filled (or already filled) by one or more employees. Positions typically carry metadata like department, location, cost center, and reporting line. Think of it as "a chair at a desk" — it exists whether someone is sitting in it or not.
- Requisition: A formal request to fill a position. When a manager wants to hire for an open position, they usually create a requisition that goes through an approval workflow. Requisitions are time-bound and tied to a specific hiring need. In Kombo's data model, a requisition's
parent_idpoints to the position it was opened for. - Job: Some systems use "job" as a more generic or lightweight alternative to a requisition. Jobs often represent an ongoing, unlimited hiring need (e.g., a company that is always hiring for "Software Engineer") rather than a one-off backfill. This is reflected in the
OPEN_UNLIMITEDstatus.
You can use the model_types filter to retrieve only the type(s) relevant to your use case. Each record's model_type field tells you which of the three concepts it represents.
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)
from kombo import Kombo
with Kombo(
integration_id="workday:HWUTwvyx2wLoSUHphiWVrp28",
api_key="<YOUR_BEARER_TOKEN_HERE>",
) as k_client:
res = k_client.hris.get_staffing_entities(page_size=100, include_deleted=False, ignore_unsupported_filters=False)
while res is not None:
# Handle items
res = res.next()| Parameter | Type | Required | Description |
|---|---|---|---|
cursor |
Optional[str] | ➖ | An optional cursor string used for pagination. This can be retrieved from the next property of the previous page response. |
page_size |
Optional[int] | ➖ | The number of results to return per page. Maximum is 250. |
updated_after |
date | ➖ | 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, updated_after matches when the returned record changed, or when related data changed as described below.| Path | Relationship | Target Record | | --- | --- | --- | | locations | ✓ Yes | ✓ Yes || legal_entities | ✓ Yes | ✓ Yes || groups | ✓ Yes | ✓ Yes |Relationship: Whether adding or removing entries from this list triggers an update (n/a for single references that are not lists). Target Record: Whether changes to the linked record itself trigger an update. |
include_deleted |
Optional[bool] | ➖ | By default, deleted entries are not returned. Use the include_deleted query param to include deleted entries too. |
ignore_unsupported_filters |
Optional[bool] | ➖ | When set to true, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. |
ids |
List[str] | ➖ | Filter by a comma-separated list of IDs such as 222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3. |
remote_ids |
List[str] | ➖ | Filter by a comma-separated list of remote IDs. |
model_types |
List[str] | ➖ | Filter by a comma-separated list of JOB, POSITION, REQUISITION Leave this blank to get results matching all values. |
statuses |
List[str] | ➖ | Filter by a comma-separated list of OPEN_LIMITED, OPEN_UNLIMITED, PENDING, FROZEN, FILLED, CLOSED Leave this blank to get results matching all values. |
retries |
Optional[utils.RetryConfig] | ➖ | Configuration to override the default retry behavior of the client. |
models.GetHrisStaffingEntitiesResponse
| Error Type | Status Code | Content Type |
|---|---|---|
| errors.KomboHrisError | default | application/json |
| errors.SDKDefaultError | 4XX, 5XX | */* |