List Timeoff requests
/unified/hris/timeoff_requests
Partial response — use the "get" endpoint for the full object.
Query Parameters
Refer Specifying query parameters in Truto APIs
The company to use, referencing companies.id. Optional: when omitted the account's company is looked up automatically. The request fails if the account can see more than one company and none is given.
1 supported
Flat alternative to company.id.
1 supported
This represents the employee requesting time off.
21 supported7 required13 notes
The employee (employees.id, the Omni user id) whose time-off requests to list. 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).
Required: UKG lists time off requests only for given employees (employees.id). Several UKG person IDs may be sent. 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.
Filter by employee (employees.id).
Filter by employee, referencing employees.id (the Deel HRIS profile id).
The employee to filter the time off requests 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.
Filter by employee, referencing employees.id.
Return only this employee's requests (employees.id): Humi's GET /v1/timeoff/{employeeId} is called instead of the company-wide GET /v1/timeoff. An unknown id fails with Humi's error. Accepted forms: employee[id]=, employee_id=, a repeated parameter or employee[id][]=, employee[id][eq]= and employee[id][in]=; a blank value is ignored. More than one id, or any other form is refused with a 400 instead of being ignored. employee[id][ne] is refused too: Humi reads one employee or the whole company, so excluding an employee would mean reading every employee's data, which this mapping will not do silently.
Filter by employee (employees.id, Justworks member ids). One id is sent as member_id; Justworks' member_id takes one value, so two or more ids are read without it and the requested set is kept from each page, which can come back with fewer records than the limit, or none, and still have a next_cursor. When both employee[id] and employee_id are given, both must hold (the ids are intersected), and an intersection with nothing in it returns an empty list without calling Justworks. Accepts one value, a comma-separated list, a repeated employee_id[]=… (or employee_id=… twice) and employee_id[eq]= / employee_id[in]=. A form that cannot be read (another operator, a nested value) is refused with a 400 that names the filter: it is never treated as no filter, which would return everything.
The employee (employees.id, a Remote employment id).
Only this employee's requests (employees.id, Sesame employeeId); several employees in one call are refused (400). Accepts a plain value, a comma-separated list, repeated keys and [eq]/[in]; any other operator is refused (400) rather than dropped.
The unique identifier for employees
12 supported12 notes
Flat alternative to employee.id.
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.
Flat alternative to employee.id.
Flat alternative to employee.id (same forms).
The employee ID you want to get the time off requests for
Flat alternative to employee.id.
Flat alternative to employee.id.
Flat alternative to employee.id.
Flat alternative to employee.id.
This represents the status of the time off request.
APPROVEDPLANNEDREJECTEDREQUESTEDWITHDRAWNallapprovedcancelledclosedpendingrejectedtaken
14 supported2 required9 notes
PLANNEDAPPROVEDREJECTEDREQUESTEDWITHDRAWNpendingapprovedrejectedFilter by status.
pendingapprovedrejectedtakencancelledFilter by status: pending (REQUESTED), approved, rejected, taken (USED) or cancelled (CANCELED).
Only absences with these statuses, sent as statusFilter. Accepts the unified values pending, approved, rejected and cancelled — each covers every HR WORKS identifier that reads as it, so pending sends requested, substitutionRequested, substitutionRejected, changesRequested, editingChanges and editing, and approved sends validatedOk, cancellationRequested and deletionRequested — or an HR WORKS AbsenceStatus identifier directly. A value that is neither returns an empty list without calling HR WORKS; a value next to a known one is ignored. 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.
approvedpendingrejectedcancelledHumi returns approved time off requests only and has no status filter. approved (alone, comma-separated with other values, or repeated) calls Humi as usual; a status list without approved (pending, rejected, cancelled, ...) matches nothing and returns an empty list without calling Humi. Accepted forms, all meaning the same: status=a, status=a,b, status[]=a or a repeated status, status[eq]=a and status[in]=a,b. status[ne]= and status[nin]=a,b exclude instead: excluding approved returns an empty list without calling Humi, and excluding anything else is the normal call, because approved is the only status Humi returns. Any other form (status[gte], status[like], ...) is refused with a 400 instead of being ignored.
pendingapprovedrejectedcancelledFilter by status: pending -> Justworks requested, approved -> approved, rejected -> declined, cancelled -> cancelled and deleted. One status that is one Justworks value is sent as its status parameter; cancelled (two Justworks values) and any set of two or more are read without it, and the requested set is kept from each page, which can come back with fewer records than the limit, or none, and still have a next_cursor. Justworks' manual entries carry no status and are returned only when this filter is omitted. A value with no Justworks equivalent returns an empty list without calling Justworks. Accepts one value, a comma-separated list, a repeated status[]=… (or status=… twice) and status[eq]= / status[in]=. A form that cannot be read (another operator, a nested value) is refused with a 400 that names the filter: it is never treated as no filter, which would return everything.
allpendingclosedpendingapprovedrejectedcancelledFilter by status. When omitted all statuses are returned. approved includes absences whose cancellation is awaiting approval: they stay approved until the cancellation is approved. Deleting a time off request cancels it, so it is still listed, with status cancelled. The PayFit API key needs the contracts:read scope as well as time:read: each absence's employee is looked up from its contract, and without contracts:read the request fails with 403.
pendingapprovedrejectedcancelledtakenFilter by status.
pendingapprovedrejectedpending, approved (Sesame accepted) or rejected. One value is sent to Sesame; several (for example pending,approved) are filtered by Truto after the call, so a page can come back empty while the list continues. A value outside the enum returns an empty list, since no record is ever mapped to it. Accepts a plain value, a comma-separated list, repeated keys and [eq]/[in]; any other operator is refused (400) rather than dropped.
pendingapprovedrejectedcancelledpending = Submitted, approved = Approved, rejected = Sent Back. Repeat the parameter for several statuses. Values Workday cannot return match nothing: Workday never returns canceled or denied entries, so status=cancelled (or any other unsupported value) returns an empty list without calling Workday; unsupported values next to supported ones are ignored.
This represents the time off type of the time off request.
holidaysickness
9 supported1 required6 notes
Filter by time off type (timeoff_types.id).
Only absences of these absence types (timeoff_types.id, the HR WORKS absence type key such as AL), sent as types. 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. Sick leaves are NOT included: HR WORKS keeps them in a separate endpoint (GET /v2/sick-leaves) with its own types and its own numbering, and the two numbering schemes are not documented to be disjoint, so merging them could give two different records the same id.
Filter by timeoff_types.id.
Filter by time off type (timeoff_types.id, e.g. paid_time_off).
The unique identifier for TimeoffType
Filter by time off type (timeoff_types.id).
This represents the end time of the time off request.
20 supported6 required10 notes
End of the date interval to read (HR WORKS endDate). Required. HR WORKS returns absences for a date interval and requires both ends: the maximum interval is one year, and Truto refuses a longer or negative one with a 400 before calling. The interval is inclusive and matches every absence that overlaps it (HR WORKS also reports workingDaysInDateInterval, the part inside the window, in remote_data). 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.
Required. End of the date window (YYYY-MM-DD), sent to Justworks as end_date. Accepts a date, a date-time (its date part is used as written) or an object with lte (lt is treated as lte).
Required. Last day of the date range to search (UKG endDate, inclusive). Accepts a date or date-time string (only the date part is used) or an object with lte, lt or eq (lt is treated as lte); anything else is refused with 400 and UKG is not called. UKG does not document whether requests that only partly overlap the range are returned.
Return requests that end on or after this date (time part ignored). Accepts a date or date-time string, or an object with gte or gt. The bound is inclusive: gt is treated as gte.
Passed to Deel end_date to filter by the end of the time off. Accepts an ISO date-time, or a date (YYYY-MM-DD) that is sent as the start of that day in UTC.
Filter by the request's end date. Accepts a plain ISO date-time string.
End of the date window, inclusive, sent as Humi's dateRange[end]: YYYY-MM-DD, or a date-time of which only the date as written is used (no zone conversion). end_time[lte] and start_time[lte] are accepted with the same meaning (lt is treated as lte), and end_time[eq]=D is the one-day window D..D. Humi filters by overlap: a request that starts on or before this date but ends after it is included. When omitted the window ends at 2100-12-31. One value per bound: a second value for the same bound, or any other form, is refused with a 400 instead of falling back to the default window.
Return requests that start on or before this date (time part ignored).
With start_time: requests overlapping the window. Alone: requests ending on or before this date. Only the date part is used.
Sesame toDayOff (last day of the search period); only the date part is used, and an object with lte/lt (or eq) gives the upper bound. start_time and end_time together form Sesame's single search window, so bounds that do not fit it widen the window rather than narrowing it: the answer can contain extra records, never fewer.
This represents the start time of the time off request.
21 supported6 required10 notes
Start of the date interval to read (HR WORKS beginDate). Required. HR WORKS returns absences for a date interval and requires both ends: the maximum interval is one year, and Truto refuses a longer or negative one with a 400 before calling. The interval is inclusive and matches every absence that overlaps it (HR WORKS also reports workingDaysInDateInterval, the part inside the window, in remote_data). 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.
Required. Start of the date window (YYYY-MM-DD), sent to Justworks as start_date. Accepts a date, a date-time (its date part is used as written) or an object with gte (gt is treated as gte). Justworks does not document whether requests that only overlap the window are included, or a maximum window.
Required. First day of the date range to search (UKG startDate, inclusive). Accepts a date or date-time string (only the date part is used) or an object with gte, gt or eq (gt is treated as gte); anything else is refused with 400 and UKG is not called.
Passed to Deel start_date to filter by the start of the time off. Accepts an ISO date-time, or a date (YYYY-MM-DD) that is sent as the start of that day in UTC.
Filter by the request's start date. Accepts a plain ISO date-time string.
Start of the date window, inclusive, sent as Humi's dateRange[start]: YYYY-MM-DD, or a date-time of which only the date as written is used (no zone conversion). start_time[gte] and end_time[gte] are accepted with the same meaning (gt is treated as gte), and start_time[eq]=D is the one-day window D..D (the requests overlapping D; Humi cannot filter on the start day itself). Humi filters by overlap: a request is returned when any of its days falls inside the window, so one that starts before this date but ends on or after it is included. Humi requires a window: when omitted it starts at 1970-01-01. A window whose start is after its end returns an empty list without calling Humi. One value per bound: a second value for the same bound, or any other form (start_time[ne], start_time[like], ...), is refused with a 400 instead of falling back to the default window.
Return requests that end on or after this date (time part ignored).
With end_time: requests overlapping the window. Alone: requests starting on or after this date. Only the date part is used.
Sesame fromDayOff (first day of the search period); only the date part is used, and an object with gte/gt (or eq) gives the lower bound. How Sesame applies it to multi-day requests is not documented.
Filter by the day of the time off entry (Workday stores one entry per day, so every record is one day of a request: start_time = end_time = that day). Accepts a date or date-time string (entries on or after that day) or an object with gte/gt and/or lte/lt. Bounds are whole days and always inclusive (Workday fromDate/toDate): gt is treated as gte and lt as lte; the time part is ignored.
This represents the date when the timeoffpolicies was updated
4 supported3 notes
Return requests updated in this window. Accepts an ISO date-time or date string (implies gte) or an object with gt/gte/lt/lte. A date alone (YYYY-MM-DD) covers that whole UTC day: gte and lt use its start, gt and lte its end.
Filter by this timestamp. Accepts either a plain ISO date-time string (implies >=), or an object with gt/gte/lt/lte keys for a range.
Requests updated in this window: a string (treated as gte) or an object with gte/gt and lte/lt. Sesame filters by date only (updatedAt[gt]/[lt] take a day), so the bounds are widened to whole days (one day before the lower bound, one day after the upper) and the result can include a few extra records; nothing inside the window is missed.
Filter by time off policy (timeoff_policies.id). One id is sent as policy_id; two or more are read without it and the requested set is kept from each page. Accepts one value, a comma-separated list, a repeated timeoff_policy_id[]=… (or timeoff_policy_id=… twice) and timeoff_policy_id[eq]= / timeoff_policy_id[in]=. A form that cannot be read (another operator, a nested value) is refused with a 400 that names the filter: it is never treated as no filter, which would return everything.
2 supported
Also return the absences 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. 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.
1 supported
Filter by this timestamp. Accepts either a plain ISO date-time string (implies >=), or an object with gt/gte/lt/lte keys for a range.
1 supported
Flat alternative to timeoff_policy.id.
1 supported
Restrict to these kinds of request. vacation and absence are Sesame's two families, each of which also holds its cancellation requests; the *_cancellation values select exactly those, which Sesame cannot filter on, so Truto filters them after the call (a page can come back empty while the list continues). When omitted, vacation requests are listed first and then absence requests. A value outside the enum returns an empty list. A Sesame request of type delete asks to give booked days back: it is returned with request_policy_type vacation_cancellation / absence_cancellation, a NEGATIVE amount (the days it returns) and a description saying so, so that summing the amounts of approved requests gives the net time off. Accepts a plain value, a comma-separated list, repeated keys and [eq]/[in]; any other operator is refused (400) rather than dropped.
absenceabsence_cancellationvacationvacation_cancellation
1 supported
The employee number you want to get the time off requests for
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 requests
The unique identifier for timeoffpolicies
27 supported
This represents the amount of the time off request.
22 supported
This represents the approver of the time off request.
7 supported
This represents the date when the timeoffpolicies was created
15 supported
This represents the description of the time off request.
18 supported
This represents the employee requesting time off.
27 supported
2 properties
The unique identifier for employees
This represents the name of the employee.
This represents the employee note for the time off request.
13 supported
This represents the end time of the time off request.
26 supported
This represents the reason of the time off request.
5 supported
2 properties
The unique identifier for timeoff_reason
This represents the name of the timeoff_reason.
Raw data returned from the remote API call.
This represents the request type of the time off request.
9 supported
This represents the session of the time off request.
fullmorningafternoon
10 supported
This represents the start time of the time off request.
26 supported
This represents the status of the time off request.
26 supported
This represents the time off type of the time off request.
21 supported
This represents the units of the time off request.
hoursdaysweeksmonths
20 supported
This represents the date when the timeoffpolicies was updated
12 supported
truto unified hris timeoffrequests \
-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',
'timeoffrequests',
{ 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",
"timeoffrequests",
{"integrated_account_id": "<integrated_account_id>"}
):
print(item)
asyncio.run(main())curl -X GET 'https://api.truto.one/unified/hris/timeoff_requests?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_requests?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_requests"
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())