Get my vacation balance (Insights widget)
Insights endpoint vacation-calculation-widget-data. Help text: 'The vacation balance is your current status of days available for vacation. The end of month vacation balance, is calculated by taking the current balance, adding the accrued vacation, and subtracting taken and planned vacation. Vacation, Additional Vacation Days). Unit: days, as the help text states. Presented as the caller's OWN balance; the frontend sends no query parameter and the consumer declares no employee selector. PASS-THROUGH PROXY. Insights' HTTP status, headers and body are returned to the caller unchanged. The controller says it exists only so the React frontend can reach Insights and must not be used for anything else.
Use it to:
- Show an employee their projected vacation balance month by month
Not for:
- Vacation / absence accounting or payroll export — use the absence and vacation APIs
- Anything outside the front-page widget (controller comment)
Behaviour:
- Read-after-write consistency: not yet documented.
Not yet documented: behaviour; examples; purpose → description; response → default ordering; response → empty result; response → pagination; response → success.
curl -X GET "https://app3.timelog.com/your-account/api/v2/insights-service/vacation-calculation" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN"
import requests
import json
url = "https://app3.timelog.com/your-account/api/v2/insights-service/vacation-calculation"
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/insights-service/vacation-calculation", {
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/insights-service/vacation-calculation", 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/insights-service/vacation-calculation')
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": {
"type": "example_string",
"width": 3.14,
"height": 3.14,
"sortOrder": 3.14,
"data": {
"previousMonthTotals": {},
"assignedVacations": {},
"absences": {},
"availableTimeOff": {},
"previousMonthTotalsDetails": {},
"assignedVacationsDetails": {},
"absencesDetails": {},
"availableTimeOffDetails": {}
}
},
"Links": [
{
"Href": "example_string",
"Rel": "example_string"
}
],
"Actions": [
{}
]
}
{
"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"
}
{
"Code": 42,
"Message": "example_string",
"Details": [
"null"
],
"Parameters": "null",
"Url": "example_string"
}
/v2/insights-service/vacation-calculation
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.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.
Responses
Vacation balance widget for the CALLER (help text: 'your current status of days available for vacation'). Not paged; data is one object of month-keyed rows. CONSUMER-DECLARED SHAPE. Meanings come from the frontend's use and the product's widget help text, not from the producer.
Not yet documented: source type.