Маршруты загрузки сотрудников, заявок на ресурсы, центров компетенций, отсутствий (в том числе своих) и производственного календаря volrix.pm.
Обновлено 16.10.2026
Группа отвечает на вопрос «кто свободен»: загрузка сотрудника по проектам, сводки по центрам компетенций и предприятию, заявки проекта на выделение ресурсов, отсутствия (отпуск, больничный) и производственный календарь с рабочими днями и часовой нормой.
**Что принимает API-ключ.** Загрузка сотрудника (project_team:read), сводка по предприятию (reports:read), заявки на ресурсы (project_team:...), центры компетенций, список отсутствий и их изменение (employees:...) и календарь. Отчет по загрузке, сводки по центрам и личные отсутствия (/me/absences: просмотр, добавление и удаление своих периодов) работают только в сессии.
Базовый адрес, формат ответов и коды ошибок описаны в статье API: адрес, первый запрос и ответы, выпуск ключа и вход под пользователем - в статье API: вход, токен и API-ключи. В примерах ключ лежит в переменной окружения VOLRIX_API_KEY, токен пользователя - в VOLRIX_TOKEN.
Загрузка сотрудника на квартал с предпросмотром назначения на 50% (скоуп project_team:read):
curl --fail-with-body -sS \ -H "X-Api-Key: $VOLRIX_API_KEY" \ "https://ваш-адрес/api/v1/resource-workload/person/{person_id}?start=2026-10-01&end=2026-12-31&extra_percent=50&extra_start=2026-10-01&extra_end=2026-11-30"
Норма рабочего дня (скоуп working_calendar:read) и отпуск сотрудника (скоуп employees:update):
curl --fail-with-body -sS \ -H "X-Api-Key: $VOLRIX_API_KEY" \ "https://ваш-адрес/api/v1/working-calendar/workday-hours" curl --fail-with-body -sS -X POST \ -H "X-Api-Key: $VOLRIX_API_KEY" \ -H "Content-Type: application/json" \ -d '{"kind": "vacation", "start_date": "2026-11-02", "end_date": "2026-11-15"}' \ "https://ваш-адрес/api/v1/people/{person_id}/absences"
Как читать колонку «Доступ»: **скоуп вида users:read** - маршрут принимает API-ключ, если в ключе есть этот скоуп, а у сотрудника, выпустившего ключ, есть такое же право в роли (users.read). Если скоупов несколько через «+», нужны все. **Только сессия** - нужен заголовок Authorization: Bearer, API-ключ получит 403. **Без авторизации** - заголовки не нужны. Доступ к конкретному объекту (участие в проекте, права на папку Диска) сервер проверяет дополнительно. Пути в таблицах указаны полностью, от корня сервера.
**Свои отсутствия.** POST /me/absences и DELETE /me/absences/{absence_id} доступны любому сотруднику без права employees.update: период записывается на самого вызывающего, поле person_id в теле не нужно. Удалить можно только период, внесенный самим сотрудником. Если период завел руководитель или кадровая служба (через POST /people/{person_id}/absences), ответ будет 403 «Этот период внес руководитель или кадровая служба - удалить его может только он»; для такого периода используйте DELETE /absences/{absence_id} с правом employees.update. Чужой или несуществующий период дает 404. Неверные данные (дата окончания раньше даты начала, незнакомый тип) вернут 400 с пояснением в detail.
**Поле created_by_id.** Во всех ответах с типом AbsenceRead (GET /me/absences, GET /people/{person_id}/absences, POST и PUT) есть created_by_id - идентификатор сотрудника, который внес период. Он совпадает с person_id, если сотрудник отметил отсутствие сам, и отличается, если период внес другой человек. По этому полю интерфейс решает, показывать ли кнопку удаления в личной вкладке «Мои отсутствия». Допустимые значения kind: vacation (отпуск), sick (больничный), unpaid (без содержания), other (прочее).
Поля JSON и форм multipart из схемы сервера. «Да» - поле обязательно. Ссылка на другую схему (например, array[QCApproverInput]) означает вложенный объект с теми же полями.
Загрузка и доступность команды
Руководитель и состав
Рабочие дни и часовая норма