Перейти к основному содержимому

Идентификаторы

В API HRlink сущности имеют два типа идентификаторов: внутренний id и внешний externalId.

Когда использовать

Используйте эту страницу, когда решаете, хранить ли внутренние UUID HRlink во внешней системе, как искать сущности по идентификатору из 1С или SAP и как безопасно обновлять данные через PUT.

Что нужно заранее

Что нужноГде получить
tenantHostАдрес тенантаTenant Экземпляр системы HRlink на отдельном домене (например, company.hr-link.ru). Внутри одного тенанта может быть несколько пространств клиентов. HRlink
clientIdТекущий пользователь
ТокенАутентификация
Стабильный внешний идентификаторexternalId Внешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID.В системе-источнике: 1С, SAP, Bitrix24 или другой HR-системе

Типовые сценарии

Найти сущность по externalId

  1. Возьмите внешний идентификаторexternalId Внешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. из системы-источника.
  2. Вызовите метод чтения по externalId, например Получить сотрудника по externalId.
  3. Если сервер вернул 404, создайте сущность или обработайте отсутствие как нормальный результат синхронизации.

Обновить сущность без потери данных

  1. Получите текущее состояние сущности.
  2. Сохраните version и все поля, которые поддерживает PUT-метод.
  3. Измените нужные поля.
  4. Отправьте PUT со всем набором полей.

Ограничения и ошибки

  • Файлы не поддерживают externalId.
  • Если в ссылке на связанную сущность передать и id, и externalId, сервер использует id.
  • PUT в HRlink заменяет весь объект: не переданные поля сервер сохранит как null.
  • PATCH-методов для частичного обновления нет.

id — внутренний идентификатор

  • Формат: UUID (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
  • Генерируется HRlink при создании сущности
  • Неизменяемый
  • Используется во всех запросах к API

externalId — внешний идентификатор

  • Формат: произвольная строка
  • Задаётся интегратором при создании сущности
  • Связывает запись с внешней системой (1С, SAP, Bitrix24 и др.)
  • Позволяет не хранить отдельный маппинг UUID: вы обращаетесь к сущностям HRlink по идентификатору из вашей системы
Рекомендация

Для единообразия используйте externalId для всех сущностей: если вы задали externalId для сотрудника, задавайте его и для юрлиц, должностей и отделов.

Поддержка externalId

Почти все сущности API поддерживают externalId, кроме файлов. Для большинства сущностей есть отдельные эндпоинты — через них вы получаете и обновляете объект по внешнему идентификаторуexternalId Внешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. без знания внутреннего UUID.

Правила приоритета

При создании

  • Интегратор передаёт externalId в теле запроса при создании сущности
  • Если externalId не передан — сущность создаётся без внешнего идентификатораexternalId Внешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID.

При обновлении (PUT)

PUT-методы в HRlink работают как полнаЛНА Локальный нормативный акт — внутренний документ организации, с которым сотрудники знакомятся через HRlink. Управляется через отдельный набор API-методов.я замена всех полей объекта, а не только externalId. Подробности — в разделе Поведение PUT: полная замена полей.

В запросах с обоими идентификаторами

Некоторые операции (например, создание документа) позволяют указать оба типа идентификаторов одновременно:

{
"headManagerId": "146e54ac-1111-2222-3333-444455556666",
"headManagerExternalId": "91979976",
"employeeIds": ["6c75c66b-1111-2222-3333-444455556666"],
"employeeExternalIds": ["91979977"]
}
Приоритет id над externalId при ссылке на сущность

Если для ссылки на связанную сущность переданы оба варианта (например, headManagerId и headManagerExternalId), сервер использует id, а externalId игнорирует. Передавайте только один вариант.

Паттерн интеграции на externalId

Типовой сценарий интеграции через externalId:

  1. При синхронизации — задавайте externalId из вашей системы (табельный номер, IDid Внутренний идентификатор сущности в формате UUID, генерируемый HRlink при создании. Неизменяемый, используется во всех внутренних операциях. в 1С и т.п.)
  2. При обращении к API — получайте и обновляйте сущности по внешнему идентификаторуexternalId Внешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. вместо внутреннего id
  3. Не храните маппинг UUID — через externalId вы обращаетесь к сущностям напрямую

Пример: проверка существования сотрудника

curl -X GET "https://{tenantHost}/api/v1/clients/{clientId}/employees/EMP-42/externalId" \
-H "Accept: application/json" \
-H "User-Api-Token: {token}"

Если сотрудник с externalId: "EMP-42" существует, сервер вернёт его полные данные. Если нет, вернётся 404 Not Found.

Пример: обновление сотрудника по externalId

Чтобы изменить только отдел, сначала получите текущего сотрудника через GET, измените нужное поле и отправьте PUT со всем набором полей. Иначе остальные поля затрутся в null — см. Поведение PUT.

curl -X PUT "https://{tenantHost}/api/v5/clients/{clientId}/employeesByExternalId/EMP-42" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "User-Api-Token: {token}" \
-d '{
"version": 3,
"externalId": "EMP-42",
"departmentExternalId": "DEP-10",
"positionExternalId": "POS-05",
"number": "42",
"isMainWorkplace": true,
"tags": ["engineering"]
}'
Не забывайте про version

