List timepoints for an employee (user)
Returns a paginated list of clock-in/clock-out timepoints recorded for a single employee, newest first. The authenticated user must have access to the PBX tenant and be authorized to view the target employee's records. An optional date window can be applied with filter[from] and filter[to]; when both are supplied, filter[from] must not be after filter[to] and the range may not exceed 100 days, otherwise the request is rejected with 422. Each item is returned in the legacy timepoint shape (id, ext_id, time, status, comment, GPS coordinates, and an optional sub-status).
Three independent pieces of location data are returned and must not be conflated: location is the configured location record the employee selected; gpsLat / gpsLong / gpsTimestamp and the normalised device_gps block are where the device said it was, stored exactly as the client reported it; location_check compares the two and carries the geofence verdict (match / mismatch / unknown). The device coordinates are never replaced by the coordinates configured on the location.
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>
application/jsonResponses
dataarray<object>
550e8400-e29b-41d4-a716-446655440000EMP-104722024-03-01T08:29:07Zstatus*object
550e8400-e29b-41d4-a716-446655440001Workingla la-briefcase#ffffff#2e7d32status-working0 100 11Started shift on site-73.985740.74842024-03-01T08:29:05Zdevice_gpsobject | null
49.956.13312.52026-07-07T10:07:39+00:001783418859289location_checkobject | null
550e8400-e29b-41d4-a716-44665544001049.60086.13315038957match mismatch unknownmismatchno_device_gps no_location location_without_coordinates no_geofence_radius nullsubstatus*object | null
550e8400-e29b-41d4-a716-446655440002Lunch breakla la-coffee#000000#fff3e0substatus-lunch0 10linksobject
http://localhost/api/v1/resources?page=1http://localhost/api/v1/resources?page=1metaobject
111linksarray<object>
http://localhost/api/v1/resources?page=1first1http://localhost/api/v1/resources1511Authorization Token is missingmessagearray<string>
The given data was invalid.errorsobject
filterarray<string>
sortarray<string>
pagearray<string>
per_pagearray<string>
https://cockpit.voxbi.com/api/v1/{pbx_id}/user/{employee_id}/timepoints
curl -X GET 'https://cockpit.voxbi.com/api/v1/{pbx_id}/user/{employee_id}/timepoints' \
-H 'Authorization: Bearer YOUR_TOKEN'
const response = await fetch('https://cockpit.voxbi.com/api/v1/{pbx_id}/user/{employee_id}/timepoints', {
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}/user/{employee_id}/timepoints',
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}/user/{employee_id}/timepoints', false, $context);
$data = json_decode($response, true);
print_r($data);
{ … }
private, must-revalidatekeep-aliveapplication/jsonOrigin6057{ … }
"message": [ … ]
private, must-revalidatekeep-aliveapplication/jsonOrigin6057{ … }
"errors": { … }
"filter": [ … ],
"sort": [ … ],
"page": [ … ],
"per_page": [ … ]
private, must-revalidatekeep-aliveapplication/jsonOrigin6057