To get access to the API, please drop us a message .
API Endpoint: https://api.tyme-app.com  
All dates & times exchanged in GMT+0 . 
Date Format: Y-m-d H:i:s  Example: 2025-12-31 23:59:59  
The exchange format is JSON . 
You need to have a team and be a team admin. You can create a new team in Tyme > File > Login > Create Team . 
 
Tyme uses the OAuth v2  standard for authenticating users.
To make yourself familiar with OAuth, please take a look at the rfc6749 .
Login form to log the user in and redirect them to your app
GET /v1/authorize
Parameter 
Type 
Description 
 
 
response_type 
String 
Must be code  
 
client_id 
String 
Your client ID 
 
state 
String 
Your state 
 
redirect_uri 
String 
Your redirect_uri 
 
 
Exchange the authcode with an access & refresh token
POST /v1/access_token
Parameter 
Type 
Description 
 
 
grant_type 
String 
Must be authorization_code  
 
code 
String 
Your auth code 
 
redirect_uri 
String 
Your redirect_uri 
 
client_id 
String 
Your client ID 
 
client_secret 
String 
Your client secret 
 
 
Exchange the refresh token with a new access & refresh token
POST /v1/refresh_token
Parameter 
Type 
Description 
 
 
grant_type 
String 
Must be refresh_token  
 
refresh_token 
String 
Your refresh token 
 
client_id 
String 
Your client ID 
 
client_secret 
String 
Your client secret 
 
 
POST /v1/sync
Tyme offers a full bidirectional sync. Based on a revision, the API delivers only the changes you've not yet received.
After each call to the sync endpoint, store the new revision and send it along with the next request.
Parameter 
Type 
Description 
 
 
project_updates 
Array 
Category, project or task data, that should be updated 
 
project_deletions 
Array 
Time entry data that should be updated 
 
time_updates 
Array 
Category, project or task IDs that should be deleted 
 
time_deletions 
Array 
Time entry IDs that should be deleted 
 
revision 
String 
Initial revision: 1.1.1.1  
 
 
You can use webhooks to subscribe for realtime notifications. The following notifications are available:
New category created 
New project created 
New task created 
New sub-task created 
New time entry created 
Stopped time entry 
 
POST /webhooks/subscribe
Parameter 
Type 
Description 
 
 
hook_url 
String 
The URL that should be called from the webhook 
 
trigger_type 
String 
category, project, task, subtask, time or stopped_time 
 
 
Status Code 
Parameter 
Value 
 
 
200 
status 
success 
 
403 
error 
not_allowed 
 
400 
error 
missing values 
 
 
Status Code 
Description 
 
 
200 
OK 
 
410 
Webhook subscription inactive, stop sending data 
 
 
[
  {
    "id": "D16DB305-DACB-471E-833F-29330C913E45-46205-00000AB867F3D867",
    "team_id": "5881f10158f36",
    "modified": "2024-04-26 11:25:21",
    "created": "2024-07-18 08:25:32",
    "user_id": "5881f10158f22",
    "related_id": "FE323534-642E-44BC-9EA8-F1F92146D626-46205-00000AAF8E02124C",
    "type": "TimedTaskRecord",
    "time_start": "2017-04-26 10:25:00",
    "time_end": "2017-04-26 11:25:00",
    "billing_state": 0,
    "note": "",
    "task_id": "FE323534-642E-44BC-9EA8-F1F92146D626-46205-00000AAF8E02124C",
    "task_name": "Eine Aufgabe",
    "duration": 3600,
    "duration_rounded": 3600,
    "revenue": 100,
    "project_id": "AEA5BFD8-06E5-43AD-9B4F-DECB15143176-46205-00000AA8CBE4B44B",
    "project_name": "New Project",
    "category_id": "t199489890",
    "category_name": "Category",
    "full_name": "Category: New Project: Eine Aufgabe"
  },
  {
    "id": "AEA5BFD8-06E5-43AD-9B4F-DECB15143176-46205-00000AA8CBE4B44B",
    "team_id": "5881f10158f36",
    "modified": "2024-04-26 11:25:59",
    "related_id": "t199489890",
    "type": "Project",
    "hourly_rate": 0,
    "rounding_method": 1,
    "rounding_minutes": 1,
    "default_hourly_rate": 100,
    "name": "New Project",
    "planned_budget": 0,
    "planned_duration": 36000,
    "created_date": "2024-04-26 11:24:03",
    "color": 10342999,
    "billable": 1,
    "fixed_rate": 0,
    "quantity": 0,
    "start_date": null,
    "due_date": null,
    "kilometer_rate": 0,
    "completed_date": null,
    "tracking_mode": 0,
    "modifier_flags": 0,
    "recurring_period": 0,
    "note": null,
    "cached_total": 0,
    "project_id": "AEA5BFD8-06E5-43AD-9B4F-DECB15143176-46205-00000AA8CBE4B44B",
    "project_name": "New Project",
    "category_id": "t199489890",
    "category_name": "Category",
    "full_name": "Category: New Project"
  }
]
POST /webhooks/unsubscribe
Parameter 
Type 
Description 
 
 
hook_url 
String 
The URL that should be called from the webhook 
 