При обновлении всегда передавайте актуальное значение version — это механизм оптимистической блокировки.

Поведение PUT: полная замена полей

PUT-методы HRlink устроены как полнаЛНА Локальный нормативный акт — внутренний документ организации, с которым сотрудники знакомятся через HRlink. Управляется через отдельный набор API-методов.я замена всех полей объекта, а не частичное обновление. Любой атрибут, который вы не передали в теле запроса, сервер интерпретирует как null и сохраняет это значение.

Это касается не только externalId, а всех обновляемых полей: departmentId, positionId, tags, fullTimeEquivalent, number и других.

Типичная ошибка

Вы хотите обновить только отдел сотрудника и передаёте в PUT тело { "version": 3, "departmentExternalId": "DEP-20" }. Результат: отдел обновится, но externalId, positionExternalId, tags, number и другие поля, которых вы не передали, будут затёрты в null. Следующий синк или чтение по externalIdexternalId Внешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID. сломается.

Правильный паттерн: GET → изменить → PUT

  1. Получить текущее состояние сотрудника через Получить сотрудника по externalId.
  2. Взять из ответа все поля, которые поддерживает PUT-метод.
  3. Изменить нужные.
  4. Отправить весь набор в PUT.

PATCH-методов (частичного обновления) в API HRlink нет. Схема GET → изменить → PUT — единственный безопасный способ обновить одно поле, не затерев остальные.

Немного исключений

Для отдельных полей в некоторых методах действует исключение «null = не трогать» — например, для roleIds в обновлении сотрудника. Исключения оставлены для обратной совместимости. На такое поведение нельзя полагаться как на правило: оно точечное, не отражено в OpenAPI и различается между методами и версиями.

Безопасный подход — всегда передавать в PUT полный набор полей объекта, даже если часть из них не меняется.

Формат externalId

Формат externalIdпроизвольная строка. Примеры из реальных интеграций:

Внешняя системаПример externalIdexternalId Внешний идентификатор сущности — произвольная строка, задаваемая интегратором при создании. Связывает сущность HRlink с записью во внешней системе (1С, SAP и др.) без хранения маппинга UUID.Комментарий
"000000042"Табельный номер
SAP"91979974"IDid Внутренний идентификатор сущности в формате UUID, генерируемый HRlink при создании. Неизменяемый, используется во всех внутренних операциях. сотрудника в SAP
Битрикс24"2bd6c38f-1740-11ef-bba5-00155d282200"UUID из Битрикс
Кастомная"SAFONOVA_NV"Строковый код