- Getting time entries
- Getting a time entry
- Creating a time entry
- Updating a time entry
- Deleting a time entry
- Timer
- The time entry object
- Dependent objects
You can list timesheet entries by making a GET request to:
/api/entries?where=project_id=[PROJECT_ID]
for a list of time entries from a project/api/entries?where=task_id=[TASK_ID]
for a list of time entries for a task/api/entries?where=user_id=[USER_ID]
for a list of time entries for a user/api/entries?where=client_id=[CLIENT_ID]
for a list of time entries for a client/api/entries?where=time_interval in ("2014-12-01T00:00:00Z","2015-01-01T00:00:00Z")
for a list of time entries between Dec 1st, 2014 and Jan 1st, 2015.
Example of response:
{
"entries": [
{
"id": 15200864,
"task_id": 241184,
"user_id": 1563,
"start_time": "2014-12-11T09:30:00Z",
"end_time": "2014-12-11T10:15:00Z",
"description": "",
"added_manually": true,
"invoice_item_id": null,
"billed": false,
"is_bulk": false,
"project_id": 28934,
"created_on": "2014-12-12T14:42:49Z",
"updated_on": "2014-12-12T14:42:49Z",
"duration": 2700
},
{
"id": 12186606,
"task_id": 2093082,
"user_id": 1563,
"description": "",
"added_manually": false,
"invoice_item_id": null,
"billed": false,
"is_bulk": true,
"project_id": 347452,
"created_on": "2014-10-21T09:07:39Z",
"updated_on": "2014-10-21T09:07:39Z",
"duration": 21600,
"date": "2014-10-21"
}
]
}
You can also include related content when listing entries.
To get the time entry info, make a GET request to:
/api/entries/[ENTRY_ID]
Example response:
{
"entries": [
{
"id": 15200864,
"task_id": 241184,
"user_id": 1563,
"start_time": "2014-12-11T09:30:00Z",
"end_time": "2014-12-11T10:15:00Z",
"description": "",
"added_manually": true,
"invoice_item_id": null,
"billed": false,
"is_bulk": false,
"project_id": 28934,
"created_on": "2014-12-12T14:42:49Z",
"updated_on": "2014-12-12T14:42:49Z",
"duration": 2700
}
]
}
You can also include related content when getting a time entry.
To create a time entry, make a POST request to:
/api/entries
with the request body containing the new time entry info, as in the examples below:
{
"task_id": 241184,
"start_time": "2014-12-10T09:00:00Z",
"end_time": "2014-12-10T10:00:00Z",
"description": "Talked to Susan on the phone."
}
to add a time entry with a start and end time, or:
{
"task_id": 241184,
"date": "2014-12-10",
"duration": 3600,
"description": "Talked to Peter on the phone."
}
to add a time entry with a date and duration. Duration is the length of the entry in seconds.
If successful, the response will return 201 Created
. The response header Location
will contain a link for the new time entry. The response body will contain the new time entry info as in the Getting a time entry section.
When creating a time entry: task_id
, (date
and duration
) or (start_time
and end_time
).
When creating a time entry with start_time
and end_time
the minimal time entry duration is 1 minute.
To update an existing time entry, make a POST or PUT request to:
/api/entries/[ENTRY_ID]
with the request body containing the updated info. You can send only the changed fields.
Example of request body if you want to change the duration:
{
"duration": 7200
}
You can change the duration
only for the time entries that were added with date
and duration
parameters.
For entries added with start_time
and end_time
the duration can be adjusted by updating the end_time
.
The response will return 200 OK
and will contain the updated time entry info as in the Getting a time entry section.
When updating an entry with start_time
and end_time
the new duration cannot be less than 1 minute.
To delete a time entry, make a DELETE request to:
/api/entries/[ENTRY_ID]
If successful, the response will have a 200 OK
status code.
A timer is a special kind of a time entry with the end_time
not yet set.
Any user can have at most only one timer started at any time.
Starting the timer for a user is the same as creating a time entry for that user with start_time
and no end_time
.
For example, make a POST request to:
/api/entries
with the body:
{
"task_id": 241184,
"user_id": 1563,
"description": "Running timer description",
"start_time": "2017-06-20T09:30:00Z"
}
If another timer is already running for that user, the request will fail with a 409 error code.
Stopping the timer is the same as updating the timer's end_time
with a valid date and time value.
For example, make a PUT request to:
/api/entries/[TIMER_ID]
with the body:
{
"end_time": "2017-06-20T15:00:00Z",
"description": "Final time entry description"
}
Same restrictions as for time entries apply for timers. You cannot stop a timer if the final duration is less than a minute. To stop the timer in this case, make a DELETE request and delete the timer.
To get the running timer of any particular user, make a GET request to:
/api/entries?where=user_id=[USER_ID] and end_time=null
A time entry object has the following attributes:
Attribute | Type | Description |
---|---|---|
id | integer | (read-only) Unique entry identifier |
project_id | integer | (read-only) Project id |
task_id | integer | Id of the task for which the time is added |
user_id | integer | Id of the user for whom the time is added |
is_bulk | boolean | If true the entry was added with date and duration , false if entry was added with start_time and end_time . |
start_time | datetime | Date and time when the time entry started. Note: start_time and end_time are not present for entries with date and duration . |
end_time | datetime | Date and time when the time entry ended |
date | date | Date when the time entry was added. Note: date and duration are not present for entries with start_time and end_time . |
duration | integer | Time entry duration in seconds |
description | text | Time entry description |
added_manually | boolean | If false the entry was added using a timer (using start/stop in Paymo Widget). |
billed | boolean | If true the entry is billed. Time for the entry was added into an invoice. |
invoice_item_id | integer | Id of the invoice item if the entry was billed (added into an invoice). |
created_on | datetime | (read-only) Date and time when the entry was created |
updated_on | datetime | (read-only) Date and time when the entry was last updated |
The following object types can be used in includes:
Object type | Include key | Relationship |
---|---|---|
Task | task | parent |
Invoice item | invoiceitem | parent |
User | user | parent |