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

Обзор API

Через REST API HRlink вы интегрируете тенантTenant Экземпляр системы HRlink на отдельном домене (например, company.hr-link.ru). Внутри одного тенанта может быть несколько пространств клиентов. с кадровыми системами (1С, БОСС-Кадровик, SAP, Битрикс24 и другими). API покрывает все действия, доступные в интерфейсе тенантаTenant Экземпляр системы HRlink на отдельном домене (например, company.hr-link.ru). Внутри одного тенанта может быть несколько пространств клиентов.: синхронизацию сотрудников и оргструктуры, работу с документами, отправку на подписание, отслеживание статусов.

Базовый URL

https://{tenantHost}/api/{version}/clients/{clientId}/{resource}
КомпонентОписаниеПример
tenantHostДомен тенантаTenant Экземпляр системы HRlink на отдельном домене (например, company.hr-link.ru). Внутри одного тенанта может быть несколько пространств клиентов. HRlinkcompany.hr-link.ru
versionВерсия эндпоинтаv1, v2
clientIdUUID пространства внутри тенантаTenant Экземпляр системы HRlink на отдельном домене (например, company.hr-link.ru). Внутри одного тенанта может быть несколько пространств клиентов. (в API называется client — это не заказчик, см. ниже)f47ac10b-58cc-4372-a567-0e02b2c3d479
resourceПуть к ресурсуemployees, documents

Большинство эндпоинтов содержат clientId в пути. Отдельные служебные эндпоинты (например, получение текущего пользователя) работают без него.

Откуда взять tenantHost

tenantHost — адрес тенантаTenant Экземпляр системы HRlink на отдельном домене (например, company.hr-link.ru). Внутри одного тенанта может быть несколько пространств клиентов. HRlink. Вы получаете его при покупке лицензии.

Что такое client

Это не заказчик

В API HRlink сущность называется client по историческим причинам. Это не заказчик, не контрагент и не пользователь, а изолированное пространство внутри тенантаTenant Экземпляр системы HRlink на отдельном домене (например, company.hr-link.ru). Внутри одного тенанта может быть несколько пространств клиентов.. Переименовать сущность нельзя — это сломает существующие интеграции, поэтому в URL, телах запросов и ответах вы будете встречать слово client именно в этом техническом значении.

ТенантTenant Экземпляр системы HRlink на отдельном домене (например, company.hr-link.ru). Внутри одного тенанта может быть несколько пространств клиентов. HRlink — это ваш экземпляр системы на отдельном домене, например company.hr-link.ru. Внутри одного тенантаTenant Экземпляр системы HRlink на отдельном домене (например, company.hr-link.ru). Внутри одного тенанта может быть несколько пространств клиентов. может быть несколько клиентов (client) — изолированных пространств. Каждый клиент — отдельная структура со своим набором юридических лиц, организационных структур, сотрудников, документов, маршрутов подписания и настроек.

Данные клиентов не пересекаются: сотрудники, документы и настройки одного клиента недоступны в контексте другого. Поэтому почти каждый запрос к API требует clientId — он указывает, с каким именно пространством клиента вы работаете.

Типичная структура:

Тенант (company.hr-link.ru)
├── Клиент A ← clientId: aaa-...
│ ├── Юрлицо — ООО «Альфа»
│ ├── Юрлицо — ООО «Альфа-Сервис»
│ ├── оргструктура
│ ├── сотрудники
│ ├── документы
│ └── маршруты подписания
├── Клиент B ← clientId: bbb-...
│ ├── Юрлицо — ООО «Бета»
│ ├── оргструктура
│ ├── сотрудники
│ ├── документы
│ └── маршруты подписания
└── ...

Один клиент может объединять несколько юридических лиц — например, группу компаний с общим кадровым учётом.

Как получить clientId

Вызовите Текущий пользователь. В ответе найдите массив currentUser.clientUsers — у каждого элемента есть объект client с полем id. Это и есть clientId для подстановки в URL.

{
"result": true,
"currentUser": {
"clientUsers": [
{
"client": {
"id": "668a634a-c4e9-4416-a481-656c3f17ea06",
"name": "Название клиента"
}
}
]
}
}

Формат запросов и ответов

API работает с JSON по умолчанию. Формат можно указать двумя способами:

Через заголовки HTTP

Content-Type: application/json
Accept: application/json

Через параметр format

GET /api/v2/currentUser?format=JSON

