Build the interactive calendar for an employee (user)
Builds the interactive home-office and absence calendar for a single Tempus
employee (ext_id) over a from/to month-year window within the given PBX
tenant. The window must be valid (the to period must be greater than or
equal to from) and may not exceed 24 months.
The authenticated user must belong to the same PBX tenant. Viewing another
employee's calendar requires absence-validation or home-office-validation
scope over that employee; otherwise a 403 is returned. The response is a
JSON object whose data payload is assembled by the calendar builder and
varies with the requested window.
User bearer token. Default authentication for customer-facing endpoints.
Obtain a token by calling POST /login with your credentials, then send it
on every subsequent request as Authorization: Bearer <token>. The token
inherits the permissions and PBX scope of the authenticated user.
- HTTP Authorization Scheme
bearer- Bearer format
Bearer <token>
application/jsonRequest body · required
550e8400-e29b-41d4-a716-446655440001from*object
20243to*object
20246Responses
month_calendarsobject
dataobject
Authorization Token is missingYou are not authorized to view this calendar.messagearray<string>
The given data was invalid.errorsobject
filterarray<string>
sortarray<string>
pagearray<string>
per_pagearray<string>
https://cockpit.voxbi.com/api/v1/{pbx_id}/interactive-calendar
curl -X POST 'https://cockpit.voxbi.com/api/v1/{pbx_id}/interactive-calendar' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
--data '{"ext_id":"550e8400-e29b-41d4-a716-446655440001","from":{"year":2024,"month":3},"to":{"year":2024,"month":6}}'
const response = await fetch('https://cockpit.voxbi.com/api/v1/{pbx_id}/interactive-calendar', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${YOUR_TOKEN}`,
},
body: JSON.stringify({
"ext_id": "550e8400-e29b-41d4-a716-446655440001",
"from": {
"year": 2024,
"month": 3
},
"to": {
"year": 2024,
"month": 6
}
}),
});
const data = await response.json();
console.log(data);
import requests
response = requests.post('https://cockpit.voxbi.com/api/v1/{pbx_id}/interactive-calendar',
headers={'Authorization': f'Bearer {YOUR_TOKEN}'},
json={
"ext_id": "550e8400-e29b-41d4-a716-446655440001",
"from": {
"year": 2024,
"month": 3
},
"to": {
"year": 2024,
"month": 6
}
}
)
response.raise_for_status()
data = response.json()
print(data)
<?php
$context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/json\r\nAuthorization: Bearer YOUR_TOKEN",
'content' => '{
\"ext_id\": \"550e8400-e29b-41d4-a716-446655440001\",
\"from\": {
\"year\": 2024,
\"month\": 3
},
\"to\": {
\"year\": 2024,
\"month\": 6
}
}',
],
]);
$response = file_get_contents('https://cockpit.voxbi.com/api/v1/{pbx_id}/interactive-calendar', false, $context);
$data = json_decode($response, true);
print_r($data);
{ … }
"from": { … },
"to": { … }
{ … }
"month_calendars": { … },
"2026-07": { … }
"data": { … },
"2026-07-14": { … }
"entry": { … },
"entries": [ … ]
{ … }
"weeks": [ … ]
{ … }
"dates": [ … ]
"data": { … }
"public_holidays": { … },
"550e8400-e29b-41d4-a716-446655440000": { … }
"home_office_module": { … },
"calendar": { … },
"approved_days": [ … ],
"requested_days": [ … ],
"summary": { … },
"2026": { … }
"absence_module": { … },
"summary": { … }
"2026": { … }
"compiled_workshifts": { … },
{ … }
private, must-revalidatekeep-aliveapplication/jsonOrigin6057{ … }
"message": [ … ]
private, must-revalidatekeep-aliveapplication/jsonOrigin6057{ … }
"errors": { … }
"filter": [ … ],
"sort": [ … ],
"page": [ … ],
"per_page": [ … ]
private, must-revalidatekeep-aliveapplication/jsonOrigin6057