Коротка відповідь
Endpoint POST /api/v1/tests/reports/search повертає список звітів з тестування із застосуванням поточного збереженого фільтра. Усі поля request body необов’язкові; без body API використовує page = 0, size = 50, view = all. Для доступу потрібен Bearer token зі scope tests.read, а lang може керувати мовою локалізованих ресурсів тестування.
Який endpoint використовується?
Використовується POST /api/v1/tests/reports/search. Endpoint повертає сторінку звітів з тестування у межах компанії з урахуванням поточного збереженого фільтра.
| Параметр | Значення |
|---|---|
| Method | POST |
| Endpoint | /api/v1/tests/reports/search |
| Base URL | [https://smartway.pro](https://smartway.pro) |
| Auth | Bearer token |
| Content-Type | application/json |
Для чого використовується цей API endpoint?
Endpoint використовується для отримання звітів з тестування компанії з пагінацією, режимом представлення та пошуком по ПІБ. Його використовують HR-інтеграції, backend-сервіси та технічні адміністратори для побудови списків звітів і переходу до PDF-звітів.
Які передумови потрібні перед виконанням запиту?
-
Потрібен Bearer token з company context.
-
Token має містити scope
tests.read. -
Перед отриманням потрібних даних потрібно врахувати поточний збережений фільтр або скинути його.
| Передумова | Опис | Обов’язково |
|---|---|---|
access_token |
Bearer token з company context | Так |
tests.read |
Scope для читання звітів з тестування | Так |
| Збережений фільтр | Фільтр із GET/PUT /api/v1/tests/reports/filter застосовується додатково |
Ні |
Які параметри потрібно передати в запиті?
Headers
| Header | Тип | Обов’язково | Опис |
|---|---|---|---|
Authorization |
string | Так | Bearer token у форматі Bearer <access_token> |
Accept |
string | Так | application/json |
Content-Type |
string | Так, якщо передається body | application/json |
Path parameters
Path parameters відсутні.
Query parameters
| Параметр | Тип | Обов’язково | Опис |
|---|---|---|---|
lang |
string | Ні | Мова локалізованих ресурсів тестування; default en, доступні мови uk, ru, en |
Request body
| Параметр | Тип | Обов’язково | Опис |
|---|---|---|---|
page |
int32 | Ні | Номер сторінки; default 0; параметр є 0-based |
size |
int32 | Ні | Розмір сторінки; default 50, максимум 200 |
view |
string | Ні | Режим вибірки; допустимі лише all, candidate, employee |
query |
string | Ні | Пошук по ПІБ |
curl приклад
Приклад виклику без body:
curl -X POST 'https://smartway.pro/api/v1/tests/reports/search' \
-H 'Authorization: Bearer <access_token>' \
-H 'Accept: application/json'
Приклад виклику з параметрами:
curl -X POST 'https://smartway.pro/api/v1/tests/reports/search?lang=uk' \
-H 'Authorization: Bearer <access_token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"page": 0,
"size": 20,
"view": "all",
"query": "Іван"
}'
Яку відповідь повертає API?
Успішний запит повертає 200 OK і об’єкт PublicTestReportListResponse зі списком звітів та метаданими пагінації.
{
"data": [
{
"uniqueId": "abc12345",
"candidateId": 1001,
"name": "Іван Петренко",
"dateSend": "2026-03-10",
"dateReceipt": "2026-03-12",
"active": true,
"testNames": "Conflict Test, Adaptive Sales",
"department": "Sales",
"jobTitle": "Manager"
}
],
"meta": {
"page": 0,
"size": 20,
"totalElements": 1,
"totalPages": 1,
"hasNext": false
}
}
Що означають поля у відповіді API?
| Поле | Тип | Опис |
|---|---|---|
data[].uniqueId |
string | Унікальний ідентифікатор звіту з тестування |
data[].candidateId |
integer | ID кандидата |
data[].name |
string | ПІБ кандидата або співробітника |
data[].dateSend |
string | Дата відправлення тестування |
data[].dateReceipt |
string | Дата отримання результату |
data[].active |
boolean | Ознака активності звіту |
data[].testNames |
string | Назви тестів у звіті |
data[].department |
string | Департамент |
data[].jobTitle |
string | Посада |
meta.page |
integer | Номер поточної сторінки |
meta.size |
integer | Розмір сторінки |
meta.totalElements |
integer | Загальна кількість елементів |
meta.totalPages |
integer | Загальна кількість сторінок |
meta.hasNext |
boolean | Ознака наявності наступної сторінки |
Що відбувається під капотом?
-
Tenant-видимість звітів визначається server-side з
companyIdу Bearer token як company-level / HRADMIN-equivalent scope. -
Звітність не обмежується кандидатами, запрошеними через поточний API key або HR-власника ключа.
-
API повертає всі звіти з тестування компанії, які доступні HRADMIN-рівню.
-
Додатково застосовується поточний збережений фільтр із
GET/PUT /api/v1/tests/reports/filter:active,startDate,endDate,testIds,departments,jobTitles. -
langнеобов’язковий; якщо його не передати, API використовуєen. -
Для доступу потрібен scope
tests.read.
Які edge cases потрібно врахувати?
| Сценарій | Поведінка API | Що зробити інтегратору |
|---|---|---|
| Запит без body | API використовує page = 0, size = 50, view = all |
Не передавати body, якщо потрібні значення за замовчуванням |
| Нумерація сторінок | page є 0-based |
Передавати page = 0 для першої сторінки |
Невалідний view |
API повертає 400 Bad Request |
Використовувати лише all, candidate, employee |
| Збережений фільтр активний | Фільтр застосовується додатково | Перед пошуком налаштувати або скинути фільтр |
lang не передано |
API використовує en |
Передати lang, якщо потрібна інша мова |
Які помилки може повернути API?
| HTTP status | Опис |
|---|---|
400 Bad Request |
Невалідний view або інші невалідні параметри пошуку |
401 Unauthorized |
Відсутній або невалідний Bearer token |
403 Forbidden |
Недостатньо прав |
500 Internal Server Error |
Неочікувана помилка |
503 Service Unavailable |
Збій внутрішньої інтеграції |
Як використовувати результат у наступних API-запитах?
Використовуйте meta.page, meta.size, meta.totalPages і meta.hasNext для пагінації. Значення uniqueId зі списку використовується для отримання PDF-звіту.
Приклад наступного запиту для отримання PDF-звіту:
curl -X GET 'https://smartway.pro/api/v1/tests/reports/pdf?uniqueId=abc12345&lang=uk' \
-H 'Authorization: Bearer <access_token>' \
-H 'Accept: application/pdf' \
--output test-report-abc12345.pdf
Яких помилок інтегратору варто уникати?
-
Вважати
page = 1першою сторінкою. -
Не враховувати активний збережений фільтр перед пошуком.
-
Передавати
view, відмінний відall,candidate,employee. -
Очікувати, що API поверне тільки звіти кандидатів, запрошених через поточний API key.
FAQ
Чи обов’язково передавати request body?
Ні. Якщо викликати endpoint без body, API використовує page = 0, size = 50, view = all.
З якої сторінки починається пагінація?
Параметр page є 0-based: page = 0 — перша сторінка, page = 1 — друга.
Які значення підтримує view?
Допустимі лише all, candidate, employee.
Чи застосовується збережений фільтр?
Так. Додатково застосовується фільтр із GET/PUT /api/v1/tests/reports/filter.
Який scope потрібен?
Для доступу потрібен scope tests.read.