trigger_type 
String 
category, project task, subtask, time or stopped_time 
 
 
Status Code 
Parameter 
Value 
 
 
200 
status 
success 
 
403 
error 
not_allowed 
 
400 
error 
missing values 
 
 
GET /data/search_entity
Parameter 
Type 
Description 
 
 
type 
String 
ProjectCategory, Project ,TimedTask or TimedSubTask 
 
name 
String? 
Name to search for 
 
parent_id 
String? 
ID of the parent entity. For example a project ID when searching for a task 
 
 
Status Code 
Parameter 
Value 
 
 
200 
Array 
found results 
 
403 
error 
not_allowed 
 
400 
error 
missing values 
 
 
{
  "id": "tsub67891",
  "team_id": "5881f10158f36",
  "modified": "2024-03-21 08:13:11",
  "related_id": "t1234567891",
  "type": "TimedSubTask",
  "hourly_rate": 75,
  "rounding_method": 1,
  "rounding_minutes": 30,
  "default_hourly_rate": 0,
  "name": "subtask of task1",
  "planned_budget": 0,
  "planned_duration": 0,
  "created_date": "2024-04-20 13:33:59",
  "color": 0,
  "billable": 1,
  "fixed_rate": 0,
  "quantity": 0,
  "start_date": null,
  "due_date": null,
  "kilometer_rate": 0,
  "completed_date": "2024-04-20 13:33:59",
  "tracking_mode": 0,
  "modifier_flags": 0,
  "recurring_period": 0,
  "note": null,
  "cached_total": 0,
  "subtask_id": "tsub67891",
  "subtask_name": "subtask of task1",
  "task_id": "t1234567891",
  "task_name": "task1",
  "project_id": "t1234567890",
  "project_name": "project",
  "category_id": "AAF8E02-BFD8-06E5-43AD-9B4F-DECB15143176",
  "category_name": "category",
  "full_name": "category: project: task1: subtask of task1"
}
POST /data/update_entity
Parameter 
Type 
Description 
 
 
type 
String 
Must be ProjectCategory  
 
id 
String? 
ID of the category. If not provided, Tyme will generate a unique ID 
 
name 
String 
Name of the category 
 
color 
Int? 
i.e 0xFF9900 
 
 
Parameter 
Type 
Description 
 
 
type 
String 
Must be Project  
 
id 
String? 
ID of the project. If not provided, Tyme will generate a unique ID 
 
name 
String 
Name of the project 
 
color 
Int? 
i.e 0xFF9900 
 
category_id 
String? 
ID of the parent category 
 
rounding_method 
Int 
DOWN, NEAREST or UP 
 
rounding_minutes 
Int 
Minutes the rounding is applied 
 
hourly_rate 
Int 
Hourly Rate 
 
planned_duration 
Int 
Duration in seconds 
 
planned_budget 
Float 
Budget 
 
 
Parameter 
Type 
Description 
 
 
type 
String 
Must be TimedTask  
 
id 
String? 
ID of the task. If not provided, Tyme will generate a unique ID 
 
name 
String 
Name of the task 
 
project_id 
String? 
ID of the parent project 
 
billable 
Bool 
Whether the task is billable or not 
 
planned_duration 
Int 
Duration in seconds 
 
 
Parameter 
Type 
Description 
 
 
type 
String 
Must be TimedSubTask  
 
id 
String? 
ID of the sub-task. If not provided, Tyme will generate a unique ID 
 
name 
String 
Name of the sub-task 
 
task_id 
String? 
ID of the parent task 
 
planned_duration 
Int 
Duration in seconds 
 
 
Parameter 
Type 
Description 
 
 
type 
String 
Must be TimedTaskRecord  
 
id 
String? 
ID of the time entry. If not provided, Tyme will generate a unique ID 
 
task_id 
String? 
ID of the parent task 
 
time_start 
DateTime 
Start time 
 
time_end 
DateTime? 
End time. Set to null  if the time entry is still running 
 
note 
String 
Note of the time entry 
 
user_id 
String? 
User ID the entry belongs to 
 
 
Parameter 
Type 
Description 
 
 
type 
String 
Must be NonWorkingRecord  
 