Поддерживаемые значения: JSON, XML.

Структура ответа

Все ответы API содержат поле result. Остальные поля зависят от метода: например, Текущий пользователь возвращает currentUser, а Получить сотрудниковemployees.

Успешный ответ

{
"result": true,
"currentUser": {
"clientUsers": []
}
}

Ответ с ошибкой

{
"result": false,
"errorId": "ea244925-8316-4f7c-9047-895020e61720",
"errorMessage": "Описание ошибки",
"errorCode": "51.203",
"operationCode": "51.060"
}
ПолеОписание
resulttrue — успех, false — ошибка
errorIdUUID ошибки (для обращения в поддержку)
errorMessageТекстовое описание ошибки
errorCodeКод ошибки
operationCodeКод операции

Общие заголовки

ЗаголовокОписаниеОбязательность
User-Api-TokenТокен пользователяОдин из способов аутентификации
Master-Api-TokenМастер-токенMaster-Api-Token Мастер-токен для M2M-интеграций. Позволяет выполнять запросы от имени любого пользователя системы через заголовки Impersonated-User-Id. Получается через ESA с помощью сертификата интегратора.Один из способов аутентификации
Impersonated-User-IdIDid Внутренний идентификатор сущности в формате UUID, генерируемый HRlink при создании. Неизменяемый, используется во всех внутренних операциях. пользователя, от имени которого выполняется запросПри использовании мастер-токенаMaster-Api-Token Мастер-токен для M2M-интеграций. Позволяет выполнять запросы от имени любого пользователя системы через заголовки Impersonated-User-Id. Получается через ESA с помощью сертификата интегратора.
Impersonated-User-Id-TypeТип IDid Внутренний идентификатор сущности в формате UUID, генерируемый HRlink при создании. Неизменяемый, используется во всех внутренних операциях.: HR_LINK_ID, SNILS, EXTERNAL_IDПри использовании мастер-токенаMaster-Api-Token Мастер-токен для M2M-интеграций. Позволяет выполнять запросы от имени любого пользователя системы через заголовки Impersonated-User-Id. Получается через ESA с помощью сертификата интегратора.
Content-TypeТип контентаДля POST/PUT запросов
AcceptОжидаемый формат ответаРекомендуется

Пагинация

Эндпоинты, возвращающие списки, поддерживают пагинацию через параметры:

ПараметрОписаниеПо умолчанию
limitКоличество элементов в ответе50
offsetСмещение от начала списка0
Значение limit по умолчанию

Стандартное значение limit50. Для отдельных эндпоинтов значение по умолчанию другое — смотрите спецификацию конкретного эндпоинта. В on-premise поставках администратор меняет значение по умолчанию через конфигурацию сервера.

Пример для метода Получить сотрудников:

POST /api/v1/clients/{clientId}/employees/getRegistry HTTP/1.1
Host: {tenantHost}
Accept: application/json
Content-Type: application/json
User-Api-Token: {token}

{"limit":50,"offset":0}

Версионирование эндпоинтов

У эндпоинта может быть несколько версий (v1, v2, ... v5). HRlink выпускает новую версию, когда меняется контракт — структура запроса или ответа. Старые версии продолжают работать без изменений: HRlink гарантирует обратную совместимость. Переходите на новую версию, только если вам нужна функциональность, которую в ней добавили.

Какую версию использовать

Используйте последнюю доступную версию эндпоинта. Она содержит все улучшения и исправления. Например, если доступны updateEmployeeByExternalIdV2 ... V5, используйте V5.

HTTP-статусы

СтатусОписание
200Успешная операция
400Некорректный запрос (невалидные данные)
401Не аутентифицирован (невалидный или отсутствующий токен)
403Нет прав доступа
404Ресурс не найден
429Слишком много запросов (rate limiting)
Rate limiting

Лимит запросов на тенантTenant Экземпляр системы HRlink на отдельном домене (например, company.hr-link.ru). Внутри одного тенанта может быть несколько пространств клиентов. адаптивный — порог подстраивается под текущую нагрузку и долю тяжёлых операций. При превышении сервер возвращает 429. Заголовков Retry-After / X-RateLimit-* нет — используйте экспоненциальный backoff с jitter. Подробнее про все лимиты API: Ограничения.

Что дальше

  1. Настройте аутентификацию — получите токен для запросов
  2. Выполните первый запрос — проверьте подключение
  3. Изучите модель данных — поймите структуру сущностей