Toggle Sidebar

TrackingTime API

The TrackingTime API allows you to integrate our features and your account data into your own applications. If you build something awesome with our API, find any issues or have any questions, please let us know.

Available Endpoints

Here's an overview of all resources and endpoints which are currently available in the TrackingTime API.

Endpoint URL Path Description
Customers /customers Retrieve and edit your customers.
Services /services Retrieve and edit your services.
Users /users Edit user profiles and invite people to join TrackingTime.
Teams /teams Retrieve and manage user teams.
Projects /projects Retrieve and edit your projects.
Task Lists /projects/:project_id/task_lists Retrieve and edit task lists within a certain project.
Tasks /tasks Retrieve and edit your tasks, task comments and to-dos.
Time Tracking /tasks Track time and sync time entries on-the-fly.
Timesheets /timesheets Manage timesheets to process billing, invoicing or payroll.
Time Entries /events Retrieve and edit your time entries.
Notifications /notifications Retrieve system notifications and mark them as read.
Dashboard Stats /dashboard Retrieve dashboard stats.
Reports /reports Create advanced reports through the API.
Webhooks /webhooks Create incoming and outgoing webhooks.
Bookmarks /bookmarks Save custom reports for easy future reference.

Making a Request

All request URLs start with this base URL. Requests must be sent via SSL. The path is prefixed with the API version. If we change the API in backward-incompatible ways, we'll bump the version marker and maintain stable support for the old URLs.

To list all your company tasks, you'd append the tasks' endpoint path to the base url to get this:

Important: Since we added multi-account support, you must now include the account id of one of the user's teams in the endpoint path to retrieve the data associated to that account., e.g.

You can retrieve all the teams you belong to using the Teams endpoints. If you don't specify an account id, the id of the original account will be used.


To hit the ground running with the API, you can use HTTP Basic Authentication with your own email and password. Instead of using your password, we can provide you with a bearer token to use instead. This is secure since all requests use SSL. Please contact us to request your bearer token.

curl -u username:password

If you enter that URL in your browser you'll be asked to provide your user credentials.

Supplying basic auth headers

You need to construct and send basic auth headers with your requests, specifying your email (username) and password. To do this you need to perform the following steps:

  1. Build a string of the form email:password.
  2. BASE64 encode the string.
  3. Supply an Authorization header with content Basic followed by the encoded string. For example, the string fred:fred encodes to ZnJlZDpmcmVk in base64, so you would make the request as follows:
curl -D- \
   -X GET \
   -H "Authorization: Basic ZnJlZDpmcmVk" \
   -H "Content-Type: application/json" \

Identifying your App

Your requests must include a User-Agent header with the name of your application and a link to your website or your email address so that we can reach out to you. You might also want to include your app's version.

User-Agent: 'MyApp, Inc. ('

User-Agent: 'MyApp v1.2 ('
curl -u username:password -H User-Agent: 'MyApp ('

Standard JSON Response

All API endpoints return a JSON object of this form:

{"response":{"status":200,"message":"Request completed successfully"},"data":{}}

The tasks endpoint will return something like this:

{"response":{"status":200,"message":"Request completed successfully"},"data":[
    "name": "Management",
    "project_id": 5348,
    "project": "Tracking Time v2",
    "priority": 0,
    "estimated_time": 900.0,
    "accumulated_time": 708869,
    "is_archived": false,
    "start_date": "2013-07-19 13:21:16",
    "end_date": null,
    "due_date": null  

If an error occurs the response status will be set to 500 and you'll get an error description in the response message. Callers should always check the value of the status parameter in the response.

{"response":{"status":500,"message":"There is already another client with the same name."},"data":{}}

Please refer to our API guidelines to know more about our response codes, the standards we're using and more.