Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Pipelines (or the equivalent in your system) should be synced to the Middleware Platform whenever they are created or updated in your CRM. We define a pipeline as any feature that is used for nurturing and sourcing candidates. Other terms for pipeline include talent pool and folder. When a customer activates CRM Connect for the first time, you must sync all of their historical data to LinkedIn to power the integration.
Prerequisites and Requirements
- Query Tunneling -- Requests require query tunneling if the request URL is larger than LinkedIn's maximum URL length. See Query Tunneling and Migration Guide - Updated API Request Maximum Length for more details.
- Compliance with LinkedIn API Breaking Change Policy
- Usage of the Client Credential Flow (2-legged OAuth) for authentication.
- Usage of the Versioning request format for endpoints and methods that require it as defined in this document.
Throttle Limits
Throttle Limits | Requests Per Day (UTC) | Records Per Minute |
---|---|---|
Pipelines maximum | 100,000 | 10,000 |
Note
Please submit batch calls grouped with no more than 100 records in sequential order.
Sync Pipelines API Endpoint
https://api.linkedin.com/rest/tcrmPipelines
Sync Pipelines API Query String Parameters
Parameter | Description | Type | Required |
---|---|---|---|
tcrmPipelineId | Pipeline identifier within external Talent CRM | String | Required |
integrationContext | LinkedIn company URN provided during customer onboarding, e.g. urn:li:organization:1 |
String | Required |
dataProvider | Hardcoded, this value is always PARTNER |
String | Required |
Sync Pipelines via Batch Update
Perform HTTP PUT
on the /tcrmPipelines
endpoint to send talent CRM pipelines to LinkedIn. Batch requests require the x-restli-method: batch_update
header. Multiple records can be sent in a single API request as indicated in the example below.
Sync Pipelines Request Body Fields
Field | Description | Format | Required |
---|---|---|---|
accessRestricted | Flag indicating whether the pipeline is restricted by ACL. If true, the pipeline is only accessible to a set of Recruiter users specified via ACLs. If false, the pipeline is accessible to all Recruiter users. (Default value: false ) |
boolean | Optional |
description | Description of the pipeline. | String | Optional |
externalJobPostingIds | List of unique external job IDs for the jobs that are in the pipeline. | String[] | Optional |
locations | Locations for this pipeline. | String[] | Optional |
ownerEmailAddress | Email address of the owner of this pipeline. | String | Optional |
ownerFirstName | First name of the owner of this pipeline. | String | Optional |
ownerLastName | Last name of the owner of this pipeline. | String | Optional |
pipelineState | The state for this pipeline (i.e. whether this pipeline is open or closed). Possible values:
|
Enum | Required |
skills | Skills required for candidates in this pipeline. | String[] | Optional |
title | Title of the pipeline. | String | Required |
tcrmCreatedAt | Time when this pipeline was created within external CRM. | Long | Required |
tcrmLastModifiedAt | The timestamp when the content was last modified within external CRM, in milliseconds since Unix Epoch. | Long | Required |
Sample Sync Pipelines API Request
curl -i -X PUT 'https://api.linkedin.com/rest/tcrmPipelines?ids%5B0%5D.tcrmPipelineId=tcrmPipelineid300&ids%5B0%5D.integrationContext=urn:li:organization:1234567890&ids%5B0%5D.dataProvider=ATS&ids%5B1%5D.tcrmPipelineId=tcrmPipelineid400&ids%5B1%5D.integrationContext=urn:li:organization:1234567890&ids%5B1%5D.dataProvider=ATS' \
--header 'x-restli-method: batch_update' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {access_token}' \
--header 'LinkedIn-Version: 202406' \
--data-raw '{
"entities": {
"tcrmPipelineId=tcrmPipelineid300&dataProvider=PARTNER&integrationContext=urn:li:organization:1234567890": {
"accessRestricted": true,
"description": "Java/C++ engineers pipeline",
"externalJobPostingIds": ["extJobPostingId01","extJobPostingId02"],
"locations": ["NYC","San Francisco"],
"ownerEmailAddress": "ethan@example.com",
"ownerFirstName": "Ethan",
"ownerLastName": "Allen",
"pipelineState": "OPEN",
"skills": ["c++","java"],
"title": "Java/C++ Engineers",
"tcrmCreatedAt": 1670935153,
"tcrmLastModifiedAt": 1670935160
},
"tcrmPipelineId=tcrmPipelineid400&dataProvider=PARTNER&integrationContext=urn:li:organization:1234567890": {
"description": "Testing for pipeline 400.. Only for testing purposes",
"externalJobPostingIds": ["extJobPostingId03","extJobPostingId04"],
"locations": ["NJ","CA"],
"ownerEmailAddress": "andy@example.com",
"ownerFirstName": "Andy",
"ownerLastName": "Smith",
"pipelineState": "OPEN",
"private": true,
"skills": ["c","python"],
"title": "Python and C Engineers",
"tcrmCreatedAt": 1670935153,
"tcrmLastModifiedAt": 1670935160
}
}
}'
Sample Sync PipelinesAPI Response
{
"results": {
"dataProvider=PARTNER&integrationContext=urn%3Ali%3Aorganization%3A1000&tcrmPipelineId=tcrmPipelineid300": {
"status": 204
},
"dataProvider=PARTNER&integrationContext=urn%3Ali%3Aorganization%3A1000&tcrmPipelineId=tcrmPipelineid400": {
"status": 204
}
},
"errors": {}
}
Delete Pipelines
Perform HTTP DELETE
on the /tcrmPipelines
endpoint when a customer deletes candidate pipeline records.
Sample Delete Pipelines Request
curl -i -X DELETE "https://api.linkedin.com/rest/tcrmPipelines?ids%5B0%5D.tcrmPipelineId=tcrmPipelineId300&ids%5B0%5D.integrationContext=urn:li:organization:1234567890&ids%5B0%5D.dataProvider=PARTNER&ids%5B1%5D.tcrmPipelineId=tcrmPipelineId400&ids%5B1%5D.integrationContext=urn:li:organization:1234567890&ids%5B1%5D.dataProvider=PARTNER" \
--header 'Authorization: Bearer {access_token}' \
-H 'X-RestLi-Protocol-Version:1.0.0' \
-H 'Accept:application/json' \
-H 'LinkedIn-Version: 202406'
Sample Delete Pipeline Response Body
A successful request will return a 200 OK
response code, and you will find the status of each entity in the response body.
{
"results": {
"dataProvider=PARTNER&integrationContext=urn%3Ali%3Aorganization%3A1000&tcrmPipelineId=tcrmPipelineId400": {
"status": 204
},
"dataProvider=PARTNER&integrationContext=urn%3Ali%3Aorganization%3A1000&tcrmPipelineId=tcrmPipelineId300": {
"status": 204
}
},
"errors": {}
}