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