Get a managed schedule (user)
Returns the detail of a single schedule with its department, status, and subStatus relations resolved, plus its scope: scopeType, the raw scope selection, the resolved departments, and the employees who may be booked into its slots. Reading is open to any authenticated user of the PBX; a schedule in another tenant returns 404.
HTTP:
bearerAuth
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>
pbx_id
path · string · uuid
*
UUID of the PBX tenant.
schedule
path · string · uuid
*
UUID of the schedule.
accept
header · string
example:
application/jsonResponses
The requested schedule.
Response schema
id*string · uuid
Unique schedule identifier.
read-only
example:
550e8400-e29b-41d4-a716-446655440000name*string
Human-readable name of the schedule template.
example:
Sales Team Weekly Plandepartmentobject | null
The schedule's anchor department. Only present when the `department` relation is
eager-loaded; otherwise this key is omitted.
Null when the scope resolves to no department at all, which happens for a
company-scoped schedule whose people hold contracts carrying no department. Such
a schedule is valid and fully usable: its people come from the company. Treat
this field as optional. Use `departments` for the full list of departments the
schedule covers.
idstring · uuid
Unique identifier of the department.
example:
550e8400-e29b-41d4-a716-446655440001namestring
Display name of the department.
example:
Customer SupportscopeType*string
Who the schedule is for:
- `company`: everyone contracted with the selected companies.
- `department`: everyone contracted in the selected departments (the default,
and what a schedule created without a `scope_type` gets).
- `employees`: exactly the selected people, who may come from different
departments and different companies.
enum:
company department employeesexample:
departmentscope*object
The raw selection the schedule was configured with. Only the list matching `scopeType` is populated; the other two are empty arrays. Use this to pre-populate an edit form so it round-trips.
companies*array<object>
Selected companies. Populated only when `scopeType` is `company`.
id*string · uuid
Unique identifier of the company.
example:
550e8400-e29b-41d4-a716-446655440020name*string
Display name of the company.
example:
Northwind Tradingdepartments*array<object>
Selected departments. Populated only when `scopeType` is `department`.
id*string · uuid
Unique identifier of the department.
example:
550e8400-e29b-41d4-a716-446655440001name*string
Display name of the department.
example:
Customer Supportemployees*array<object>
Selected employees. Populated only when `scopeType` is `employees`.
id*string · uuid
Unique identifier of the employee.
example:
550e8400-e29b-41d4-a716-446655440010fullName*string
Display name of the employee.
example:
Jane Smithdepartments*array<object>
Every department the schedule covers, resolved from the scope. For a company scope these are the companies' departments; for an employee scope the departments on the selected employees' contracts. An empty array when the scope resolves to no department.
id*string · uuid
Unique identifier of the department.
example:
550e8400-e29b-41d4-a716-446655440001name*string | null
Display name of the department.
example:
Customer Supportemployees*array<object>
Everyone the schedule may assign, resolved from the scope. This is the pool the slot assignment pickers and auto-assign draw from; booking anybody outside it is refused with a 422. The same list is available on its own from `GET /{pbx_id}/schedule-management/{schedule}/employees`.
Each item — One assignable person of a schedule: an employee the schedule's scope covers and
who may therefore be booked into its slots.
Only employees holding a contract that is active today are listed — someone who has
left, and someone whose contract has not started yet, is left out whatever the scope
type, including a hand-picked `employees` selection. The schedule's `scope` still
echoes the raw selection, so an edit form can round-trip what was picked.
The department is the one on the employee's most recent contract, supplied so a
picker can group or label its options when the schedule spans more than one
department. Both department fields are null for an employee whose contract carries
no department, which is normal for a company-scoped schedule.
id*string · uuid
Unique identifier of the employee.
example:
550e8400-e29b-41d4-a716-446655440010fullName*string
Display name of the employee, ordered according to the tenant's first-name or last-name-first preference.
example:
Jane SmithdepartmentId*string | null · uuid
Identifier of the department on the employee's most recent contract. Null when that contract carries no department.
example:
550e8400-e29b-41d4-a716-446655440002departmentName*string | null
Display name of the department on the employee's most recent contract. Null when that contract carries no department.
example:
Customer SupportdaysOfWeek*array<integer>
Weekdays covered by this schedule, stored as ISO 8601 weekday numbers
(1 = Monday through 7 = Sunday). Returned as an empty array when no days
are configured.
[]integer · int32
ISO 8601 weekday number (1 = Monday, 7 = Sunday).
enum:
1 2 3 4 5 6 7example:
1dayStartTime*string | null
Start of the daily working window in `HH:MM` 24-hour format (local
wall-clock, no timezone). Null when no start time is configured.
example:
09:00dayEndTime*string | null
End of the daily working window in `HH:MM` 24-hour format (local
wall-clock, no timezone). Null when no end time is configured.
example:
17:30slotDurationMinutes*integer · int32
Length in minutes of each bookable slot within the daily window. Defaults
to the configured Tempus slot duration (typically 30) when not set.
example:
30statusobject | null
Default status assigned to entries generated from this schedule. Only
present when the `status` relation is eager-loaded; null when loaded but
no default status is set, and omitted entirely when the relation is not
loaded.
idstring · uuid
Unique identifier of the status.
example:
550e8400-e29b-41d4-a716-446655440002namestring
Display name of the status.
example:
AvailablesubStatusobject | null
Default sub-status assigned to entries generated from this schedule. Only
present when the `subStatus` relation is eager-loaded; null when loaded
but no default sub-status is set, and omitted entirely when the relation
is not loaded.
idstring · uuid
Unique identifier of the sub-status.
example:
550e8400-e29b-41d4-a716-446655440003namestring
Display name of the sub-status.
example:
On BreakstatusFilters*array<string>
Identifiers of the statuses that are selectable on this schedule's grid.
Used to restrict which statuses planners may apply. Returned as an empty
array when no filter is configured (all statuses allowed).
[]string · uuid
Identifier of an allowed status.
example:
550e8400-e29b-41d4-a716-446655440002isActive*boolean
Whether the schedule is active. Inactive schedules are retained but not
used to generate new planning entries.
example:
1createdAt*string | null · date-time
ISO 8601 timestamp when the schedule was created.
read-only
example:
2024-03-01T08:29:07+00:00updatedAt*string | null · date-time
ISO 8601 timestamp when the schedule was last updated.
read-only
example:
2024-03-01T08:29:07+00:00Authorization Token Missing. This error is returned when the authorization token is missing.
Response schema
errorstring
Error message
example:
Authorization Token is missingThe authenticated user is outside the requested tenant.
Response schema
No response body.
Data Not Found. This error is returned when the requested data is not found.
Response schema
messagearray<string>
[]string
get
https://cockpit.voxbi.com/api/v1/{pbx_id}/schedule-management/{schedule}
Base URL
Request sample
curl -X GET 'https://cockpit.voxbi.com/api/v1/{pbx_id}/schedule-management/{schedule}' \
-H 'Authorization: Bearer YOUR_TOKEN'
const response = await fetch('https://cockpit.voxbi.com/api/v1/{pbx_id}/schedule-management/{schedule}', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${YOUR_TOKEN}`,
},
});
const data = await response.json();
console.log(data);
import requests
response = requests.get('https://cockpit.voxbi.com/api/v1/{pbx_id}/schedule-management/{schedule}',
headers={'Authorization': f'Bearer {YOUR_TOKEN}'}
)
response.raise_for_status()
data = response.json()
print(data)
<?php
$context = stream_context_create([
'http' => [
'method' => 'GET',
'header' => "Content-Type: application/json\r\nAuthorization: Bearer YOUR_TOKEN",
],
]);
$response = file_get_contents('https://cockpit.voxbi.com/api/v1/{pbx_id}/schedule-management/{schedule}', false, $context);
$data = json_decode($response, true);
print_r($data);
No example for this status.
{ … }
"error": "Authorization Token is missing"
}
Cache-Control
string
example:
private, must-revalidate
Connection
string
example:
keep-alive
Content-Type
string
example:
application/json
Vary
string
example:
Origin
X-RateLimit-Limit
integer
Max requests allowed in the current rate-limit window.
example:
60
X-RateLimit-Remaining
integer
Requests remaining in the current rate-limit window.
example:
57No example for this status.
{ … }
"message": [ … ]
"Data not found"
]
}
Cache-Control
string
example:
private, must-revalidate
Connection
string
example:
keep-alive
Content-Type
string
example:
application/json
Vary
string
example:
Origin
X-RateLimit-Limit
integer
Max requests allowed in the current rate-limit window.
example:
60
X-RateLimit-Remaining
integer
Requests remaining in the current rate-limit window.
example:
57