Get my running time tracker (v2)
Returns the calling user's running time tracker, or null when none is running.
Looks up the caller's trackers with status ActiveTimeTracking, newest (highest TimeTrackerId) first, and returns the first one. The user is taken from the token — there is no user parameter. $expand fills the nested Task, AbsenceCode and/or TimeRegistration objects.
Use it to:
- Restore a timer UI after reload: what is being tracked, since when, and the TimeTrackerId to stop it.
Behaviour:
- Idempotent.
- Safe to retry.
- Changes are visible to the next read immediately.
Next: POST /v2/time-tracker/stop/{timeTrackerId}
See also: GET /v1/time-tracker/active-time-tracker
Not yet documented: examples (populated); response → variants.
curl -X GET "https://app3.timelog.com/your-account/api/v2/time-tracker/active?$expand=example_string&$page=1&$pagesize=25" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN"
import requests
import json
url = "https://app3.timelog.com/your-account/api/v2/time-tracker/active?$expand=example_string&$page=1&$pagesize=25"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("https://app3.timelog.com/your-account/api/v2/time-tracker/active?$expand=example_string&$page=1&$pagesize=25", {
method: "GET",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_TOKEN"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://app3.timelog.com/your-account/api/v2/time-tracker/active?$expand=example_string&$page=1&$pagesize=25", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://app3.timelog.com/your-account/api/v2/time-tracker/active?$expand=example_string&$page=1&$pagesize=25')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
response = http.request(request)
puts response.body
{
"Properties": {
"TimeTrackerId": 123,
"Id": "123e4567-e89b-12d3-a456-426614174000",
"UserId": 123,
"Date": "2024-12-25T10:00:00Z",
"StartTime": "2024-12-25T10:00:00Z",
"EntityType": "Task",
"EntityId": "null",
"Task": "null",
"AbsenceCode": "null",
"TimeRegistrationId": "null",
"TimeRegistration": "null",
"Comment": "example_string",
"Minute": 42,
"BillableMinute": 42,
"IsBillable": "null",
"TimeTrackerStatus": "ActiveTimeTracking",
"MonthlyPeriod": "null",
"AdditionalTextField": "null",
"Factor": 3.14
},
"Links": [
{
"Href": "example_string",
"Rel": "example_string"
}
],
"Actions": [
{}
]
}
"null"
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
{
"error": "Internal Server Error",
"message": "An unexpected error occurred on the server",
"code": 500,
"requestId": "req_1234567890"
}
/v2/time-tracker/active
Target server for requests. Edit to use your own host.
OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp).
The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user.
> Not yet documented: how to obtain a token.
> Not yet documented: token lifetime.
Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp).
The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user.
> Not yet documented: how to obtain a token.
> Not yet documented: token lifetime.task, absenceCode and/or timeRegistration: fills the nested object (Task only for task trackers, AbsenceCode only for absence trackers, TimeRegistration only when linked).
Several values: one string, separated by ,.
Not meant as a feature — normally omit.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp).
The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user.
Not yet documented: how to obtain a token.
Not yet documented: token lifetime.
Query Parameters
task, absenceCode and/or timeRegistration: fills the nested object (Task only for task trackers, AbsenceCode only for absence trackers, TimeRegistration only when linked).
Several values: one string, separated by ,.
Not meant as a feature — normally omit.
Responses
The caller's running time tracker (stopwatch) in the REST v2 shape. Same data as TimeTrackerRead, with v2 property casing, string enums and an optional nested TimeRegistration (the registration the tracker is linked to, filled with $expand=timeRegistration).