Talent Hub Assessments 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 configure customer assessment integrations, use your application credentials to call the following API:
POST https://api.linkedin.com/v2/hireThirdPartyExtensions/hiringContext={hiringContext}&extensionType={extensionType}&extensionProvider=THIRD_PARTY
Talent Hub customer integration is uniquely identified by a combination of the fields below::
Field Name | Description | Type |
---|---|---|
hiringContext | Hiring context of the customer with formaturn:li:contract:123 |
URN |
extensionType | Enum indicating integration typeTHIRD_PARTY_ASSESSMENT |
Enum |
extensionProvider | You should always supply THIRD_PARTY for this field. |
Enum |
Request Body Fields
Field Name | Description | Type | Required |
---|---|---|---|
availableThirdPartyAssessmentTests | Assessment tests available for the customer to choose. Default is empty array. Use empty array if this is not applicable to your extension. |
Array of AvailableThirdPartyAssessmentsTest | No |
AvailableThirdPartyAssessmentsTest
Field Name | Description | Type | Required |
---|---|---|---|
id | Unique identifier of the test within your system. | String | Yes |
displayName | Multi-locale string of the name of the assessment test. | Object | Yes |
categories | Categories the assessment test is associated with. | String | No |
Sample Request
Headers:
Authorization: Bearer {access_token}
x-restli-method: partial_update
{
"patch": {
"$set": {
"providerConfiguration": {
"assessmentConfiguration": {
"availableThirdPartyAssessmentTests": [{
"id": "TEST_1305",
"displayName": {
"localized": {
"en_US": "Lorem Ipsum 1"
}
},
"categories": [{
"localized": {
"en_US": "Backend Engineer"
}
},
{
"localized": {
"en_US": "Fullstack Engineer"
}
}]
},{
"id": "TEST_1401",
"displayName": {
"localized": {
"en_US": "Lorem Ipsum 2"
}
},
"categories": [{
"localized": {
"en_US": "Frontend Engineer"
}
},
{
"localized": {
"en_US": "Fullstack Engineer"
}
}]
}]
}
}
}
}
}
Note
A successful request will return a 204
response code.
Receive a Push Event from LinkedIn
When a customer creates an assessment request on LinkedIn with your integration, LinkedIn will send a push notification to your callback URL registered during the onboarding process, discussed in the Getting Started documentation. See Receiving Push Notifications for how to validate the request.
POST https://{your application’s registered callback URL}
Request Body Fields
Field Name | Description | Type | Required |
---|---|---|---|
assessmentId | Unique id representing the assessment request for a candidate. | String | Yes |
candidate.emailAddress | Email address of the candidate being assessed. | String | Yes |
candidate.firstName | First name of the candidate being assessed. | String | Yes |
candidate.lastName | Last name of the candidate being assessed. | String | Yes |
hiringContext | Hiring context of the customer in the format of urn:li:contract:123 |
URN | Yes |
requester.emailAddress | Email address of the requester. | String | Yes |
thirdPartyAssessmentTestId | Unique id representing the test selected by customer. | String | Yes |
type | Type of the push event: CREATE_THIRD_PARTY_ASSESSMENT in this case. |
Enum | Yes |
Sample Request
"Content-Type": "application/json",
"X-LI-Signature": "d3756e445a8065c0f38c2182c502f822981fdf152af867e6f",
"Content-Length": "107",
"Connection": "Keep-Alive",
"Accept-Encoding": "gzip,deflate"
{
"assessmentId":"ABcdEF123456ABcdEF123456ABcdEF123456ABcdEF123456ABcdEF123456ABcdEF12345=",
"hiringContext":"urn:li:contract:123",
"type":"CREATE_THIRD_PARTY_ASSESSMENT",
"thirdPartyAssessmentTestId":"TEST_123",
"candidate":{
"firstName":"test",
"lastName":"candidate",
"emailAddress":"test-candidate@outlook.com"
},
"requester":{
"emailAddress":"test-requester@outlook.com"
}
}
Note
If a push event sent to the registered callback URL receives an unsuccessful response (anything other than “200 OK”), LinkedIn will retry sending the request up to six times.
Update Third-Party Assessment Information
Use the following API under given circumstances:
- After generating an assessment entity in your system, use your application credentials to call the API to update the third-party assessment link and status as
INITIATED
- When the candidate starts assessment test, use the API to update start time and status to
IN_PROGRESS
- When the assessment is expired at provider's end, update the status to
EXPIRED
- When the assessment is completed by the candidate, update the third-party assessment end time, score, result, and status as
COMPLETED
POST https://api.linkedin.com/v2/hireThirdPartyAssessments/hiringContext={hiringContext}&id={id}&extensionProvider=THIRD_PARTY
Any third-party assessment 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 push event. |
URN |
extensionProvider | You should always supply THIRD_PARTY for this field. |
Enum |
id | Unique identifier of the third-party assessment test created within the domain of the contract obtained from push event. | String |
Request Body Fields
Field Name | Description | Type | Required |
---|---|---|---|
assessmentTestUrl | URL to view this assessment in your system. LinkedIn customers will be able to use this link to redirect to your system to view the progress and results of this assessment. | Url | Yes |
status | Enum indicating the status of the third-party assessment: INITIATED ,IN_PROGRESS , COMPLETED , EXPIRED , NEEDS_MANUAL_REVIEW , PROVIDER_EXCEPTION |
Enum | Yes |
thirdPartyProviderExceptionType | Optional enum that represents the type of exception on provider side. This should be provided only when the status is PROVIDER_EXCEPTION Valid values are CANDIDATE_INVITATION_FAILED , USER_NOT_ELIGIBLE , INVITE_ALREADY_SENT , ACCOUNT_NOT_ELIGIBLE , AUTHENTICATION_FAILURE , TEMPORARILY_UNAVAILABLE , SERVER_ERROR |
Enum | No |
thirdPartyAssessmentScore | Assessment test score. You can supply “84/100”, “3/10” or any free text within the length limit, not exceeding 100 characters. This should be provided for status COMPLETED |
String | No |
thirdPartyAssessmentTestRating | Optional enum of assessment test results. Values are IN_RANGE or OUT_OF_RANGE . This should be provided for status COMPLETED and only if the customer has set up a clear cutoff on partner platform. If cutoff is not defined or is set to default value of zero, do not provide this field. |
Enum | No |
thirdPartyAssessmentTestDuration | Object including assessment test start and end time. This should be provided for status IN_PROGRESS or COMPLETED |
Object | No |
assessmentExpiredAt | Unix epoch time in milliseconds when assessment expired. This should be provided only when status is EXPIRED. This should be provided only when the status is EXPIRED |
Epoch in Milliseconds (UTC) | No |
Status
Enum Value | Description |
---|---|
INITIATED | Use this enum after generating the assessment in your system. |
IN_PROGRESS | Use this enum when the candidate starts the assessment. |
COMPLETED | Use this enum when the candidate completes the assessment. |
EXPIRED | Use this enum when the candidate’s assessment expired. When providing this status, it is also mandatory to provide the value to the ‘assessmentExpiredAt’ field |
NEEDS_MANUAL_REVIEW | Use this enum when the customer has opted for manual review before finalizing the assessment results. When providing this status, provide the correct 'assessmentTestUrl' field where the customer can review the report and take action. |
PROVIDER_EXCEPTION | Use this enum when an error occurs while processing the assessment. When providing this status, ensure that you provide the correct value for thirdPartyProviderExceptionType field. |
thirdPartyProviderExceptionType
Enum Value | Description |
---|---|
CANDIDATE_INVITATION_FAILED | Use this enum if the candidate invitation for taking assessment failed. For example, if the candidate's email address is invalid. |
USER_NOT_ELIGIBLE | Use this enum if the user who is requesting to send the assessment is not authorized to send assessments. |
INVITE_ALREADY_SENT | Use this enum if you detect that this user has already made a request to send out the specific assessment to the same candidate. We prefer if users can submit multiple requests if needed, but if your system does not allow that, this enum may be used. |
ACCOUNT_NOT_ELIGIBLE | Use this enum if the customer account is not eligible to send assessments. For example, if the customer does not have enough credits to send assessments. |
AUTHENTICATION_FAILURE | Use this enum if the customer credentials provided to access their account are invalid. |
TEMPORARILY_UNAVAILABLE | Use this enum if the service is under maintenance or temporarily unavailable. |
SERVER_ERROR | Use this enum if the server is not able to handle the request. |
ThirdPartyAssessmentTestDuration
Field Name | Description | Type | Required |
---|---|---|---|
assessmentStartedAt | Unix epoch time in seconds when candidate started the assessment test. | Epoch in seconds (UTC) | No |
assessmentEndedAt | Unix epoch time in seconds when candidate completed the assessment test. | Epoch in seconds (UTC) | No |
Sample Request for Status Initiated
When the assessment is initiated at provider's side, update the status to INITIATED
. In this case, the sample request will be as below:
Headers:
Authorization: Bearer {access_token}
x-restli-method: partial_update
Request Body:
{
"patch": {
"$set": {
"assessmentTestUrl": "https://www.provider-url.com/assessment/8204345-45dsg-4fay",
"status": "INITIATED"
}
}
}
Sample Request for Status In Progress
When the assessment is in progress at provider's side, update the status to IN_PROGRESS
. In this case, the sample request will be as below:
Headers:
Authorization: Bearer {access_token}
x-restli-method: partial_update
Request Body:
{
"patch": {
"$set": {
"status": "IN_PROGRESS"
}
}
}
Sample Request for Status Completed
When the assessment is completed at provider's side, update the status to COMPLETED
. In this case, the sample request will be as below:
Headers:
Authorization: Bearer {access_token}
x-restli-method: partial_update
Request Body:
{
"patch": {
"$set": {
"status": "COMPLETED",
"thirdPartyAssessmentScore": {
"localized": {
"en_US": "8/10"
}
},
"thirdPartyAssessmentTestRating": "IN_RANGE",
"thirdPartyAssessmentTestDuration": {
"assessmentStartedAt": 1576184642343,
"assessmentEndedAt": 1577855383543
}
}
}
}
Sample Request for Status Expired
When the assessment is expired at provider's side, update the status to EXPIRED
. In this case, the sample request will be as below:
Headers:
Authorization: Bearer {access_token}
x-restli-method: partial_update
Request Body:
{
"patch": {
"$set": {
"assessmentTestUrl": "https://www.provider-url.com/assessment/8204345-45dsg-4fay",
"assessmentExpiredAt":1576184642343,
"status": "EXPIRED"
}
}
}
Rate Limits and Throttling
All of LinkedIn’s APIs 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 |