Add-a-missing-timepoint correction (user)
Creates a pending correction that requests a BRAND-NEW timepoint: there is
no existing timepoint, so timepoint_id must be omitted. On validator
acceptance a timepoint is created (never a duplicate). Self-scoped: the
authenticated user must be the {employee_id}.
An employee may hold several pending "add" corrections at once — one per moment they need recorded — and raising one does not affect the others. (It used to cancel every prior pending add, which capped them at one.) The validator queues list them oldest requested time first, which is the order they have to be decided in: accepting one re-times the entry beside it.
Two pending adds may ask for the same new_time; that is accepted here and
settled at approval, where the second one to be accepted is refused with
422 because an employee cannot have two timepoints sharing a start.
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>
Request body · required
2026-03-02 08:30:00550e8400-e29b-41d4-a716-446655440010Responses
550e8400-e29b-41d4-a716-446655440000550e8400-e29b-41d4-a716-446655440001550e8400-e29b-41d4-a716-446655440002550e8400-e29b-41d4-a716-446655440003550e8400-e29b-41d4-a716-446655440004550e8400-e29b-41d4-a716-446655440005550e8400-e29b-41d4-a716-446655440006550e8400-e29b-41d4-a716-446655440007550e8400-e29b-41d4-a716-446655440010550e8400-e29b-41d4-a716-446655440011old_locationobject | null
550e8400-e29b-41d4-a716-446655440011HQ Luxembourg49.60086.133150new_locationobject | null
550e8400-e29b-41d4-a716-446655440010Remote office49.6126.132002024-03-01T09:00:00.000000Z2024-03-01T08:30:00.000000ZForgot to clock out at the end of the shift.Manual entry approved by supervisor.pending accepted rejected canceled rejected_closedpending2024-03-01T08:29:07.000000Z2024-03-01T08:29:07.000000Z10accepted_by*array<object>
550e8400-e29b-41d4-a716-446655440004pending accepted rejectedpendingtimepointobject
550e8400-e29b-41d4-a716-446655440002550e8400-e29b-41d4-a716-446655440001550e8400-e29b-41d4-a716-446655440003550e8400-e29b-41d4-a716-4466554400042024-03-01T08:30:00.000000Zlegacy-tp-10293statusobject
550e8400-e29b-41d4-a716-446655440004550e8400-e29b-41d4-a716-446655440001Workingla la-briefcase#ffffff#2e7d32status-working0 101clock_inlegacy-status-7substatusesarray<object>
550e8400-e29b-41d4-a716-446655440005550e8400-e29b-41d4-a716-446655440001Client meetingla la-users#000000#bbdefbsubstatus-meeting0 10Authorization Token is missingThe 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}/corrections/add
curl -X POST 'https://cockpit.voxbi.com/api/v1/{pbx_id}/user/{employee_id}/corrections/add' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
--data '{"new_status_id":"550e8400-e29b-41d4-a716-446655440004","new_time":"2026-03-02 08:30:00","new_location_id":"550e8400-e29b-41d4-a716-446655440010","correction_comment":"Forgot to clock in."}'
const response = await fetch('https://cockpit.voxbi.com/api/v1/{pbx_id}/user/{employee_id}/corrections/add', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${YOUR_TOKEN}`,
},
body: JSON.stringify({
"new_status_id": "550e8400-e29b-41d4-a716-446655440004",
"new_time": "2026-03-02 08:30:00",
"new_location_id": "550e8400-e29b-41d4-a716-446655440010",
"correction_comment": "Forgot to clock in."
}),
});
const data = await response.json();
console.log(data);
import requests
response = requests.post('https://cockpit.voxbi.com/api/v1/{pbx_id}/user/{employee_id}/corrections/add',
headers={'Authorization': f'Bearer {YOUR_TOKEN}'},
json={
"new_status_id": "550e8400-e29b-41d4-a716-446655440004",
"new_time": "2026-03-02 08:30:00",
"new_location_id": "550e8400-e29b-41d4-a716-446655440010",
"correction_comment": "Forgot to clock in."
}
)
response.raise_for_status()
data = response.json()
print(data)
<?php
$context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => "Content-Type: application/json\r\nAuthorization: Bearer YOUR_TOKEN",
'content' => '{
\"new_status_id\": \"550e8400-e29b-41d4-a716-446655440004\",
\"new_time\": \"2026-03-02 08:30:00\",
\"new_location_id\": \"550e8400-e29b-41d4-a716-446655440010\",
\"correction_comment\": \"Forgot to clock in.\"
}',
],
]);
$response = file_get_contents('https://cockpit.voxbi.com/api/v1/{pbx_id}/user/{employee_id}/corrections/add', false, $context);
$data = json_decode($response, true);
print_r($data);
{ … }
{ … }
private, must-revalidatekeep-aliveapplication/jsonOrigin6057{ … }
"errors": { … }
"filter": [ … ],
"sort": [ … ],
"page": [ … ],
"per_page": [ … ]
private, must-revalidatekeep-aliveapplication/jsonOrigin6057