Skip to content

List everything waiting on you to decide (user)

Every pending request this employee is asked to decide, of every type, in one date-ordered feed: absence, illness and special leave, home office day-rows, time-point corrections, and requests to remove already approved days. The inbox view, for a client that pages one list rather than one list per type.

Read off the approval rows addressed to them, so approval chains are honoured exactly as the decision endpoints honour them: which step holds the request, supervisors, self-approval grants, and restarts. Requests at a step below theirs are included with can_decide_now: false, so a validator further up a chain sees what is coming rather than having it appear from nowhere.

Two payload shapes share the feed, so each entry names its own with kind and carries the request nested under request. Paging is across the merged feed, so per_page: 10 returns the ten newest entries whatever their types, rather than ten of each.

Your own employee record only: another employee's id returns 403, since a queue is built from rows addressed to one person.

Narrow it with filter[kind][] when a screen shows one type. There used to be three sibling paths as well (/absences, /home-office, /time-point-corrections); they were dropped because the filter is applied server-side before pagination, so they only offered a second way to ask the same question. GET /v2/{pbx}/employee/{employee}/validator reports how many are waiting in each type.

Note the entry shape if you used those siblings: they returned the request's fields at the top level, while this nests them under request alongside kind. There were no v2 consumers, so there is no compatibility shim.

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 path · string · uuid *
UUID of the PBX tenant. Must be the tenant the token belongs to; anything else is refused with 403 rather than answered from another tenant.
employee path · string · uuid *
UUID of the Tempus employee whose queue this is. Must be the caller's own employee record: a queue is built from the approval rows addressed to one person, so another employee's id is refused rather than quietly answered with your own.
page query · integer
Page number to return.
per_page query · integer
Number of entries per page. Defaults to `100`, maximum `5000`. A value above the maximum is rejected with `422` rather than silently truncated.
filter[requester_id] query · string · uuid
Narrow the queue to one person who raised requests. Named `requester_id` rather than `employee_id` because the employee in the path is the validator: these routes have two employees in play. A requester you hold no rows on yields an empty page rather than a 403, since nothing was hidden from you.
filter[kind] query · array
Limit the feed to these request kinds. Omit for all three, which is what a plain "my requests" screen wants.
accept header · string
example: application/json

Responses

OK. Paginated requests of every type waiting on this employee.
Response schema
data*array<object>
[]object
pagination*object
page*integer
example: 1
total_pages*integer
example: 4
total*integer
example: 37
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 caller is outside this PBX, or asked for an employee record that is not their own.
Response schema
messagestring
example: You do not have access to this PBX.
Not found. No such employee in this PBX.
Response schema
messagestring
example: User not found.
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/v2/{pbx}/employee/{employee}/validator/queue
Base URL
Request sample
curl -X GET 'https://cockpit.voxbi.com/api/v1/v2/{pbx}/employee/{employee}/validator/queue' \
  -H 'Authorization: Bearer YOUR_TOKEN'
const response = await fetch('https://cockpit.voxbi.com/api/v1/v2/{pbx}/employee/{employee}/validator/queue', {
  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}/employee/{employee}/validator/queue',
    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}/employee/{employee}/validator/queue', false, $context);
$data = json_decode($response, true);
print_r($data);
{ … }
"data": [ … ],
{ … },
"kind": "absences",
"request": { … },
"id": "550e8400-e29b-41d4-a716-446655440010",
"type": "absence",
"sub_type": null,
"status": "pending",
"employee_id": "550e8400-e29b-41d4-a716-446655440001",
"employee": { … },
"employee_id": "550e8400-e29b-41d4-a716-446655440001",
"first_name": "Anna",
"last_name": "Muller",
"name": "Muller Anna"
},
"requested_by": null,
"company_id": "550e8400-e29b-41d4-a716-446655440005",
"start": "2026-03-04T00:00:00+00:00",
"end": "2026-03-06T00:00:00+00:00",
"dates": [ … ],
"2026-03-04",
"2026-03-05",
"2026-03-06"
],
"requested_time": { … },
"2026-03-04": 28800
},
"requested_seconds": 86400,
"comment": "Family trip",
"created": "2026-03-01T09:12:00+00:00",
"modified": "2026-03-01T09:12:00+00:00"
},
"can_decide_now": true,
"supervisor": false,
"step": { … },
"position": 1,
"total": 2,
"name": "Team lead",
"status": "active",
"required": 1,
"mandatory": false
},
"awaiting": []
},
{ … },
"kind": "time-point-corrections",
"request": { … },
"id": "550e8400-e29b-41d4-a716-446655440031",
"status": "pending",
"employee_id": "550e8400-e29b-41d4-a716-446655440002",
"employee": { … },
"employee_id": "550e8400-e29b-41d4-a716-446655440002",
"first_name": "Farid",
"last_name": "Lemaire",
"name": "Lemaire Farid"
},
"timepoint_id": "550e8400-e29b-41d4-a716-446655440040",
"old_status": { … },
"id": "550e8400-e29b-41d4-a716-446655440050",
"name": "Working"
},
"new_status": { … },
"id": "550e8400-e29b-41d4-a716-446655440050",
"name": "Working"
},
"old_sub_status": null,
"new_sub_status": null,
"old_location": null,
"new_location": null,
"old_time": "2026-02-28T08:31:00+00:00",
"new_time": "2026-02-28T08:00:00+00:00",
"correction_comment": "Badge reader was down",
"new_comment": null,
"created": "2026-02-28T17:04:00+00:00"
},
"can_decide_now": false,
"supervisor": false,
"step": { … },
"position": 2,
"total": 2,
"name": "HR",
"status": "pending",
"required": 1,
"mandatory": false
},
"awaiting": [ … ]
{ … }
"employee_id": "550e8400-e29b-41d4-a716-446655440031",
"name": "Muller Jonas"
}
]
},
{ … }
"kind": "home-office",
"request": { … },
"id": "550e8400-e29b-41d4-a716-446655440012",
"type": "home_office",
"sub_type": null,
"status": "pending",
"employee_id": "550e8400-e29b-41d4-a716-446655440001",
"requested_by": null,
"company_id": "550e8400-e29b-41d4-a716-446655440005",
"start": "2026-02-27T00:00:00+00:00",
"end": "2026-02-27T00:00:00+00:00",
"dates": [ … ],
"2026-02-27"
],
"requested_time": { … },
"2026-02-27": 28800
},
"requested_seconds": 28800,
"comment": null,
"created": "2026-02-26T11:40:00+00:00",
"modified": "2026-02-26T11:40:00+00:00"
},
"can_decide_now": true,
"supervisor": true,
"step": null,
"awaiting": []
}
],
"pagination": { … }
"page": 1,
"total_pages": 4,
"total": 37,
"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.
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