Заголовки запроса
string
обязательно
API-токен сервисного пользователя в формате
Bearer YOUR_TOKEN. Токен выпускает владелец школы в кабинете:
Управление → Школа → Для разработчиков → API-ключи — подробнее в разделе «Аутентификация».integer
обязательно
Числовой ID продавца — аккаунта, которому принадлежит школа. Скопируйте его на странице API-ключи в
карточке «Данные для интеграции → Идентификаторы». По этому ID проверяются права токена.
integer
обязательно
Числовой ID школы, берётся там же, где
Seller-Id. Значение должно совпадать со школой продавца — иначе
вернётся ошибка 400 с cause: "ForbiddenSchoolMismatch".Трудоустройство (
employment) связывает пользователя школы с департаментом и, опционально, должностью.
У сотрудника может быть несколько записей трудоустройства в истории, но только одна активная для
конкретной пары департамент + должность. Должность можно не указывать — тогда сотрудник числится в
департаменте без должности, и активная запись такого типа уникальна по паре департамент + пользователь.
У записи также фиксируются условия занятости: вид (kind), тип (type) и ставка (rate).Перевод (
transfer) и повышение (promote) не изменяют текущую запись, а закрывают её (finishAt, статус
Terminated) и создают новую активную запись в целевом департаменте либо с новой должностью. Условия
занятости (kind, type, rate) и внешний идентификатор extId переносятся в новую запись без изменений.
В ответе возвращается именно новая запись трудоустройства — с новым id. Поэтому в своей системе храните
extId трудоустройства, а не id: id меняется при каждом переводе и повышении, extId — нет. Назначение
руководителем департамента переходит на новую запись автоматически; ранее созданные отсутствия остаются
привязанными к закрытой записи.У трудоустройства может быть внешний идентификатор
extId — ID записи в системе клиента (например, HR-системе).
От 1 до 50 символов, без / и пробелов. Уникален в рамках школы среди открытых (не завершённых)
трудоустройств: при переводе или повышении extId переносится на новую активную запись (закрытая сохраняет
копию), а после увольнения освобождается — его можно снова передать при повторном найме. По extId доступны
отдельные роуты ext/{extId}/transfer, ext/{extId}/promote и ext/{extId}/terminate; они находят только
открытую запись, поэтому для уже закрытого трудоустройства вернут StaffEmploymentNotFound.Какую операцию выбрать
Удаления трудоустройства в API нет: запись закрывается только через
terminate и остаётся в истории. Каждая
операция изменения есть в двух вариантах: по employmentId в теле запроса и по extId в пути
(ext/{extId}/...). Работают они одинаково; вариант с extId удобнее при синхронизации — не нужно хранить
внутренние ID Exode.
Список трудоустройств
StaffView).
Параметры запроса
Параметры-массивы передаются повторением параметра в строке запроса:
userIds=1&userIds=2&userIds=3.Пагинация
integer
Количество записей, которые нужно пропустить. По умолчанию
0.integer
Номер страницы (альтернатива
skip). Начинается с 1.integer
Количество записей на странице. По умолчанию
100, максимум 1000.Фильтрация
integer[]
Фильтр по ID трудоустройств. До 250 значений.
string[]
Фильтр по внешним идентификаторам (
extId) трудоустройств. До 250 значений, каждое до 50 символов.integer[]
Фильтр по ID пользователей. До 250 значений.
integer[]
Фильтр по ID департаментов. До 250 значений.
string[]
Фильтр по внешним идентификаторам (
extId) департаментов. До 250 значений, каждое до 50 символов.integer[]
Фильтр по ID должностей. До 250 значений.
string[]
Фильтр по внешним идентификаторам (
extId) должностей. До 250 значений, каждое до 50 символов.enum[]
Фильтр по статусам трудоустройства. Возможные значения:
Active, Terminated. До 250 значений.boolean
Если
true — вернуть только действующие на текущий момент трудоустройства: статус Active, дата startAt
уже наступила. Наём с будущей датой startAt сюда не попадёт до её наступления — чтобы получить и такие
записи, используйте statuses=Active.string
Поиск по сотруднику: ФИО, логин, ID пользователя. Максимум 50 символов.
Сортировка
enum
Направление сортировки по дате создания записи:
ASC или DESC. Аналогично работают параметры id и
updatedAt. Без параметров сортировки записи одного сотрудника идут подряд (группировка по userId).Поля ответа
object
Постраничный список трудоустройств.
Нанять сотрудника
StaffManage).
Создаёт новую активную запись трудоустройства. Пользователь, департамент и должность (если указана) должны
принадлежать школе. У сотрудника не может быть активного дубля с той же парой департамент + должность, а при
найме без должности — с той же парой департамент + пользователь. Если пользователь ранее был уволен и имеет
статус Terminated, найм автоматически возвращает ему статус Active.
Департамент обязателен и указывается по ID или внешнему идентификатору: в паре departmentId /
departmentExtId передаётся ровно один параметр. Должность опциональна: передайте ровно один параметр из
пары positionId / positionExtId, либо не передавайте оба — тогда сотрудник нанимается без должности. Оба
поля одной пары одновременно передавать нельзя.
Параметры запроса
integer
обязательно
ID пользователя, который принимается на работу. Пользователь должен быть уже зарегистрирован в школе, иначе
вернётся
UserNotBelongsToSchool. ID возвращается при создании пользователя; по вашему внешнему
идентификатору его можно найти через user/find. Чтобы создать пользователя
и сразу нанять его одним вызовом, используйте extra.staff.employments в
user/create или user/upsert.string
Внешний идентификатор трудоустройства из системы клиента. От 1 до 50 символов, без
/ и пробелов.
Должен быть уникален в рамках школы среди открытых (не завершённых) трудоустройств.integer
ID должности. Должность должна принадлежать школе. Опционально: передайте один параметр из пары
positionId / positionExtId, либо не передавайте оба — сотрудник будет нанят без должности.string
Внешний идентификатор (
extId) должности — альтернатива positionId.integer
ID департамента. Департамент должен принадлежать школе. Передаётся ровно один параметр из пары
departmentId / departmentExtId.string
Внешний идентификатор (
extId) департамента — альтернатива departmentId.string
Дата начала трудоустройства в формате ISO 8601 (например,
2026-07-02T00:00:00.000Z). По умолчанию — текущий
момент. Можно указать дату в прошлом (перенос истории) или в будущем (запланированный приём): будущая запись
сразу получает статус Active, но до наступления startAt не попадает в выборку activeOnly=true и не может
быть назначена руководителем департамента.enum
Вид занятости:
Main (основное место работы), InternalSecondary (внутреннее совместительство),
ExternalSecondary (внешнее совместительство). По умолчанию Main.enum
Тип занятости:
FullTime (полная) или PartTime (частичная). По умолчанию FullTime.number
Ставка — доля полной ставки, от
0.01 до 1. По умолчанию 1.Перевести в другой департамент
StaffManage).
Закрывает текущую активную запись трудоустройства (finishAt, статус Terminated) и создаёт новую активную
запись в целевом департаменте с сохранением должности. Целевой департамент должен принадлежать школе. Если
у сотрудника в целевом департаменте уже есть открытая запись с той же должностью, вернётся
StaffEmploymentAlreadyExists.
Параметры запроса
integer
обязательно
ID переводимой активной записи трудоустройства.
integer
ID целевого департамента. Департамент должен принадлежать школе. Передаётся ровно один параметр из пары
toDepartmentId / toDepartmentExtId.string
Внешний идентификатор (
extId) целевого департамента — альтернатива toDepartmentId.string
Дата перевода в формате ISO 8601. Должна быть не раньше
startAt текущей записи, иначе вернётся
StaffEmploymentInvalidTransitionDate. По умолчанию — текущий момент.Перевести по внешнему идентификатору
StaffManage).
Аналог перевода по employmentId, но активная запись трудоустройства находится по внешнему идентификатору
extId в рамках школы. Тело запроса — как у обычного перевода, без поля employmentId.
Параметры запроса
string
обязательно
Внешний идентификатор активной записи трудоустройства. Значение в пути должно быть URL-encoded.
integer
ID целевого департамента. Департамент должен принадлежать школе. Передаётся ровно один параметр из пары
toDepartmentId / toDepartmentExtId.string
Внешний идентификатор (
extId) целевого департамента — альтернатива toDepartmentId.string
Дата перевода в формате ISO 8601. Должна быть не раньше
startAt текущей записи, иначе вернётся
StaffEmploymentInvalidTransitionDate. По умолчанию — текущий момент.Сменить должность
StaffManage).
Закрывает текущую активную запись трудоустройства (finishAt, статус Terminated) и создаёт новую активную
запись с новой должностью в том же департаменте. Целевая должность должна принадлежать школе. Если у сотрудника
в этом департаменте уже есть открытая запись с новой должностью, вернётся StaffEmploymentAlreadyExists.
Запрос должен явно выражать намерение: передайте должность (toPositionId или toPositionExtId), чтобы
назначить её, либо toPositionId: null, чтобы снять должность (сотрудник останется в департаменте без
должности). Если не передать ни одно из этих полей, вернётся ошибка StaffEmploymentInputRequired.
Параметры запроса
integer
обязательно
ID изменяемой активной записи трудоустройства.
integer | null
ID целевой должности. Должность должна принадлежать школе. Передаётся ровно один параметр из пары
toPositionId / toPositionExtId. Значение null снимает должность — трудоустройство остаётся в
департаменте без должности. Оба поля пары одновременно передавать нельзя.string
Внешний идентификатор (
extId) целевой должности — альтернатива toPositionId.string
Дата смены должности в формате ISO 8601. Должна быть не раньше
startAt текущей записи, иначе вернётся
StaffEmploymentInvalidTransitionDate. По умолчанию — текущий момент.Сменить должность по внешнему идентификатору
StaffManage).
Аналог смены должности по employmentId, но активная запись трудоустройства находится по внешнему идентификатору
extId в рамках школы. Тело запроса — как у обычной смены должности, без поля employmentId: передайте
должность, чтобы назначить её, либо toPositionId: null, чтобы снять её; иначе — ошибка
StaffEmploymentInputRequired.
Параметры запроса
string
обязательно
Внешний идентификатор активной записи трудоустройства. Значение в пути должно быть URL-encoded.
integer | null
ID целевой должности. Должность должна принадлежать школе. Передаётся ровно один параметр из пары
toPositionId / toPositionExtId. Значение null снимает должность — трудоустройство остаётся в
департаменте без должности. Оба поля пары одновременно передавать нельзя.string
Внешний идентификатор (
extId) целевой должности — альтернатива toPositionId.string
Дата смены должности в формате ISO 8601. Должна быть не раньше
startAt текущей записи, иначе вернётся
StaffEmploymentInvalidTransitionDate. По умолчанию — текущий момент.Уволить сотрудника
StaffManage).
Закрывает активную запись трудоустройства: проставляет finishAt, переводит статус в Terminated и снимает
сотрудника с руководства департаментами. В ответе возвращается закрытая запись.
Защиты при увольнении с последнего активного трудоустройства: нельзя уволить самого себя — пользователя,
от имени которого выполняется запрос (
StaffCannotTerminateSelf), и владельца школы
(StaffCannotTerminateSchoolOwner). При сверке полного списка сотрудников пропускайте этих пользователей.Увольнение вступает в силу в момент вызова: запись сразу получает статус
Terminated, а при увольнении
с последнего трудоустройства сразу закрывается доступ — даже если finishAt указан в будущем. Отложенного
увольнения нет, поэтому вызывайте terminate в день фактического увольнения.Параметры запроса
integer
обязательно
ID увольняемой активной записи трудоустройства.
string
Дата увольнения в формате ISO 8601, сохраняется в записи. Должна быть не раньше
startAt трудоустройства, иначе
вернётся StaffEmploymentInvalidTransitionDate. По умолчанию — текущий момент.Уволить по внешнему идентификатору
StaffManage).
Аналог увольнения по employmentId, но активная запись трудоустройства находится по внешнему идентификатору
extId в рамках школы. Тело запроса — как у обычного увольнения, без поля employmentId. Действуют те же
защиты и та же логика перевода пользователя в статус Terminated при увольнении с последнего активного
трудоустройства.
Параметры запроса
string
обязательно
Внешний идентификатор активной записи трудоустройства. Значение в пути должно быть URL-encoded.
string
Дата увольнения в формате ISO 8601, сохраняется в записи. Должна быть не раньше
startAt трудоустройства, иначе
вернётся StaffEmploymentInvalidTransitionDate. По умолчанию — текущий момент.Требования к правам доступа
Модуль staff доступен только для школ сегмента
Corporate. Для чтения списка требуется право «Просмотр персонала» (StaffView), для
операций найма, перевода, повышения и увольнения — право «Управление персоналом» (StaffManage).Обновлено: 2026-09-25 13:43 UTC