Voxbi Cockpit APIs
All endpoints

List schedules for the tenant (user)

Returns a paginated list of active Tempus schedules (planning grids) for the PBX tenant. Only schedules whose owning department belongs to the tenant and whose is_active flag is true are returned, ordered alphabetically by name. Each item is a TempusScheduleSummary as serialized by the ScheduleResource, with its owning department embedded under the group key. Results can be narrowed to one or more departments with the filter[group_id] query parameter.

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.
filter[group_id] query · string
Comma-separated list of department (group) UUIDs to restrict results to. Only schedules belonging to these departments are returned.
page query · integer
Page number to retrieve.
per_page query · integer
Number of items per page.
accept header · string
example: application/json

Responses

Paginated list of active schedules for the tenant.
Response schema
dataarray<object>
Each item — Tempus schedule (planning grid) as serialized by the V1 `ScheduleResource`. A schedule defines the time-attendance planning view for a single Tempus department: which weekdays are shown, the visible time window each day, and the granularity of the time slots in the grid. It optionally pins a default status and sub-status applied to new entries. This object documents the exact keys returned by the resource, not the raw database columns. Several values are reshaped by the resource: `days_to_display` is a 7-character bitmask string derived from the stored `days_of_week` array, and `slot_duration` is an `HH:MM:SS` time string derived from the stored `slot_duration_minutes` integer. A schedule also defines WHO it is for, via `scope_type`: whole companies, one or more groups (departments), or a hand-picked list of employees. `groups` lists every group the schedule covers and `employees` everyone who may be booked into its slots; build an assignment picker from `employees`. The `group` object mirrors the schedule's anchor group and is only present when the `department` relation is loaded on the model; it is omitted otherwise. Both `group` and `group_id` are null when the scope resolves to no group at all, which happens for a company-scoped schedule whose people hold contracts carrying no department. The `mxvp_user_id` at the top level is the schedule's own tenant (Pbx) identifier and is always present.
id*string · uuid
Unique schedule identifier.
read-only
example: 550e8400-e29b-41d4-a716-446655440000
mxvp_user_id*string · uuid
Identifier of the Pbx (tenant) that owns this schedule. Read from the schedule itself, so it is always present, including for a schedule with no anchor group.
example: 550e8400-e29b-41d4-a716-446655440001
name*string
Human-readable name of the schedule.
example: Customer Support
group_id*string | null · uuid
Identifier of the Tempus department (planning group) this schedule is anchored to. Mirrors the model's `department_id`. Null when the schedule's scope resolves to no group, 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 and use `groups` for the full list.
example: 550e8400-e29b-41d4-a716-446655440002
days_to_display*string
Seven-character bitmask string indicating which weekdays are shown in the planning grid, ordered Monday through Sunday. Each position is "1" when the day is visible and "0" when it is hidden (for example "1111100" shows Monday to Friday). Derived from the stored `days_of_week` array.
example: 1111100
slot_min_time*string | null
Start of the visible time window for each day, as an `HH:MM` time string. Null when no start time is configured.
example: 08:00
slot_max_time*string | null
End of the visible time window for each day, as an `HH:MM` time string. Null when no end time is configured.
example: 18:00
slot_duration*string
Duration of a single time slot in the planning grid, as an `HH:MM:SS` time string. Derived from the stored `slot_duration_minutes` integer (for example 30 minutes becomes "00:30:00"); defaults to 30 minutes.
example: 00:30:00
status_id*string | null · uuid
Identifier of the default Tempus status applied to entries created in this schedule. Null when no default status is set.
example: 550e8400-e29b-41d4-a716-446655440003
sub_status_id*string | null · uuid
Identifier of the default Tempus sub-status applied to entries created in this schedule. Null when no default sub-status is set.
example: 550e8400-e29b-41d4-a716-446655440004
delete_date*string | null · date-time
Soft-delete timestamp for the schedule, as a `YYYY-MM-DD HH:MM:SS` string. Null when the schedule is active (not soft-deleted).
read-only
example: 2024-03-01 08:29:07
groupobject | null
The schedule's anchor Tempus department, included only when the `department` relation is loaded on the model; the key is omitted entirely otherwise. Null when the scope resolves to no group (see `group_id`).
idstring · uuid
Unique identifier of the department.
example: 550e8400-e29b-41d4-a716-446655440002
mxvp_user_idstring | null · uuid
Identifier of the Pbx (tenant) that owns the department. Null when no tenant is associated.
example: 550e8400-e29b-41d4-a716-446655440001
namestring
Display name of the department.
example: Sales Team
delete_datestring | null · date-time
Soft-delete timestamp for the department, as a `YYYY-MM-DD HH:MM:SS` string. Null when the department is active.
read-only
example: 2024-03-01 08:29:07
scope_type*string
Who the schedule is for: - `company`: everyone contracted with the selected companies. - `department`: everyone contracted in the selected groups (the default, and what a schedule created without a `scope_type` gets). - `employees`: exactly the selected people, who may come from different groups and different companies.
enum: company department employees
example: department
groups*array<object>
Every group (department) the schedule covers, resolved from its scope. One entry for a classic single-group schedule; empty when the scope resolves to no group. `filter[group_id]` on the list endpoint matches against this, not only against the anchor `group_id`.
id*string · uuid
Unique identifier of the group.
example: 550e8400-e29b-41d4-a716-446655440002
name*string | null
Display name of the group.
example: Sales Team
employees*array<object>
Everyone who may be booked into the schedule's slots, resolved from its scope. Build an assignment picker from this list; booking anybody outside it is refused with a 422. The group fields are those of the employee's most recent contract and are null when that contract carries no department.
id*string · uuid
Unique identifier of the employee.
example: 550e8400-e29b-41d4-a716-446655440010
full_name*string
Display name of the employee.
example: Jane Smith
group_id*string | null · uuid
Group on the employee's most recent contract, or null.
example: 550e8400-e29b-41d4-a716-446655440002
group_name*string | null
Name of that group, or null.
example: Sales Team
linksobject
firststring
The first page of the resource
example: http://localhost/api/v1/resources?page=1
laststring
The last page of the resource
example: http://localhost/api/v1/resources?page=1
prevnull | string
The previous page of the resource
nextnull | string
The next page of the resource
metaobject
current_pageinteger
The current page of the resource
≥ 1
example: 1
fromnull | integer
The first item of the resource
≥ 1
example: 1
last_pageinteger
The last page of the resource
≥ 1
example: 1
linksarray<object>
urlstring | null
The url of the resource (null for the boundary prev/next links)
example: http://localhost/api/v1/resources?page=1
labelstring
The label of the resource
example: first
activeboolean
The status of the resource
example: 1
pathstring
The path of the resource
example: http://localhost/api/v1/resources
per_pageinteger
The number of items per page of the resource
≥ 1
example: 15
tonull | integer
The last item of the resource
≥ 1
example: 1
totalinteger
The total number of items of the resource
≥ 0
example: 1
Authorization Token Missing. This error is returned when the authorization token is missing.
Response schema
errorstring
Error message
example: Authorization Token is missing
Data Not Found. This error is returned when the requested data is not found.
Response schema
messagearray<string>
[]string
Unprocessable Parameters. This error is returned when a parameter is not valid.
Response schema
messagestring
example: The given data was invalid.
errorsobject
filterarray<string>
[]string
sortarray<string>
[]string
pagearray<string>
[]string
per_pagearray<string>
[]string
get https://cockpit.voxbi.com/api/v1/{pbx_id}/schedules
Base URL
Request sample
curl -X GET 'https://cockpit.voxbi.com/api/v1/{pbx_id}/schedules' \
  -H 'Authorization: Bearer YOUR_TOKEN'
const response = await fetch('https://cockpit.voxbi.com/api/v1/{pbx_id}/schedules', {
  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}/schedules',
    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}/schedules', 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: 57
{}
"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
{}
"errors": {}
"filter": [],
"The filter field must be an array."
],
"sort": [],
"The sort field must be a string."
],
"page": [],
"The page field must be an integer."
],
"per_page": []
"The per page field must be an integer."
]
}
}
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