Skip to main content


Run a new time entry

What are you waiting for? Start to track your time now!

curl -u <email>:<password> \
-H "Content-Type: application/json" \
-d '{"created_with":"API example code","description":"Hello Toggl","tags":[],"billable":false,"workspace_id":{workspace_id},"duration":-1654686174,"start":"1984-06-08T11:02:53.000Z","stop":null}' \
-X POST{workspace_id}/time_entries

A new time entry will start tracking time. You can see the running time in the Toggl Track web app.

Hello Toggl

Remember to replace {workspace_id} for the corresponding one both in the URL path and in the payload field "workspace_id".

You can always ask the details about your running time entry as follows:

  curl -u <email>:<password> \
-H "Content-Type: application/json" \
"data": {
"id": 436694100,
"wid": 777,
"pid": 193791,
"billable": false,
"start": "1984-01-30T09:08:04+00:00",
"duration": -1391072884,
"description": "Running time entry",
"at": "1984-01-30T09:08:12+00:00"

About the duration field

To create a time entry that started and stopped you can provide both the start and the duration fields. Where the:

  • start field will have the format "2022-10-27T15:38:45Z"
  • duration field will have the duration in seconds, for example 120.

To create a time entry that started and continues to be running, the duration field is the negative UNIX timestamp for when it started. In UNIX environments with the date command you can create a running time entry for the current date using the following command:

curl -u <email>:<password> \
-H "Content-Type: application/json" \
-d '{"created_with":"API example code","description":"Hello Toggl","tags":[],"billable":false,"workspace_id":{workspace_id},"duration":-'$(date +%s)',"start":"'$(date -u +%Y-%m-%dT%H:%M:%S.%3NZ)'","stop":null}' \
-X POST{workspace_id}/time_entries

Stop an existing time entry

Don't forget to stop your running time entry!

curl -u <email>:<password> \
-X PATCH{workspace_id}/time_entries/{time_entry_id}/stop

And now, the time entry is in your history.

Hello Toggl

Manual mode

It is always possible to insert a time entry specifying the start time and the duration.


The stop time will be considered as the start time plus the specified duration.

curl -u <email>:<password> \
-H "Content-Type: application/json" \
-d '{"description":"Meeting with clients","tags":["billed"],"workspace_id":{workspace_id},"duration":1200,"start":"2022-03-05T07:58:58.000Z","created_with":"curl"}' \
-X POST{workspace_id}/time_entries

Time entry history

If you want to retrieve the list of time entries in a specific time window, you can use start_date and end_date parameters as below.


The limit of returned time entries is 1000. Consider using detailed reports for the whole list.

curl -u <email>:<password> \
-H "Content-Type: application/json" \
-X GET ""

The result is an array composed of time entry objects.

Check the docs on Time Entry for further time entry operations.

© 2022 Toggl. All rights reserved.