List Timeoff balances
/unified/hris/timeoff_balances
Query Parameters
Refer Specifying query parameters in Truto APIs
This represents the employee the balance belongs to..
13 supported9 required10 notes
The employee, referencing employees.id (the Deel HRIS profile id). Required: Deel returns this data per employee.
The employee (employees.id, the Omni user id) whose time-off balances to read. Required: Omni HR only exposes this per employee (Omni requires the employee's user id as its user_id parameter). Exactly one employee: employee_id=, employee[id]=, [eq] or [in] with one id, or a one-element array. Several different ids, any other operator or a non-integer id is refused with a 400 (Omni HR has no multi-employee endpoint).
The employee (employees.id, Paychex workerId) whose balances to list. Required: Paychex only returns balances per worker.
The employee (employees.id, a Remote employment id). Required: Remote only exposes this data per employment.
Required: UKG returns accrual balances per employee (employees.id); one employee per call. Accepts one value, several comma-separated, a repeated key (x[]=a&x[]=b) or an eq/in filter; a filter form UKG cannot express is refused with 400 rather than ignored.
This represents the employee the balance belongs to.
The employee (employees.id, a Workday worker WID, or a reference such as Employee_ID=21001). Required: Workday only exposes this data per worker.
The employee to filter the time off balances by
Only these employees (employees.id, the HR WORKS person uuid). HR WORKS filters by username, so the ids are resolved through the person list Truto reads anyway; an id HR WORKS does not know returns an empty list without calling HR WORKS. Several values are supported: repeat the parameter, separate them with commas, use the [] form, or the operator forms [eq] / [in]. Any other form (for example [ne] or a nested object) is refused with a 400 instead of being ignored, so a filter Truto cannot express never returns unfiltered data. Truto resolves the person of every record by listing the company's persons once per page (GET /v2/persons, leavers included), because HR WORKS keys the response by a person identifier and the records themselves carry no person: the key pair therefore needs read permission for /persons as well. A key that no person matches, a key that two different persons match (one person's HR WORKS username can be another person's personnel number — HR WORKS keeps the two apart in nothing but their names) and a key pair without that permission all give the same answer: the record is returned WITHOUT employee, with the raw key in remote_data.truto_person_key. An employee is never guessed.
Filter by employee, referencing employees.id.
The unique identifier for employees
9 supported1 required9 notes
The employee ID you want to get the time off balances for
Flat alternative to employee.id.
Flat alternative to employee.id (same values and forms).
Filter by the employee's unified id. Prefer the nested employee object form; this is a flat fallback.
Flat alternative to employee.id (same forms).
Flat alternative to employee.id.
Flat alternative to employee.id.
Flat alternative to employee.id.
Flat alternative to employee.id.
5 supported1 required5 notes
The date for which the time off balance is calculated
Deel tracking_period_date: return the balance of the tracking period containing this date (YYYY-MM-DD).
Calculate the balance as of this date (calendar date is used; time/offset is ignored). Defaults to today if omitted.
Return the balance as of this date (UKG date, YYYY-MM-DD). The balance reported is UKG's balance for that day, or the latest day UKG returns that is not after it. Without it, UKG's own default date applies (undocumented) and the latest day UKG returns is reported. A balance UKG keeps in money rather than time is left out instead of being reported as 0 hours. Accepts a date or date-time string (only the date part is used) or an eq filter; a value that is not a date is refused with 400 rather than ignored.
Return balances as of this date (YYYY-MM-DD; a date-time's time part is ignored). Defaults to today.
2 supported1 required2 notes
The time off policy ID you want to get the time off balances for
Flat alternative to timeoff_policy.id (same forms).
Only the balance of this Omni time-off type (timeoff_types.id; Omni exposes no policies, balances are per time-off type). Without it one balance-overview call is made per time-off type the token's user may adjust. Exactly one type, in any of the usual forms ([eq] / [in] with one id); several ids or any other operator is refused with a 400.
2 supported
HR WORKS-specific: the reference date of the leave account (referenceDate, YYYY-MM-DD). "The date interval over which the data will be generated always starts from January 1st of the year specified in this parameter and ends at the reference date." When it is omitted Truto sends nothing and HR WORKS uses its own default, which it does not document. Accepts a date (YYYY-MM-DD), a date-time (only the date part is sent) or the operator forms [eq]/[gte]/[gt] and [eq]/[lte]/[lt]; gt and lt are treated as inclusive, because HR WORKS's window is inclusive. Several values, [ne] or a nested object are refused with a 400. HR WORKS keeps one annual-leave account per person: balance is its unplanned value ("The number of unplanned/still available vacation days"), counted in days. The entitlement, requested, approved, planned and expiring counters and the next expiration date have nowhere to land in the unified model and stay in remote_data. There is no link to a timeoff_policy: HR WORKS does not expose which vacation type a person is assigned to.
1 supported
Also return the leave accounts of persons who have left the company and were set to gone (onlyActive=false). Default false. HR WORKS ignores it when an employee filter is given. Accepts true/false in any letter case, also as [eq]; any other value or form is refused with a 400.
1 supported
Show Truto-specific parameters
The ID of the integrated account to use for the request.
62f44730-dd91-461e-bd6a-aedd9e0ad79dThe format of the response.
unifiedreturns the response with unified mappings applied.rawreturns the unprocessed, raw response from the remote API.normalizedapplies the unified mappings and returns the data in a normalized format.streamreturns the response as a stream, which is ideal for transmitting large datasets, files, or binary data. Using streaming mode helps to efficiently handle large payloads or real-time data flows without requiring the entire data to be buffered in memory.debugreturns the final unified result alongside raw remote fetch information. The response is an envelope containingresult(identical to unified mode output) anddebug(withrequestUrl,requestOptions,data,responseHeaders, and for list operations:nextCursor,isLooping,isEmptyResult,resultCount). When the upstream body exceeds 1 MiB,datais replaced by{ truto_truncated: true, truto_max_bytes, truto_excerpt }.debugisnullfor static responses or whentruto_skip_api_call=true.
Defaults to unified.
unifiedunifiedrawnormalizedstreamdebug
By default the result attribute is an array of objects. This parameter allows you to specify a field in each result objects to use as key, which transforms the result array into an object with the array items keyed by the field. This is useful for when you want to use the result as a lookup table.
idIgnores the limit query parameter.
Excludes the remote_data attribute from the response.
Array of fields to exclude from the response.
truto_exclude_fields[]=id&truto_exclude_fields[]=nameQuery parameters to pass to the underlying API without any transformations. Refer this guide to see how to structure the query parameters.
remote_query[foo]=barResponse Body
Present only when truto_response_format=debug. Contains raw fetch details: requestUrl, requestOptions, data, responseHeaders, nextCursor, isLooping, isEmptyResult, resultCount. data is the parsed upstream body; when its JSON form exceeds 1 MiB it is replaced by { truto_truncated: true, truto_max_bytes, truto_excerpt }, where truto_excerpt is the leading bytes of that body. The same applies to a string requestOptions.body. null for static responses or when truto_skip_api_call=true.
The cursor to use for the next page of results. Pass this value as next_cursor in the query parameter in the next request to get the next page of results.
List of Timeoff balances
The unique identifier for time off balances
14 supported
This represents the balance of the time off request.
14 supported
This represents the date when the timeoffbalances was created
2 supported
This represents the employee the balance belongs to..
14 supported
2 properties
The unique identifier for employees
This represents the name of the employee.
Raw data returned from the remote API call.
This represents the time off policy of the time off request.
10 supported
This represents the date when the timeoffbalances was updated
2 supported
truto unified hris timeoffbalances \
-a '<integrated_account_id>' \
-o jsonimport Truto from '@truto/truto-ts-sdk';
const truto = new Truto({
token: '<your_api_token>',
});
const result = await truto.unifiedApi.list(
'hris',
'timeoffbalances',
{ integrated_account_id: '<integrated_account_id>' }
);
console.log(result);import asyncio
from truto_python_sdk import TrutoApi
truto_api = TrutoApi(token="<your_api_token>")
async def main():
async for item in truto_api.unified_api.list(
"hris",
"timeoffbalances",
{"integrated_account_id": "<integrated_account_id>"}
):
print(item)
asyncio.run(main())curl -X GET 'https://api.truto.one/unified/hris/timeoff_balances?integrated_account_id=<integrated_account_id>' \
-H 'Authorization: Bearer <your_api_token>' \
-H 'Content-Type: application/json'const integratedAccountId = '<integrated_account_id>';
const response = await fetch(`https://api.truto.one/unified/hris/timeoff_balances?integrated_account_id=${integratedAccountId}`, {
method: 'GET',
headers: {
'Authorization': 'Bearer <your_api_token>',
'Content-Type': 'application/json',
},
});
const data = await response.json();
console.log(data);import requests
url = "https://api.truto.one/unified/hris/timeoff_balances"
headers = {
"Authorization": "Bearer <your_api_token>",
"Content-Type": "application/json",
}
params = {
"integrated_account_id": "<integrated_account_id>"
}
response = requests.get(url, headers=headers, params=params)
print(response.json())