POST /v1/employees створює співробітника. Обов'язкові поля body: email, name, surname, gender і active. Для доступу потрібен scope employees.write.
Endpoint
| Параметр | Значення |
|---|---|
| Method | POST |
| Path | /api/v1/employees |
| Base URL | https://smartway.pro |
| Auth | Bearer token |
| Required scope | employees.write |
Призначення
Endpoint використовується для створення нового співробітника в межах компанії з Bearer token.
Значення active керує не тільки бізнес-прапорцем, а й створенням або відсутністю пов'язаного користувача на сервері авторизації.
Передумови
Клієнт має передати валідний Bearer token.
Token має містити company context.
Token має містити scope employees.write.
idCompany не передається у body або query string.
У поточній реалізації Idempotency-Key не використовується.
Запит
Body parameters
| Поле | Тип | Обов'язкове | Опис |
|---|---|---|---|
email |
string | так | Email співробітника. |
name |
string | так | Ім'я співробітника. Це джерело даних для формування fullName під час створення. |
surname |
string | так | Прізвище співробітника. Це джерело даних для формування fullName під час створення. |
gender |
string | так | Допустимі лише значення Male або Female. |
active |
boolean | так | Допустимі лише JSON-boolean значення true або false. true створює або синхронізує доступ до приватного кабінету через сервер авторизації; false створює співробітника без такого доступу. |
manager |
boolean | ні | Ознака ролі керівника підрозділу. Допустимі лише JSON-boolean значення true або false; true створює або синхронізує доступ з ролями співробітника і керівника підрозділу, навіть якщо active=false. |
department |
string | ні | Основний департамент. Якщо не передати, зберігається null. |
departments |
string[] | ні | Набір департаментів. Якщо не передати, колекція лишається порожньою. |
jobTitle |
string | ні | Основна посада. Якщо не передати, зберігається null. |
jobTitles |
string[] | ні | Набір посад. Якщо не передати, колекція лишається порожньою. |
phone |
string | ні | Телефон. Якщо не передати, зберігається null. |
notes |
string | ні | Примітки. Якщо не передати, зберігається null. |
curl приклад
Створити співробітника з primary-полями і масивами
curl -X POST 'https://smartway.pro/api/v1/employees' \
-H 'Authorization: Bearer <access_token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"email": "employee@example.com",
"name": "Іван",
"surname": "Петренко",
"gender": "Female",
"active": false,
"manager": false,
"department": "Управління",
"departments": ["КЛ"],
"jobTitle": "Менеджер",
"jobTitles": ["Координатор"],
"phone": "+380000000000",
"notes": "Новий співробітник public API"
}
JSON
Створити співробітника тільки з масивами departments/jobTitles
curl -X POST 'https://smartway.pro/api/v1/employees' \
-H 'Authorization: Bearer <access_token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--data-binary @- <<'JSON'
{
"email": "employee@example.com",
"name": "Іван",
"surname": "Петренко",
"gender": "Male",
"active": true,
"manager": true,
"departments": ["Управління", "КЛ"],
"jobTitles": ["Менеджер", "Координатор"],
"phone": "+380000000000",
"notes": "Новий співробітник public API"
}
JSON
Відповідь
Успішна відповідь: 201 Created. Повертає створений Employee.
{
"employeeId": 4432,
"candidateId": 10748,
"email": "employee@example.com",
"fullName": "Іван Петренко",
"name": "Іван",
"surname": "Петренко",
"gender": "Female",
"department": "Управління",
"departments": [
"КЛ",
"Управління"
],
"jobTitle": "Менеджер",
"jobTitles": [
"Координатор",
"Менеджер"
],
"phone": "+380000000000",
"active": false,
"manager": false
}
Поля відповіді
Employee
| Поле | Тип | Опис |
|---|---|---|
employeeId |
int64 | ID співробітника. |
candidateId |
int64 | ID пов'язаного кандидата. |
email |
string | Email співробітника. |
fullName |
string | Повне ім'я, яке сервер формує з name + surname. |
name |
string | Ім'я. |
surname |
string | Прізвище. |
gender |
string | Стать. |
department |
string | Основний департамент. |
departments |
string[] | Набір департаментів. |
jobTitle |
string | Основна посада. |
jobTitles |
string[] | Набір посад. |
phone |
string | Телефон. |
active |
boolean | Ознака активності. |
manager |
boolean | Ознака ролі керівника підрозділу. true означає, що співробітник має цю роль. |
Бізнес-логіка
API визначає companyId тільки з Bearer token.
API визначає hrEmail з Bearer token. hrEmail дорівнює email користувача з роллю HRADMIN, який створив або ротував активний API key компанії.
Якщо активний API key буде ротований іншим HRADMIN, наступні create-операції автоматично почнуть використовувати його hrEmail.
Повторний однаковий POST не створює дубль, якщо вже існує employee з таким самим email; API повертає 409 Conflict.
gender приймає тільки Male або Female.
active приймає тільки JSON-boolean true або false.
active = true створює або синхронізує пов'язаний користувацький акаунт на сервері авторизації і відкриває доступ до приватного кабінету.
active = false створює співробітника без доступу до приватного кабінету, тобто без користувацького акаунта на сервері авторизації.
manager = true створює або синхронізує доступ з ролями співробітника і керівника підрозділу. Якщо одночасно передати active = false, manager-доступ має пріоритет і співробітник буде створений як активний користувач кабінету.
manager = false або відсутнє поле manager не призначає роль керівника підрозділу.
manager повертається в Employee response; після створення цю роль можна змінити через PATCH /v1/employees/{employeeId}.
fullName у відповіді формується сервером з name + surname.
Якщо передано тільки departments або jobTitles, перший елемент масиву стає primary-значенням у department або jobTitle.
Якщо передано і одиничне поле, і масив, одиничне поле має пріоритет як primary, а масив доповнюється унікальними значеннями.
Якщо department, jobTitle, phone або notes не передані, у відповідних одиничних полях зберігається null.
Якщо departments або jobTitles не передані, відповідні колекції залишаються порожніми.
У відповіді departments і jobTitles повертаються у стабільно відсортованому вигляді.
Edge cases
| Сценарій | Поведінка API |
|---|---|
| Відсутнє required поле | API повертає 400 Bad Request. |
gender має значення не Male і не Female |
API повертає 400 Bad Request з поясненням. |
active передано рядком або числом |
API повертає 400 Bad Request, бо active має бути JSON-boolean. |
manager передано рядком або числом |
API повертає 400 Bad Request, бо manager має бути JSON-boolean. |
active=false і manager=true |
Manager-доступ має пріоритет; співробітник створюється активним. |
| email уже існує | API повертає 409 Conflict. |
Передано тільки departments |
Перший елемент масиву стає department. |
Передано department і departments |
department лишається primary, а departments доповнюється унікальними значеннями. |
Не передано department або jobTitle |
У відповідному одиничному полі зберігається null. |
Не передано departments або jobTitles |
Відповідна колекція лишається порожньою. |
Помилки
Error responses
| HTTP status | Коли виникає |
|---|---|
400 Bad Request |
Відсутній хоча б один required-параметр email, name, surname, gender або active. |
400 Bad Request |
gender не дорівнює Male або Female. |
400 Bad Request |
active не є JSON-boolean значенням true або false. |
400 Bad Request |
manager не є JSON-boolean значенням true або false. |
401 Unauthorized |
Bearer token відсутній або невалідний. |
403 Forbidden |
Недостатньо прав або token без company context. |
409 Conflict |
Employee з таким email уже існує. |
500 Internal Server Error |
Неочікувана помилка API. |
503 Service Unavailable |
Збій внутрішньої серверної інтеграції. |
Використання
Створення активного співробітника з доступом до приватного кабінету: active = true.
Створення співробітника без доступу до приватного кабінету: active = false.
Створення співробітника з роллю керівника підрозділу: manager = true.
Синхронізація співробітників із зовнішньої HR-системи.
Типові помилки
Typical integration mistakes
| Типова помилка | Як правильно |
|---|---|
Передавати active як рядок "true" або "false" |
Передавайте true або false як JSON-boolean. |
Передавати manager як рядок "true" або "false" |
Передавайте true або false як JSON-boolean. |
Передавати gender у значенні, відмінному від Male/Female |
Використовуйте тільки Male або Female. |
Передавати idCompany або hrEmail |
Не передавайте ці значення; API визначає їх із Bearer token. |
Очікувати idempotency через Idempotency-Key |
У поточній реалізації Idempotency-Key не використовується. |
Передавати fullName замість name і surname |
Передавайте name і surname; fullName формує сервер. |
FAQ
Які поля обов'язкові для створення співробітника?
email, name, surname, gender і active.
Що робить active = true?
Сервер створює або синхронізує пов'язаний користувацький акаунт на сервері авторизації і відкриває доступ до приватного кабінету.
Що робить active = false?
Співробітник створюється без доступу до приватного кабінету, тобто без користувацького акаунта на сервері авторизації.
Що робить manager = true?
Сервер створює або синхронізує доступ з ролями співробітника і керівника підрозділу. Якщо одночасно передати active = false, співробітник усе одно буде створений як активний користувач кабінету.
Що буде, якщо email уже існує?
API поверне 409 Conflict.
Чи потрібно передавати hrEmail?
Ні. API визначає hrEmail з Bearer token.