Get a list of all time entries accessible to user.
Access rights:
{
"collection": [
{
"id": 12,
"entry_type": "work_time",
"start_time": "2025-02-21T09:08:58.000Z",
"date": "2025-02-21",
"description": "Doing something important",
"task_id": 175,
"external_id": "abcd",
"task_name": "Some Task",
"is_task_billable": true,
"task_notes": "These are the notes for Some Task",
"cost_center_id": 18,
"cost_center_name": "Project 660: Some Name",
"user_id": 819,
"user_name": "John Smith",
"user_email": "john@test.com",
"minutes": 60,
"billable_minutes": 60,
"invoiced_at": null,
"reported_at": null,
"is_locked": false,
"updated_at": 1742464038
}
],
"pagination": {
"current_page": 1,
"total_pages": 1,
"total_count": 1
}
}
| Param name | Description |
|---|---|
|
page
optional |
Page number. Validations:
|
|
per_page
optional |
Number of records per page. Default: 50. Validations:
|
|
q
optional |
Pass query to filter time entries by description or task name. Case-insensitive. Validations:
|
|
date_range
optional |
Get all time entries within the specified date range. Date range format: Validations:
|
|
start_date
optional |
Get all time entries starting from the specified date, e.g. Validations:
|
|
end_date
optional |
Get all time entries up to and including the specified date, e.g. Validations:
|
|
updated_after
optional |
Get all time entries updated after the specifiex Unix timestamp. Validations:
|
|
cost_center_id
optional |
Get all time entries for the specified cost center (project). Validations:
|
|
task_id
optional |
Get all time entries for the specidied task. Validations:
|
|
external_id
optional |
Retrieve all time entries where the external_id contains the given substring (case-insensitive). Validations:
|
|
user_id
optional |
Get all time entries for the specified user. Validations:
|
|
sort_by
optional |
Sort by field. Default: Validations:
|
|
order
optional |
Sorting order (descending or ascending). Default: Validations:
|
Get a list of deleted time entries that were accessible to the current user.
The response structure and the supported parameters are the same as in GET /api/time_entries endpoint.
To fetch time entries deleted after a specific timestamp, use updated_after parameter.
| Param name | Description |
|---|---|
|
id
required |
Task ID Validations:
|
| Param name | Description |
|---|---|
|
time_entry
required |
Time entry parameters. Validations:
|
|
time_entry[entry_type]
optional |
Time entry type. Default: Validations:
|
|
time_entry[user_id]
optional |
User ID. By default, current user’s ID is used. Validations:
|
|
time_entry[task_id]
required |
Task ID. Validations:
|
|
time_entry[description]
required |
Time entry description. Validations:
|
|
time_entry[date]
required |
Time entry date. E.g. Validations:
|
|
time_entry[start_time]
optional |
Time entry’s start timestamp, in Unix time format. Validations:
|
|
time_entry[minutes]
required |
Time, in minutes. Validations:
|
|
time_entry[billable_minutes]
optional |
Billable time, in minutes. By default, will be considered equal to Validations:
|
Note: updating invoiced or reported time entries is not allowed.
| Param name | Description |
|---|---|
|
id
required |
Time entry ID Validations:
|
|
time_entry
required |
Time entry parameters. Validations:
|
|
time_entry[entry_type]
optional |
Time entry type. Default: Validations:
|
|
time_entry[user_id]
optional |
User ID. By default, current user’s ID is used. Validations:
|
|
time_entry[task_id]
required |
Task ID. Validations:
|
|
time_entry[description]
required |
Time entry description. Validations:
|
|
time_entry[date]
required |
Time entry date. E.g. Validations:
|
|
time_entry[start_time]
optional |
Time entry’s start timestamp, in Unix time format. Validations:
|
|
time_entry[minutes]
required |
Time, in minutes. Validations:
|
|
time_entry[billable_minutes]
optional |
Billable time, in minutes. By default, will be considered equal to Validations:
|
| Param name | Description |
|---|---|
|
id
required |
Time entry ID Validations:
|
Mark time entry as invoiced by setting its invoiced_at timestamp, or mark it as not invoiced by setting its invoiced_at to null.
{"invoiced_at":1740649659}
{"invoiced_at":true}
{"invoiced_at":null}
| Param name | Description |
|---|---|
|
invoiced_at
optional |
Timestamp, in Unix time format. Pass Validations:
|
Mark time entry as reported to payroll by setting its reported_at timestamp, or mark it as not reported to payroll by setting its reported_at to null.
{"reported_at":1740649659}
{"reported_at":true}
{"reported_at":null}
| Param name | Description |
|---|---|
|
reported_at
optional |
Timestamp, in Unix time format. Pass Validations:
|
| Param name | Description |
|---|---|
|
empty
optional |
Pass Validations:
|
Upload an XLSX file containing time entries to be created. Existing time entries cannot be updated via this feature.
The response will contain import stats: number of created entries, rows failed to be imported with errors etc. Row number is used as a key to identify the imported time entry in response stats.
{
"ok": true,
"new": 3,
"updated": 0,
"failed": [6, 7],
"new_items": [4, 5, 8],
"updated_items": [],
"errors": {
"4": [],
"5": [],
"6": ["Failed to find task with name 'Invoicing' for cost center ID 42"],
"7": ["Failed to find user with name 'John Smith'"],
"8": []
}
}
| Param name | Description |
|---|---|
|
file
required |
XLSX file with time entries to create. Validations:
|
Get work time stats for a user with a daily breakdown for a given date range.
Stats will include:
Permissions. User's work time balance can be accessed by:
[
{
"date": "2025-03-25",
"actual_worked_time": 720,
"billable_time": 240,
"utilization": 33.33,
"mandatory_working_time": 480,
"absence_time": 0,
"is_locked": false,
"work_time_balance": 240,
"balance_correction": 0
},
{
"date": "2025-03-26",
"actual_worked_time": 0,
"billable_time": 0,
"utilization": null,
"mandatory_working_time": 480,
"absence_time": 0,
"is_locked": true,
"work_time_balance": -480,
"balance_correction": 0
}
]
| Param name | Description |
|---|---|
|
user_id
optional |
User ID. Default: current user ID. Validations:
|
|
start_date
optional |
Date to start the balance calculations from. Default: date of the user’s first time entry. If start date has not been passed explicitly and user has no time entries, time balance will not be calculated. Validations:
|
|
end_date
optional |
Date to end the balance calculations with, inclusive. Default: yesterday. Validations:
|
|
date_range
optional |
Get stats within the specified date range.Either pass date_range or start/end dates. Date range format: Validations:
|
Get work time stats for a user for a given date range and for today.
Stats will include:
Permissions. User's work time balance can be accessed by:
{
"stats": {
"start_date": "2025-03-25",
"end_date": "2025-06-03",
"actual_worked_time": 2220,
"billable_time": 1740,
"utilization": 78.38,
"work_time_balance": -16500
},
"today_stats": {
"start_date": "2025-06-04",
"end_date": "2025-06-04",
"actual_worked_time": 0,
"billable_time": 0,
"utilization": null,
"work_time_balance": -480
}
}
| Param name | Description |
|---|---|
|
user_id
optional |
User ID. Default: current user ID. Validations:
|
|
start_date
optional |
Date to start the balance calculations from. Default: date of the user’s first time entry. If start date has not been passed explicitly and user has no time entries, time balance will not be calculated. Validations:
|
|
end_date
optional |
Date to end the balance calculations with, inclusive. Default: yesterday. Validations:
|
|
date_range
optional |
Get stats within the specified date range.Either pass date_range or start/end dates. Date range format: Validations:
|