Voxbi Cockpit APIs
All endpoints

List Tempus employees for the tenant (user)

Returns a paginated list of Tempus employees (time-and-attendance records) belonging to the PBX tenant identified by pbx_id. Each item is serialized by the TempusUserResource and combines the TempusEmployee record with data resolved from its linked Voxbi user account and first telephony extension. The authenticated user must have an associated employee record and must belong to the requested PBX, otherwise the request is rejected with 403. Results may be filtered by department via filter[group_id] (matched through employee contracts) and are sorted by id by default.

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. Employees are matched through their contracts' department assignment. Each value must be a valid UUID or the request is rejected with 422.
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 Tempus employees.
Response schema
dataarray<object>
Each item — Tempus user (time-and-attendance employee) as serialized by the V1 `TempusUserResource`. Each record represents one `TempusEmployee` belonging to a single Pbx (tenant) and is linked to an optional Voxbi `User` account, from which the email, name, and telephony extension are resolved. This object documents the exact keys returned by the resource, not the raw database columns. Name fields fall back to the linked user's values when the employee record itself does not carry them: `first_name`, `last_name`, and `full_name` are taken from the employee where set, otherwise from the linked user. `email` and `ext_number` are always sourced from the linked user and its first extension, so they are null when no user (or no extension) is linked. `ext_id` is resolved through a helper: it is the identifier of the extension belonging to the linked user when one exists, and otherwise falls back to the employee's own identifier. It is therefore always a non-null string. The `soop_*` fields are legacy placeholders carried over from the previous time-tracking system (SOOP). They are currently always null and are returned only for backward compatibility with older integrations.
ext_id*string · uuid
Identifier used to address this user on the telephony stack. Resolves to the identifier of the extension owned by the linked Voxbi user when one exists; otherwise it falls back to the Tempus employee identifier. Always present.
read-only
example: 550e8400-e29b-41d4-a716-446655440000
pbx_id*string · uuid
Identifier of the Pbx (tenant) that owns this Tempus employee.
example: 550e8400-e29b-41d4-a716-446655440001
ext_number*string | null
Dialable extension number of the linked user's first extension. Null when the employee has no linked user or that user has no extension.
example: 101
first_name*string | null
Given name of the employee. Taken from the employee record when set, otherwise from the linked Voxbi user. Null when neither provides a value.
example: Jane
last_name*string | null
Family name of the employee. Taken from the employee record when set, otherwise from the linked Voxbi user. Null when neither provides a value.
example: Smith
full_name*string | null
Computed display name of the employee. Derived from the employee's first and last name (ordered per the Pbx name-display preference), falling back to the linked user's name. Null when no name is available.
read-only
example: Jane Smith
email*string | null · email
Email address of the linked Voxbi user, used as that user's login identifier. Null when the employee has no linked user.
example: jane.smith@example.com
soop_enable*integer | null · int32
Legacy SOOP badge-enabled flag (1 enabled, 0 disabled), retained for backward compatibility. Currently always null.
soop_name*string | null
Legacy SOOP badge name, retained for backward compatibility. Currently always null.
soop_badge*string | null
Legacy SOOP badge data (the encoded badge value), retained for backward compatibility. Currently always null.
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
The authenticated user has no associated employee record, or does not belong to the requested PBX 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
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}/users
Base URL
Request sample
curl -X GET 'https://cockpit.voxbi.com/api/v1/{pbx_id}/users' \
  -H 'Authorization: Bearer YOUR_TOKEN'
const response = await fetch('https://cockpit.voxbi.com/api/v1/{pbx_id}/users', {
  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}/users',
    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}/users', 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
No 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
{}
"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