Share via


Sync Candidate Pipeline Information

The Candidate Pipeline endpoint represents information about a candidate that is specific to a single pipeline. A candidate’s pipeline information should be synced to the Middleware Platform whenever a candidate is added to, removed from, or updated inside a pipeline in your CRM. When a customer activates CRM Connect for the first time, you must sync all of their historical data to LinkedIn to power the integration.

Throttle Limits

Throttle Limits Requests Per Day (UTC) Records Per Minute
Candidate Pipelines maximum 100,000 10,000

Note

Please submit batch calls grouped with no more than 100 records in sequential order.

Sync Candidate Pipelines API Endpoint

https://api.linkedin.com/v2/tcrmCandidatePipelines

Candidate Pipelines API Query String Parameters

Parameter Description Type Required
tcrmCandidateId Candidate identifier within external Talent CRM String 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 Candidate Pipelines via Batch Update

Perform HTTP PUT on the /tcrmCandidatePipelines endpoint to sync candidate pipeline associations 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 Candidate Pipelines API Request Body Fields

Field Description Type Required
dispositionReason The reason that the candidate was removed from the pipeline (e.g., “candidate declined,” “not a fit,” etc.) String Optional
sources Contains sourceDetails and source Category. Complex Required
sources.sourceCategory Category of where the candidate originated from. Must be one of these source categories:
  • LINKEDIN
  • EMAIL
  • SOCIAL_MEDIA
  • EVENT
  • CAREER_SITE
  • AGENCY
  • REFERRAL
  • INTERNAL
  • JOB_POSTING
  • OTHER
ENUM Required
sources.sourceDetails Where the candidate originated from (i.e. LinkedIn, Career Event, etc). String Required
tcrmCreatedAt Time when this candidate was put in this pipeline within external CRM. Time Required
tcrmLastModifiedAt The timestamp when the content was last modified within external CRM, in milliseconds since Unix Epoch. Time Required

Sample Batch Update Candidate Pipelines API Request

curl -i -X PUT 'https://api.linkedin.com/v2/tcrmCandidatePipelines?ids%5B0%5D.tcrmCandidateId=tcrmCandidateId100&ids%5B0%5D.integrationContext=urn:li:organization:1234567890&ids%5B0%5D.dataProvider=PARTNER&ids%5B0%5D.tcrmPipelineId=tcrmPipeline05&ids%5B1%5D.tcrmCandidateId=tcrmCandidateId100&ids%5B1%5D.integrationContext=urn:li:organization:1234567890&ids%5B1%5D.dataProvider=PARTNER&ids%5B1%5D.tcrmPipelineId=tcrmPipeline06' \
--header 'x-restli-method: batch_update' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {access_token}' \
--data-raw '
{
    "entities": {
    "tcrmCandidateId=tcrmCandidateId100&dataProvider=PARTNER&integrationContext=urn:li:organization:1234567890&tcrmPipelineId=tcrmPipeline05": {
        "dispositionReason": "Disposition Reason",
                "sources": [{
                    "sourceCategory": "CAREER_SITE",
                    "sourceDetails": "Applied through career site"
                }],
                "tcrmCreatedAt": 1640995200000,
                "tcrmLastModifiedAt": 1640995200000
        },
        "tcrmCandidateId=tcrmCandidateId100&dataProvider=PARTNER&integrationContext=urn:li:organization:1234567890&tcrmPipelineId=tcrmPipeline06": {
        "dispositionReason": "Disposition Reason",
                "sources": [{
                    "sourceCategory": "CAREER_SITE",
                    "sourceDetails": "Applied through career site"
                }],
                "tcrmCreatedAt": 1640995200000,
                "tcrmLastModifiedAt": 1640995200000
        }
    }
}

Sample Batch Update Candidate Pipelines API Response

{
    "results": {
        "dataProvider=PARTNER&integrationContext=urn%3Ali%3Aorganization%3A1234567890&tcrmCandidateId=tcrmCandidateId100&tcrmPipelineId=tcrmPipeline05": {
            "status": 204
        },
        "dataProvider=PARTNER&integrationContext=urn%3Ali%3Aorganization%3A1234567890&tcrmCandidateId=tcrmCandidateId100&tcrmPipelineId=tcrmPipeline06": {
            "status": 204
        }
    },
    "errors": {}
}

Delete Candidate Pipelines

Perform HTTP DELETE on the /tcrmCandidatePipelines endpoint when a customer deletes candidate pipeline records.

Sample Delete Candidate Pipelines Request

curl -i -X DELETE "https://api.linkedin.com/v2/tcrmCandidatesPipelines?ids%5B0%5D.tcrmCandidateId=tcrmCandidateId100&ids%5B0%5D.integrationContext=urn:li:organization:1234567890&ids%5B0%5D.dataProvider=PARTNER&ids%5B0%5D.tcrmPipelineId=tcrmPipeline05&ids%5B1%5D.tcrmCandidateId=tcrmCandidateId100&ids%5B1%5D.integrationContext=urn:li:organization:1234567890&ids%5B1%5D.dataProvider=PARTNER&ids%5B1%5D.tcrmPipelineId=tcrmPipeline06" \
--header 'Authorization: Bearer {access_token}' \
-H 'X-RestLi-Protocol-Version:1.0.0' \
-H 'Accept:application/json' 

Sample Delete Candidate Pipeline Response

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%3A1234567890&tcrmCandidateId=tcrmCandidateId100&tcrmPipelineId=tcrmPipeline05": {
            "status": 204
        },
        "dataProvider=PARTNER&integrationContext=urn%3Ali%3Aorganization%3A1234567890&tcrmCandidateId=tcrmCandidateId100&tcrmPipelineId=tcrmPipeline06": {
            "status": 204
        }
    },
    "errors": {}
}