Talent Hub HRIS Integration
Note
The use of this API is restricted to those developers approved by LinkedIn and subject to applicable data restrictions in their agreements.
This integration requires a partnership; please reach out to your LinkedIn Relationship Manager or Business Development contact as you will need to meet certain criteria and sign an API agreement to use this integration.
If you are not yet a LinkedIn Talent Solutions Partner, please complete the LinkedIn Talent Solutions Partner Request Form.
Configure Customer Integration
To export candidate profile to your Human Resource Information System (HRIS), follow the steps mentioned in the Getting Started documentation to register and enable your integration. Once the integration is successfully enabled, users can export the profile to your HRIS.
Create a Third Party HRIS Export Request
Users can create a third party HRIS export request for a hired candidate in LinkedIn Talent Hub.
Receive a Push Event from LinkedIn
When a customer creates an HRIS export request on LinkedIn with your integration, LinkedIn will send a push notification to your callback URL registered during the onboarding process, discussed in the partner onboarding document. See Receiving Push Notifications for how to validate the request.
POST https://{your application’s registered callback URL}
Payload Fields
Field Name | Description | Type | Required |
---|---|---|---|
hrisRequestId | Unique id representing the HRIS export request for a candidate | String | Yes |
hiringContext | Hiring context of the customer in the format of urn:li:contract:123 . |
URN | Yes |
type | Type of the push event: CREATE_THIRD_PARTY_HRIS_EXPORT_PROFILE_REQUEST in this case. |
Enum | Yes |
expiresAt | Time when this request will expire. If not provided, the request will never expire. | Time (Epoch) | Yes |
"Content-Type": "application/json",
"X-LI-Signature": "d3756e445a8065c0f38c2182c502f822981fdf152af867e6f",
"Content-Length": "107",
"Connection": "Keep-Alive",
"Accept-Encoding": "gzip,deflate"
{
"hrisRequestId": "ODE1OGNkNzItYzUxNi00MjBkLTlhMT",
"hiringContext": "urn:li:contract:123",
"type": "CREATE_THIRD_PARTY_HRIS_EXPORT_PROFILE_REQUEST",
"expiresAt": 1481402799192
}
Note
If a push event sent to the registered callback URL receives an unsuccessful response (something other than “200 OK”), LinkedIn will retry sending the request up to six times.
Retrieve HRIS Candidate Profile Information
When the callback URL has received a notification event of CREATE_THIRD_PARTY_HRIS_EXPORT_PROFILE_REQUEST
type, you should then make an API call to retrieve the profile information of the candidate.
GET https://api.linkedin.com/v2/hireThirdPartyHrisProfiles/hiringContext={hiringContext}&hrisRequestId={hrisRequestId}&extensionProvider=THIRD_PARTY
Any third-party HRIS request is uniquely identified by a combination of the fields below:
Field Name | Description | Type |
---|---|---|
hiringContext | Hiring context of the customer in the format of urn:li:contract:123 obtained from HRIS export request |
URN |
hrisRequestId | Unique identifier of the third party HRIS request created within the domain of the hiring context obtained from HRIS export request | String |
extensionProvider | You should always supply “THIRD_PARTY” for this field. | Enum |
Response Fields
Field Name | Description | Type | Required |
---|---|---|---|
candidateProfile | HRIS candidate export profile. | Object | Yes |
requesterProfile | Profile of the user who requested to export the candidate profile. This field is decorated internally using enterprise profile and published to the partners. | Object | No |
requestedAt | Time when the candidate was exported. | Long (Number of milliseconds since midnight, January 1, 1970 UTC. It must be a positive number) | Yes |
jobTitle | Title of the job requisition. For example, Software Engineer. | String | No |
jobLocation | Location of the job requisition. | String | No |
startDate | Date when the candidate is expected to start work. If no start date is specified then the project start date for this requisition is considered as the candidate start date. | Date | Yes |
Candidate Profile Fields
Field Name | Description | Type | Required |
---|---|---|---|
firstName | The candidate’s first name. | String | Yes |
lastName | The candidate’s last name. | String | Yes |
phoneNumbers | List of phone number provided by the member. An empty array if not available. | Array of phoneNumber | Yes |
emailAddresses | Email address of candidate who is exported to Human Resource Information Systems. An empty array if not available. | Array of emailAddress | Yes |
Requester Profile Fields
Field Name | Description | Type | Required |
---|---|---|---|
firstName | First name of the requester. | String | No |
lastName | Last name of the requester. | String | No |
Phone Number Fields
Field Name | Description | Type | Required |
---|---|---|---|
number | The member's phone number. The maximum allowed length is 25. | String | Yes |
extension | The member's extension. | String | No |
Date Fields
Field Name | Description | Type | Required |
---|---|---|---|
day | Day in the format ##. | Integer | No |
month | Month in the format ##. | Integer | No |
year | Year in the format ####. | Integer | No |
Sample Response
Headers:
Authorization: Bearer {access_token}
"Content-Type": "application/json",
"Content-Length": "107",
"Connection": "Keep-Alive",
"Accept-Encoding": "gzip,deflate"
{
"candidateProfile": {
"firstName": "John",
"lastName": "Candidate",
"phoneNumbers": [
{
"number": "555-555-5555",
"extension": "1234"
}
],
"emailAddresses": [
"candidate@outlook.com"
]
},
"requesterProfile": {
"firstName": "Ed",
"lastName": "Requester"
},
"requestedAt": 1481402799192,
"jobTitle": "Software Engineer",
"jobLocation": "San Francisco Bay Area",
"startDate": {
"day": 12,
"month": 12,
"year": 2012
}
}
Update Record Generation Status
After retrieving the candidate profile information, use the following API to update the status of the record generation with the exported member in your system.
POST https://api.linkedin.com/v2/hireThirdPartyHrisProfiles/hiringContext={hiringContext}&hrisRequestId={hrisRequestId}&extensionProvider=THIRD_PARTY
A third-party hire assessment is uniquely identified by a combination of the fields below:
Field Name | Description | Type |
---|---|---|
hiringContext | Hiring context of the customer in the format of urn:li:contract:123 obtained from HRIS export request |
URN |
hrisRequestId | Unique identifier of the third party HRIS request created within the domain of the hiring context obtained from HRIS export request | String |
extensionProvider | You should always supply THIRD_PARTY for this field. |
Enum |
Request Body Fields
Field Name | Description | Type | Required |
---|---|---|---|
status | Enum indicating the status of the HRIS record creation. You should supply PROVIDER_EXCEPTION or COMPLETED in this case. |
Enum | Yes |
providerExceptionType | Optional enum representing type of exception happened on provider side if the provide marks the status as PROVIDER_EXCEPTION . Can be ACCOUNT_NOT_ELIGIBLE . |
Enum | No |
Sample Request Body
Headers:
Authorization: Bearer {access_token}
x-restli-method: partial_update
Request Body:
{
"patch": {
"$set": {
"status": "COMPLETED"
}
}
}
Rate Limits and Throttling
All of LinkedIn’s API are subject to rate limiting and throttling based on the number of requests made per unit time. The below limits apply to all API endpoints listed in this doc.
Throttle Limits | Request Per Day (UTC) | Action |
---|---|---|
Application Maximum (max requests per app) | 5000 | Calls will be rejected with a status code of 429 |