POST /developer/v1/ingest/{source_type} принимает пачку записей из внешней
системы (HRIS, расчётной системы или собственного справочника) и ставит её в
асинхронную обработку. Один запрос несёт записи одного вида: юрлица,
подразделения, должности, людей или сотрудников.
Используйте его, чтобы наполнить тенант из другой системы и дальше держать его в
актуальном состоянии. Повторная отправка записи с тем же external_id обновляет
созданный ею объект.
Запрос
Тело:
Полный запрос, который загружает одного человека:
200:
ACCEPTED означает, что пачка сохранена и поставлена в очередь. Применилась ли
каждая запись, становится известно только после обработки, см.
Результат.
Важно, кому принадлежит ключ
Пачка применяется от имени владельца ключа. Два следствия:- Ключ должен создать супер-администратор: область
ingest:writeдоступна только ключам пользователей с правомPERMISSIONS:MANAGE. - Чтение результата через
GET /employeesограничено профилем прав владельца. Создавайте ключ от администратора, чей профиль охватывает всю компанию, иначе в списке не будет части только что загруженных сотрудников, а владелец вовсе без профиля получит400 METADATA.FIELD_NOT_VISIBLE.
Порядок загрузки
Ссылки между записями разрешаются поexternal_id, но не на всякий объект можно
сослаться до его появления. Отправляйте пачки в таком порядке:
1
ORGANIZATIONS
Юрлица. На них ссылается всё остальное.
2
DEPARTMENTS
Родительское подразделение может быть в той же пачке или в более ранней.
3
JOB_TITLES
4
PERSONS
Людей нужно загрузить до сотрудников. Сотрудник, чей
external_person_id ещё не загружен, отклоняется.5
EMPLOYEES
Связывает человека с юрлицом, подразделением и должностью.
ACCEPTED на
предыдущий запрос не означает, что он уже применён. Для ORGANIZATIONS,
DEPARTMENTS и JOB_TITLES порядок прощают заготовки, а EMPLOYEES
отправляйте только после того, как пачка PERSONS успела примениться (несколько
секунд на сотню записей), и повторно отправляйте сотрудников, отклонённых из-за
ещё не загруженного человека.
Сопоставление по external_id
Каждая запись несёт external_id — идентификатор объекта в вашей системе.
Платформа хранит привязку external_id → внутренний id в разрезе source_type:
- запись с уже известным
external_idобновляет существующий объект; - запись с новым
external_idсоздаёт объект, только еслиcreate_missing: true, иначе пропускается; - ссылки между записями (
external_department_id,external_person_idи т.д.) тоже указываются внешними идентификаторами — платформа разрешает их сама.
Привязка
external_id хранится на стороне платформы и не возвращается в
GET /employees: у объекта Employee нет поля external_id, и фильтра по нему
нет. Чтобы сверять данные после загрузки, храните соответствие на своей стороне
либо используйте естественные ключи (табельный номер employee_number, ИИН).Привязка — единственный ключ сопоставления. Человек или сотрудник, который уже
был в тенанте до интеграции (заведён вручную или другим источником), по ИИН или
табельному номеру не находится: запись с новым
external_id попытается создать
второго человека с тем же ИИН и будет отклонена. Начинайте интеграцию на
тенанте, где сотрудники приходят только из этого источника, либо согласуйте
перенос существующих записей с поддержкой.Схемы записей
Поля не из схемы игнорируются. Даты — строкиYYYY-MM-DD. Пустая строка
считается «не задано».
ORGANIZATIONS
DEPARTMENTS
JOB_TITLES
PERSONS
Человек — это личность за сотрудником. Загрузка человека создаёт или находит аккаунт платформы по ИИН;email становится логином этого аккаунта, если у него
ещё нет логина.
Поля документа, удостоверяющего личность (номер, орган выдачи, адрес
регистрации, гражданство, пол), через ingest сегодня не загружаются. Если их
прислать, они игнорируются; заполняйте их в приложении или дождитесь расширения
схемы.
EMPLOYEES
1C · EMPLOYEES_FULL и DEPARTMENTS
Приsource_type = 1C записи идут в формате выгрузки 1С — сотрудник вместе с
физлицом, поля на русском: ТабельныйНомер, ДатаПриема, Организация.Ссылка,
Подразделение.Ссылка, Должность.Ссылка и вложенный объект ФизЛицо (Имя,
Фамилия, Отчество, ИИН, Телефон, ДатаРождения). 1C · DEPARTMENTS —
Ссылка, Наименование, Родитель.Ссылка. Для любой другой системы используйте
общую схему KEDO.
Обновления и увольнения
Отправьте запись повторно с тем жеexternal_id и новыми значениями. Всегда
отправляйте запись целиком, а не только изменившиеся поля. Чтобы уволить
сотрудника, пришлите его запись с left_date: сотрудник станет TERMINATED, а
end_date заполнится.
Удаление объектов через ingest не поддерживается.
Результат
Обработка асинхронная. По каждой пачке платформа ведёт журнал с четырьмя счётчиками:
Эндпоинта, который возвращает этот журнал или ошибки по записям для
ingest_request_id, пока нет. Практический способ убедиться в результате:
- Подождите обработку: пачки в сотни записей обрабатываются за секунды.
- Перечитайте данные:
GET /employees?updated_since=…&expand=personвернёт созданных и обновлённых сотрудников,GET /employees/{id}— одного. - Подпишитесь на вебхук
employee.changed— каждая изменённая карточка придёт событием.
Idempotency-Key.
Ошибки
Дальше
Синхронизация сотрудников
Полная и инкрементальная выгрузка обратно.
Лимиты
Частота запросов и размеры.