Read one request's approval trail (user)
The whole approval trail for one request: where it got to, and how it got there.
progress is the ladder as it stands now - the same block the queues and the
own-requests feed carry. history is what happened: every approval, rejection,
restart and administrative close, with who acted and at which step.
Fetched per request rather than shipped with every row of a list, because a list nobody drills into would pay for the history of every entry, and both halves are wanted together exactly when somebody opens one request. It is also the only way to explain a settled request: once decided, a request drops out of every queue.
Readable by the request's own employee and by anyone its chain asks to decide it. Anybody else gets 403.
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>
absences home-office time-point-corrections application/jsonResponses
absences home-office time-point-correctionsabsences550e8400-e29b-41d4-a716-446655440010approvedprogress*object | null
Team lead31waiting_on*array<object>
550e8400-e29b-41d4-a716-446655440031Muller Jonasapproved_by*array<object>
550e8400-e29b-41d4-a716-446655440030Lemaire Faridnext_stepobject | null
HR2steps*array<object>
1Team leadpending active completed bypassed rejectedcompletedApproved by Lemaire Farid11validatorsarray<object>
550e8400-e29b-41d4-a716-446655440030Lemaire Faridpending accepted rejectedacceptedsupervisors*array<object>
550e8400-e29b-41d4-a716-446655440032Weber Inespending accepted rejectedpending1history*array<object>
2026-03-02 09:14approvedpositiveLemaire Farid approved at Team leadLemaire FaridTeam leadFine by mesupersededarray<object>
Weber InesacceptedAuthorization Token is missinghttps://cockpit.voxbi.com/api/v1/v2/{pbx}/requests/{kind}/{id}/trail
curl -X GET 'https://cockpit.voxbi.com/api/v1/v2/{pbx}/requests/{kind}/{id}/trail' \
-H 'Authorization: Bearer YOUR_TOKEN'
const response = await fetch('https://cockpit.voxbi.com/api/v1/v2/{pbx}/requests/{kind}/{id}/trail', {
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/v2/{pbx}/requests/{kind}/{id}/trail',
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/v2/{pbx}/requests/{kind}/{id}/trail', false, $context);
$data = json_decode($response, true);
print_r($data);
{ … }
private, must-revalidatekeep-aliveapplication/jsonOrigin6057