subtype 
Int 
vacation=0, sick=1, other=2, publicHoliday=3, overtimeCompensation=4, specialLeave=5 
 
id 
String? 
ID of the entry. If not provided, Tyme will generate a unique ID 
 
time_start 
DateTime 
Start time 
 
time_end 
DateTime? 
End time 
 
note 
String 
Note 
 
user_id 
String? 
User ID the entry belongs to 
 
 
Status Code 
Parameter 
Value 
 
 
200 
status 
success 
 
403 
error 
not_allowed 
 
400 
error 
missing values 
 
 
DELETE /data/entity
Parameter 
Type 
Description 
 
 
project_ids 
Array 
Array of entity ids (can be a project, task, sub-task, etc.) 
 
time_ids 
Array 
Array of time entry ids 
 
 
Status Code 
Parameter 
Value 
 
 
200 
status 
success 
 
403 
error 
not_allowed 
 
 
GET /data/summary
Parameter 
Type 
Description 
 
 
from 
DateTime 
Start of the time frame 
 
to 
DateTime 
End of the time frame 
 
 
Status Code 
Parameter 
Value 
 
 
200 
summary 
summary data 
 
403 
error 
not_allowed 
 
400 
error 
date_range_too_large 
 
 
{
  "summary": [
    {
      "id": "FE323534-642E-44BC-9EA8-F1F92146D626-46205-00000AAF8E02124C",
      "type": "TimedTask",
      "name": "Some Task",
      "full_name": "Category: New Project: Some Task",
      "category_name": "Category",
      "category_id": "AAF8E02-BFD8-06E5-43AD-9B4F-DECB15143176",
      "project_name": "New Project",
      "project_id": "AEA5BFD8-06E5-43AD-9B4F-DECB15143176-46205-00000AA8CBE4B44B",
      "task_name": "Eine Aufgabe",
      "task_id": "FE323534-642E-44BC-9EA8-F1F92146D626-46205-00000AAF8E02124C",
      "subtask_name": null,
      "subtask_id": null,
      "time": 3600,
      "revenue": 100
    }
  ]
}
GET /data/members/:user_id
Parameter 
Type 
Description 
 
 
user_id 
String? 
Use me  for yourself. Omit for all users 
 
 
Status Code 
Parameter 
Value 
 
 
200 
data 
user data 
 
403 
error 
not_allowed 
 
400 
error 
missing values 
 
 
{
  "data": [
    {
      "id": "t123897987987",
      "team_id": "5881f10158f36",
      "name": "Hans",
      "email": "some@email.de",
      "role": 0,
      "working_times": "0,28800,28800,28800,28800,28800,0",
      "historic_working_times": null,
      "last_sync": "2017-01-20 14:00:49",
      "created": "2017-01-20 14:00:49",
      "assigned": []
    }
  ]
}
GET /data/times
Parameter 
Type 
Description 
 
 
from 
DateTime 
Start of the time frame 
 
to 
DateTime 
End of the time frame 
 
start 
Int? 
Paging start parameter 
 
user_id 
String? 
Filter by user 
 
billing_state 
Int? 
Filter by billing state (0=unbilled, 1=billed, 2=paid) 
 
 
Status Code 
Parameter 
Value 
 
 
200 
data 
times data 
 
403 
error 
not_allowed 
 
400 
error 
missing values 
 
 
{
  "data": [
    {
      "id": "D16DB305-DACB-471E-833F-29330C913E45-46205-00000AB867F3D867",
      "team_id": "5881f10158f36",
      "modified": "2024-04-26 11:25:21",
      "created": "2024-07-18 08:43:24",
      "user_id": "5881f10158f22",
      "related_id": "FE323534-642E-44BC-9EA8-F1F92146D626-46205-00000AAF8E02124C",
      "type": "TimedTaskRecord",
      "locked": 0,
      "subtype": 0,
      "traveled_distance": 0,
      "time_start": "2024-04-26 10:25:00",
      "time_end": "2024-04-26 11:25:00",
      "billing_state": 0,
      "note": "",
      "task_id": "FE323534-642E-44BC-9EA8-F1F92146D626-46205-00000AAF8E02124C",
      "task_name": "A Task",
      "duration": 3600,
      "duration_rounded": 3600,
      "revenue": 100,
      "project_id": "AEA5BFD8-06E5-43AD-9B4F-DECB15143176-46205-00000AA8CBE4B44B",
      "project_name": "New Project",
      "category_id": "AAF8E02-BFD8-06E5-43AD-9B4F-DECB15143176",
      "category_name": "Category",
      "full_name": "Category: New Project: A Task"
    }
  ],
  "start": 0,
  "limit": 500,
  "total": 11
}