Первый запрос
Проверим подключение к API двумя запросами: получим текущего пользователя и список сотрудников.
Подготовка
Вам потребуется:
tenantHost— адрес тенантаTenant Экземпляр системы HRlink на отдельном домене (например, company.hr-link.ru). Внутри одного тенанта может быть несколько пространств клиентов. HRlink (например,company.hr-link.ru). HRlink выдаёт адрес при покупке лицензии- Токен аутентификации — пользовательский или мастер-токенMaster-Api-Token Мастер-токен для M2M-интеграций. Позволяет выполнять запросы от имени любого пользователя системы через заголовки Impersonated-User-Id. Получается через ESA с помощью сертификата интегратора. (см. Аутентификация)
clientId получим из первого же запроса.
Шаг 1. Получить текущего пользователя
- User-Api-Token
- Master-Api-Token
- curl
- PowerShell
- HTTP
curl -X GET "https://{tenantHost}/api/v2/currentUser" \
-H "Accept: application/json" \
-H "User-Api-Token: {ваш_токен}"
Invoke-RestMethod `
-Method GET `
-Uri "https://{tenantHost}/api/v2/currentUser" `
-Headers @{
"Accept" = "application/json"
"User-Api-Token" = "{ваш_токен}"
}
GET /api/v2/currentUser HTTP/1.1
Host: {tenantHost}
Accept: application/json
User-Api-Token: {ваш_токен}
- curl
- PowerShell
- HTTP
curl -X GET "https://{tenantHost}/api/v2/currentUser" \
-H "Accept: application/json" \
-H "Master-Api-Token: {мастер_токен}" \
-H "Impersonated-User-Id: {userId}" \
-H "Impersonated-User-Id-Type: HR_LINK_ID"
Invoke-RestMethod `
-Method GET `
-Uri "https://{tenantHost}/api/v2/currentUser" `
-Headers @{
"Accept" = "application/json"
"Master-Api-Token" = "{мастер_токен}"
"Impersonated-User-Id" = "{userId}"
"Impersonated-User-Id-Type" = "HR_LINK_ID"
}
GET /api/v2/currentUser HTTP/1.1
Host: {tenantHost}
Accept: application/json
Master-Api-Token: {мастер_токен}
Impersonated-User-Id: {userId}
Impersonated-User-Id-Type: HR_LINK_ID
Если используете мастер-токенMaster-Api-Token Мастер-токен для M2M-интеграций. Позволяет выполнять запросы от имени любого пользователя системы через заголовки Impersonated-User-Id. Получается через ESA с помощью сертификата интегратора., укажите, от чьего имени выполняется запрос: передайте заголовки Impersonated-User-Id и Impersonated-User-Id-Type. Подробнее — в разделе Заголовки для работы от имени пользователя.
Ответ:
{
"result": true,
"currentUser": {
"personalData": {
"id": "a1b2c3d4-1111-2222-3333-444455556666",
"lastName": "Иванов",
"firstName": "Иван",
"patronymic": "Иванович",
"email": "ivanov@company.ru",
"lifeTimeGroup": "GT1YLET3Y"
},
"clientUsers": [
{
"id": "d4e5f6a7-1111-2222-3333-444455556666",
"externalId": "CU-001",
"client": {
"id": "668a634a-c4e9-4416-a481-656c3f17ea06",
"name": "ООО Компания"
},
"roles": [],
"registrySettings": []
}
],
"digitalSignatureData": {
"certificates": [],
"govKeySigningEnabled": false,
"qesSigningEnabled": false
},
"permissions": {
"userPermissions": [],
"clientPermissions": []
}
}
}
В ответе найдите массив currentUser.clientUsers — у каждого элемента есть объект client с полем id. Используйте этот id как clientId в URL последующих запросов.
Шаг 2. Получить список сотрудников
Подставьте clientId из предыдущего шага в URL:
- User-Api-Token
- Master-Api-Token
- curl
- PowerShell
- HTTP
curl -X POST "https://{tenantHost}/api/v1/clients/{clientId}/employees/getRegistry" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "User-Api-Token: {ваш_токен}" \
-d '{"limit":10,"offset":0}'
Invoke-RestMethod `
-Method POST `
-Uri "https://{tenantHost}/api/v1/clients/{clientId}/employees/getRegistry" `
-Headers @{
"Accept" = "application/json"
"User-Api-Token" = "{ваш_токен}"
} `
-ContentType "application/json" `
-Body '{"limit":10,"offset":0}'
POST /api/v1/clients/{clientId}/employees/getRegistry HTTP/1.1
Host: {tenantHost}
Accept: application/json
Content-Type: application/json
User-Api-Token: {ваш_токен}
{"limit":10,"offset":0}
- curl
- PowerShell
- HTTP
curl -X POST "https://{tenantHost}/api/v1/clients/{clientId}/employees/getRegistry" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Master-Api-Token: {мастер_токен}" \
-H "Impersonated-User-Id: {userId}" \
-H "Impersonated-User-Id-Type: HR_LINK_ID" \
-d '{"limit":10,"offset":0}'
Invoke-RestMethod `
-Method POST `
-Uri "https://{tenantHost}/api/v1/clients/{clientId}/employees/getRegistry" `
-Headers @{
"Accept" = "application/json"
"Master-Api-Token" = "{мастер_токен}"
"Impersonated-User-Id" = "{userId}"
"Impersonated-User-Id-Type" = "HR_LINK_ID"
} `
-ContentType "application/json" `
-Body '{"limit":10,"offset":0}'
POST /api/v1/clients/{clientId}/employees/getRegistry HTTP/1.1
Host: {tenantHost}
Accept: application/json
Content-Type: application/json
Master-Api-Token: {мастер_токен}
Impersonated-User-Id: {userId}
Impersonated-User-Id-Type: HR_LINK_ID
{"limit":10,"offset":0}
Получение сотрудников — POST, хотя по смыслу это чтение данных. Тело запроса обязательно. Если фильтры и пагинация не нужны, передайте пустой объект {}. В примерах limit и offset передаются в JSON-теле.
Ответ:
{
"result": true,
"employees": [
{
"id": "b2c3d4e5-1111-2222-3333-444455556666",
"externalId": "EMP-001",
"clientUser": {
"id": "d4e5f6a7-1111-2222-3333-444455556666",
"externalId": "CU-001",
"userId": "a1b2c3d4-1111-2222-3333-444455556666"
},
"legalEntity": {
"id": "c3d4e5f6-1111-2222-3333-444455556666",
"externalId": "LE-001"
},
"department": {
"id": "e5f6a7b8-1111-2222-3333-444455556666",
"name": "IT-отдел"
},
"position": {
"id": "f6a7b8c9-1111-2222-3333-444455556666",
"name": "Разработчик"
},
"lastName": "Иванов",
"firstName": "Иван",
"patronymic": "Иванович",
"version": 3
}
]
}
Поля limit и offset управляют пагинацией.
Типичные ошибки
401 Unauthorized
Невалидный или просроченный токен.
| Ситуация | Что проверить |
|---|---|
| Пользовательский токен | Срок действия — 1 год. Возможно, токен истёк, владелец уволен или сбросил пароль |
| Master-Api-TokenMaster-Api-Token Мастер-токен для M2M-интеграций. Позволяет выполнять запросы от имени любого пользователя системы через заголовки Impersonated-User-Id. Получается через ESA с помощью сертификата интегратора. | Указаны ли оба заголовка Impersonated-User-Id и Impersonated-User-Id-Type. Не истёк ли мастер-токенMaster-Api-Token Мастер-токен для M2M-интеграций. Позволяет выполнять запросы от имени любого пользователя системы через заголовки Impersonated-User-Id. Получается через ESA с помощью сертификата интегратора. (код 22.015) |
Полный список кодов ошибок аутентификации — в разделах Ошибки аутентификации и Перевыпуск токенов.
403 Forbidden
У пользователя нет прав на эту операцию. Проверьте:
- пользователь относится к указанному
clientId - у пользователя есть роль кадровика (HR) для доступа к реестру сотрудников
Доступные данные зависят от прав пользователя, указанного в Impersonated-User-Id. Если у пользователя нет роли кадровика — он увидит только ограниченный набор данных.
400 Bad Request
Невалидный формат данных. Проверьте:
clientIdпередан в формате UUID- в теле POST-запроса есть хотя бы
{} - JSON корректен (нет лишних запятых, кавычки двойные)
Что дальше
- Идентификаторы — разница между
idиexternalId - Модель данных — сущности userUser Физическое лицо в системе HRlink. Один User соответствует одному реальному человеку. С пользователем связаны персональные данные, документы (СНИЛС, паспорт, ИНН) и логины (email, телефон)., clientUserClientUser Связь пользователя с пространством клиента — пара (userId, clientId). Один пользователь может относиться к нескольким клиентам, но в одном клиенте встречается только один раз., employeeEmployee Связь пользователя пространства клиента с юрлицом — пара (clientUserId, legalEntityId). Один пользователь может иметь несколько записей Employee в разных юрлицах или даже в одном.
- Синхронизация сотрудников — загрузите организационную структуру
- Отправка документов — отправьте первый документ на подписание