Voxbi Cockpit APIs
All endpoints

List employees with pending absence and home office requests (user)

Returns the employees, in scope of the authenticated validator, who have pending home office requests, absence requests, or absence removal requests awaiting validation. The authenticated user must be a Tempus employee in the given PBX; otherwise a 403 is returned.

The response is a hand-rolled envelope. The data object is keyed by the employee's telephony extension id. Each value carries the optional home_office, absence_requests, and absence_removals sections, populated only when the validator has scope for that module and pending records exist.

The queue is built from the approval rows addressed to the caller, so it accounts for approval chains: which step holds the request, watchers, and self-approval grants. Every request entry therefore also reports can_decide_now, watcher, step, and awaiting. Requests at a step below the caller's are listed with can_decide_now: false: visible, not yet theirs to decide.

home_office keeps its three date lists and adds a requests array, because a home office group is one row per day and the date lists cannot say which days the caller may act on.

Absence entries (absence_requests, absence_removals) also carry next_availability: when that employee is back if this request is approved, next to what the general next-availability answer says today. Home office does not — a home office day is governed by a weekly limit, not time off that moves an availability date.

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.
page query · integer
Page number of the employee list to return.
per_page query · integer
Number of employees to return per page.
accept header · string
example: application/json

Responses

OK. Employees with pending requests, keyed by extension id.
Response schema
data*object
Object keyed by employee extension id. Each value holds the pending request sections for that employee.
Free-form object
pagination*object
page*integer
example: 1
total_pages*integer
example: 3
total*integer
example: 24
per_page*integer
example: 10
Authorization Token Missing. This error is returned when the authorization token is missing.
Response schema
errorstring
Error message
example: Authorization Token is missing
Forbidden. The authenticated user is not part of the PBX or is not a Tempus employee in this tenant.
Response schema
messagestring
example: This action is unauthorized.
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}/validator/pending-requests
Base URL
Request sample
curl -X GET 'https://cockpit.voxbi.com/api/v1/{pbx_id}/validator/pending-requests' \
  -H 'Authorization: Bearer YOUR_TOKEN'
const response = await fetch('https://cockpit.voxbi.com/api/v1/{pbx_id}/validator/pending-requests', {
  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}/validator/pending-requests',
    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}/validator/pending-requests', false, $context);
$data = json_decode($response, true);
print_r($data);
{}
"data": {},
"1042": {}
"home_office": {},
"requested_days": [],
"2024-03-04"
],
"requested_removals": [],
"validated_dates": [],
"requests": []
{}
"id": "550e8400-e29b-41d4-a716-446655440030",
"dates": [],
"2024-03-04"
],
"sub_type": null,
"can_decide_now": true,
"watcher": false,
"step": {},
"position": 1,
"total": 2,
"name": "Team lead",
"status": "active",
"required": 1,
"mandatory": false
},
"awaiting": []
}
]
},
"absence_requests": [],
{}
"id": "550e8400-e29b-41d4-a716-446655440010",
"start_format": "04 Mar 09:00",
"end_format": "06 Mar 18:00",
"start": "2024-03-04",
"end": "2024-03-06",
"comment": "Family trip",
"requested_time": "24h",
"next_availability": {},
"if_approved": {},
"absent_from": "2024-03-04",
"next_available_date": "2024-03-07",
"next_available_at": null,
"available_now": true,
"in_past": false,
"extends_current_absence": false,
"message": "Off from 2024-03-04, available on 2024-03-07"
},
"current": {}
"next_available_date": null,
"message": null
}
},
"validators": [],
{}
"id": "550e8400-e29b-41d4-a716-446655440020",
"ext_id": "1099",
"comment": null,
"status": "pending"
}
],
"can_decide_now": false,
"watcher": false,
"step": {},
"position": 2,
"total": 2,
"name": "Management",
"status": "pending",
"required": 1,
"mandatory": false
},
"awaiting": []
"Muller Jonas"
]
}
],
"absence_removals": []
}
},
"pagination": {}
"page": 1,
"total_pages": 3,
"total": 24,
"per_page": 10
}
}
{}
"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.
{}
"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