API для получения информации о сотруднике
Примеры запросов от внешней системы:
GET /api/external/v1/users?limit=100&offset=0
GET /api/external/v1/users?email=user@example.com&limit=100&offset=0
GET /api/external/v1/users?externalId=8f1c-...
GET /api/external/v1/users?employeeId=A-7788...
Query-параметры (все опциональны):
email//строка, почта пользователя, ищем точное совпадениеexternalId//строка, значение внешнего IDemployeeId//строка, табельный номер пользователяlimit//int (по умолчанию 100, максимум 100)offset//int (по умолчанию 0)
response
{
"message": "OK",
"body": {
"items": [
{
"firstName": "Иван",
"lastName": "Петров",
"position": "Разработчик",
"department": "Отдел разработки", //поле org_department_id в табл Users
"manager": "Сидоров Алексей", //fullName руководителя
"workSchedule": {
"workingHours": "09:00–18:00",
"assignedOffice": "Москва", //офис в user_settings
"workMode": "hybrid" //поле в user_settings
},
"contacts": {
"email": "ivan.petrov@example.com"
"phone": "+7 (900) 123-45-67",
"messenger": "Telegram: @ivanpetrov"
},
"assignedDesks": [
{
"name": "12, HS Liana", //в name: название стола, офиса
"days": ["We", "Th"]
}
],
"status": {
"inOfficeNow": true, //если статус "в офисе" true, иначе false
"schedule": { //расписание за сегодня
"todayStatus": "in office", //remote | not working | null
"extraStatus": null, //опционально, только для remote | not working
"placeName": "Рабочее место A-12", //опционально, только для booking
"startTime": "2025-10-16T09:00:00Z", //опционально, только для booking
"endTime": "2025-10-16T18:00:00Z" //опционально, только для booking
}
}
}
],
"limit": 100,
"offset": 0,
"totalRecords": 1
}
}
Коды ответов
200 OK — даже если список пуст, просто направляем пустой массив items: [].