LinkedIn API
This guide will help you migrate the LinkedIn features of your application to API v2.
In Unipile v1, all LinkedIn-specific routes, whether related to Classic, Recruiter, or Sales navigator products, were grouped under the URL prefix linkedin. Now, each product (excluding Classic) has its own prefix to improve API organization.
For example, the search functionality previously had a single endpoint, linkedin/search. With the new endpoints structure, the endpoint linkedin/search is reserved for Classic, linkedin/recruiter/search for Recruiter, and linkedin/sales_navigator/search for Sales Navigator.
Methods changes
For each endpoint in the v1 API, here are the corresponding endpoints in the v2 API, along with the necessary modifications to achieve the same results.
Specifying the target accountThe
account_idparam, previously available either in the query params or in the body, is removed from all methods. Theaccount_idmust now be consistently included in the path params.
Retrieve Recruiter hiring projects
GET /v1/linkedin/projects
- Use
GET /v2/:account_id/linkedin/recruiter/projectsList Projects. - Query param
sort_byhave changed.- The param's enum values more closely reflect LinkedIn's application.
- Query param
sort_orderis removed as it is now integrated insort_by. - Query param
cursoris removed. Useroffsetinstead. - The response schema has changed (see RecruiterHiringProjectList changes).
Retrieve Recruiter hiring project from ID
GET /v1/linkedin/projects/:id
- Use
GET /v2/:account_id/linkedin/recruiter/projects/:project_idGet a Project. - Path param
idis renamed toproject_id. - The response schema has changed (see RecruiterHiringProject changes).
Perform an action with a user profile
POST /v1/linkedin/user/:user_id
This endpoint is removed.
RecommendationHere's how the actions allowed by this endpoint should now be performed :
- Add candidate or applicant to pipeline (Recruiter) : Use
POST /v2/:account_id/linkedin/recruiter/projects/:project_id/pipeline/candidate/saveSave a Candidate.- Save lead (Sales Navigator) : Use
POST /v2/:account_id/linkedin/sales-navigator/lead-lists/:list_id/saveSave a Lead To a List.
Retrieve a company profile
GET /v1/linkedin/company/:identifier
- Use
GET /v2/:account_id/linkedin/company/:company_idGet a Company Profile. - Path param
identifieris renamed tocompany_id. - The response schema has changed (see CompanyProfile changes).
Get raw data from any endpoint
POST /v1/linkedin
- Use
POST /v2/:account_id/linkedinPerform a Request to any LinkedIn API Endpoint. - Body param
request_urlis renamed tourl. - Body param
force_apiis removed.- You need to ensure that the account you are using is subscribed to the API you are requesting.
- Body param
encodingis renamed tobypass_url_encoding.- It no longer specifies that the body and query should be natively encoded, but rather that encoding should by bypassed.
Get inmail credit balance
GET /v1/linkedin/inmail_balance
- Use
GET /v2/:account_id/linkedin/inmail-creditsGet InMail Credits. - The response schema has changed (see InmailCredits changes).
Retrieve LinkedIn search parameters
GET /v1/linkedin/search/parameters
-
Use one of these 3 variations of the endpoint depending on the product :
- Classic :
GET /v2/:account_id/linkedin/search/parametersList Search Parameters. - Recruiter :
GET /v2/:account_id/linkedin/recruiter/search/parametersList Search Parameters. - Sales Navigator :
GET /v2/:account_id/linkedin/sales-navigator/search/parametersList Search Parameters.
- Classic :
-
Query param
serviceis removed as it is no longer relevant. -
Query param
typehas changed. Refer to the mappings in the following table :
| v1 type | v2 type |
|---|---|
COMMON CONNECTIONS | CLASSIC RELATION |
RECRUITER GROUPS | RECRUITER GROUP |
RECRUITER DEPARTMENT | RECRUITER JOB_FUNCTION |
RECRUITER HIRING_PROJECTS | RECRUITER PROJECT |
RECRUITER SAVED_FILTERS | RECRUITER SAVED_FILTER |
SALES NAVIGATOR GROUPS | SALES NAVIGATOR GROUP |
SALES NAVIGATOR SALES_INDUSTRY | SALES NAVIGATOR INDUSTRY |
SALES NAVIGATOR DEPARTMENT | SALES NAVIGATOR JOB_FUNCTION |
SALES NAVIGATOR ACCOUNT_LISTS | SALES NAVIGATOR ACCOUNT_LIST |
SALES NAVIGATOR LEAD_LISTS | SALES NAVIGATOR LEAD_LIST |
SALES NAVIGATOR TECHNOLOGIES | SALES NAVIGATOR TECHNOLOGY |
SALES NAVIGATOR SAVED_ACCOUNTS | SALES NAVIGATOR SAVED_ACCOUNT |
SALES NAVIGATOR SAVED_SEARCHES | SALES NAVIGATOR SAVED_SEARCH |
SALES NAVIGATOR REGION | SALES NAVIGATOR LOCATION |
Perform Linkedin search
POST /v1/linkedin/search
- Multiple search endpoints are now available, depending on the product and the resource being requested.
- Query param
cursoris removed. Useoffsetinstead. - Body params
apiandcategoryare removed as they are no longer relevant.
Classic
-
Search From URL: Use
POST /v2/:account_id/linkedin/searchPerform Search from URL. -
People search : Use
POST /v2/:account_id/linkedin/search/peoplePerform People Search.- Body param
companyis renamed tocurrent_company. - Body param
open_tois removed.- Use
open_to_volunteeringinstead.
- Use
- Body param
-
Companies search : Use
POST /v2/:account_id/linkedin/search/companiesPerform Companies Search.- Body param
has_job_offersis renamed tohas_job_postings. - Body param
network_distanceis removed as it is not suitable for the intended filter.- Use
is_employing_relationsto filter companies that employ people from your close network.
- Use
- Body param
-
Posts search : Use
POST /v2/:account_id/linkedin/search/postsPerform Posts Search.- Enum values for body params
sort_by,date_postedandcontent_typeare now uppercase. - Body param
first_connectionswithinposted_byis renamed torelations.
- Enum values for body params
-
Jobs search : Use
POST /v2/:account_id/linkedin/search/jobsPerform Jobs Search.- Enum values for body param
sort_byare now uppercase. - Body param
date_postedhas changed.- Expected value is now
PAST_DAY,PAST_WEEKorPAST_MONTH.
- Expected value is now
- Body param
regionis renamed toprimary_location. - Body param
location_within_areais renamed tolocation_radius. - Body param
seniorityhas changed. Refer to the mappings in the following table :
v1 seniority v2 seniority executiveEXECUTIVEdirectorDIRECTORmid_seniorMID_SENIOR_LEVELassociateASSOCIATEentryENTRY_LEVELinternINTERNSHIP- Body param
roleis renamed tojob_title. - Body param
job_typeis renamed toemployment_statusand its enum values are now uppercase. - Body param
presenceis renamed toworkplace_typeand its enum values are now uppercase. - Enum values for body params
benefitsandcommitmentsare now uppercase. - Body param
minimum_salaryis renamed tosalaryand has changed.- Param
minimum_salary[value]is renamed tosalary[starting_from].
- Param
- Enum values for body param
Recruiter
- Search From URL: Use
POST /v2/:account_id/linkedin/recruiter/searchPerform Search from URL. - People search : Use
POST /v2/:account_id/linkedin/recruiter/search/peoplePerform People Search.- Body param
localeis removed as account locale is now applied by default. - Body param
saved_filteris now an object with theidproperty. - Body param
saved_searchis removed from the general search endpoint.- Use
POST /v2/:account_id/linkedin/recruiter/projects/:project_id/talent-pool/searchPerform People Search From Talent Pool instead, where you can specify asaved_searchID in the body (saved_search[id]param).
- Use
- Body param
locationhas changed.- Param
location[scope]is renamed tolocation[preferences]. - Param
location[title]is removed as it is no longer relevant.
- Param
- Body param
location_within_areais renamed topostal_code_radius.- This param must be used in conjunction with the new
postal_codeparam.
- This param must be used in conjunction with the new
- Body param
roleis renamed tojob_titleand has changed.- Param
job_title[keywords]is removed. - Param
job_title[is_selection]is removed. Use body paramoccupationinstead. - In all cases, the name of the job must be provided in
job_title[name]. Subsequently, if the job was found via the List Search Parameters endpoint, the corresponding ID must be placed in thejob_title[id]field. - Param
role[scope]is renamed tojob_title[preferences].
- Param
- Body param
skillshas changed.- Param
skills[keywords]is removed. - In all cases, the name of the skill must be provided in
skills[name]. Subsequently, if the skill was found via the List Search Parameters endpoint, the corresponding ID must be placed in theskills[id]field.
- Param
- Body param
companyhas changed.- Param
company[keywords]is removed. - In all cases, the name of the company must be provided in
company[name]. Subsequently, if the company was found via the List Search Parameters endpoint, the corresponding ID must be placed in thecompany[id]field. - Param
company[scope]is renamed tojob_title[preferences].
- Param
- Body param
company_headcountis renamed tocompany_size. - Body param
groupsis renamed togroup. - Body param
tenureis renamed toyears_of_experience. - Body param
tenure_in_companyis renamed toyears_in_company. - Body param
tenure_in_positionis renamed toyears_in_position. - Body param
seniorityhas changed.- Since seniority values can only be included, the expected value here is the equivalent of
seniority[include]in uppercase characters.
- Since seniority values can only be included, the expected value here is the equivalent of
- Body param
spoken_languagesis renamed tospoken_languageand has changed.- Param
spoken_languages[scope]is renamed tospoken_language[preferences].
- Param
- Body param
hide_previously_viewedhas changed.- Param
hide_previously_viewed[timespan]is no longer a number but a string enum of durations. See API Reference for details.
- Param
- Body param
profile_languagehas changed.- You must now use the List Search Parameters endpoint with the
PROFILE_LANGUAGEtype to retrieve reference IDs to be used here.
- You must now use the List Search Parameters endpoint with the
- Body param
has_military_backgroundis renamed tois_military_veteran. - Body param
past_applicantsis renamed tois_past_applicant. - Body param
hiring_projectsis renamed toproject. - Body param
recruiting_activityhas changed.- Param
recruiting_activity[timespan]is renamed torecruiting_activity[preferences]and is no longer a number, but a string enum of durations. See API Reference for details.
- Param
- Body param
Sales Navigator
- Search From URL: Use
POST /v2/:account_id/linkedin/sales-navigator/searchPerform Search from URL. - People Search: Use
POST /v2/:account_id/linkedin/sales-navigator/search/peoplePerform People Search.- Body param
saved_search_idis removed.- Use param
saved_searchwhich is an object that contains anidproperty.
- Use param
- Body param
last_viewed_atis moved insaved_search. - Body param
recent_search_idis removed.- Use param
recent_searchwhich is an object that contains anidproperty.
- Use param
- Body param
location_by_postal_codeis renamed topostal_code. - Body params
first_nameandlast_nameare now string arrays. - Body param
tenureis renamed toyears_of_experience. - Body param
groupsis renamed togroupand is now an object withincludeandexcludeproperties to include or exclude groups from the search results. - Body param
profile_languagehas changed.- You must now use the List Search Parameters endpoint with the
PROFILE_LANGUAGEtype to retrieve reference IDs to be used here.
- You must now use the List Search Parameters endpoint with the
- Body param
companyis renamed tocurrent_company. - Enum values for body param
company_typeare now uppercase. - Body param
tenure_at_companyis renamed toyears_in_company. - Body param
tenure_at_roleis renamed toyears_in_position. - Body param
roleis renamed tocurrent_job_title. - Body param
past_roleis renamed topast_job_title. - Enum values for body param
seniorityare now uppercase. - Body param
mentionned_in_newsis removed as it is deprecated. - Body param
account_listsis renamed toaccount_list. - Body param
lead_listsis renamed tolead_list. - Body param
viewed_profile_recentlyis moved withinrecent_interactionand renamed toviewed_profile. - Body param
messaged_recentlyis moved withinrecent_interactionand renamed tomessaged. - Body param
include_saved_leadsis moved withinsaved_resourcesand renamed tosaved_leads. - Body param
include_saved_accountsis moved withinsaved_resourcesand renamed tosaved_accounts. - Body param
save_searchis removed.- Use
search_namedirectly in the body.
- Use
- Body param
- Companies Search: Use
POST /v2/:account_id/linkedin/sales-navigator/search/companiesPerform Companies Search.- Body param
saved_search_idis removed.- Use param
saved_searchwhich is an object that contains anidproperty.
- Use param
- Body param
last_viewed_atis moved insaved_search. - Body param
recent_search_idis removed.- Use param
recent_searchwhich is an object that contains anidproperty.
- Use param
- Body param
location_by_postal_codeis renamed topostal_code. - Body param
has_job_offersis removed.- Use body param
spotlightswith valueHIRING_ON_LINKEDIN.
- Use body param
- Body param
network_distanceis removed.- Use body param
spotlightswith valueFIRST_DEGREE_CONNECTIONS.
- Use body param
- Body params
department_headcountanddepartment_headcount_growthhave changed.- Param
departmentis now a string since only one department can be specified.
- Param
- Body param
followers_countis renamed tofollowers. - Body param
technologiesis removed as it is deprecated. - Body param
recent_activitiesis removed.- Use body param
spotlightswith valueRECENT_LEADERSHIP_CHANGEor/andRECENT_FUNDING_EVENTS.
- Use body param
- Body param
saved_accountshas changed.- It now expects a boolean since you can only choose if you want to include all your saved accounts or not.
- Body param
account_listsis renamed toaccount_list. - Body param
save_searchis removed.- Use
search_namedirectly in the body.
- Use
- Body param
List all job postings
GET /v1/linkedin/jobs
- On Classic, use
GET /v2/:account_id/linkedin/jobsList User Job Postings. - On Recruiter, use
GET /v2/:account_id/linkedin/recruiter/jobsList User Job Postings. - Common changes :
- Query param
cursoris removed. Useroffsetinstead. - Query param
categoryis renamed tostateand has changed. Refer to the the following mapping table :
- Query param
| v1 | v2 |
|---|---|
active | OPEN |
draft | DRAFT |
closed | CLOSED |
REVIEW | |
SUSPENDED |
Create a job posting
POST /v1/linkedin/jobs
- On Classic, use
POST /v2/:account_id/linkedin/jobsCreate a Job Posting Draft.- Params
textwithinjob_titleandcompanyare renamed toname. - Body param
workplaceis renamed toworkplace_type. - Body param
auto_rejection_templateis moved intorejection_settingsand renamed torejection_template. - Body param
screening_questionshas changed.- Param
must_matchis renamed toqualification_required. - Param
positionis removed as it is not relevant.
- Param
- Body param
recruiteris removed as it is not relevant in Classic job posting.
- Params
- On Recruiter, use
POST /v2/:account_id/linkedin/recruiter/jobsCreate a Job Posting Draft in a New Project.- The base body params have undergone the same changes as those applied on Classic.
- Body param
recruiteris removed. Its content is merged with the other params.- Param
projectis removed.- If no project is associated with the job posting, use
project_nameparam to define the name of a new project. - To create a job posting in an existing project, use
POST /v2/:account_id/linkedin/recruiter/projects/:project_id/jobsCreate a Job Posting Draft in an Existing Project.
- If no project is associated with the job posting, use
- Param
functionsis renamed tojob_function. - Param
industriesis renamed toindustry. - Param
seniorityis renamed toseniority_level. - Param
apply_methodhas changed.- Param
typeis renamed tomethod. - Param
urlis renamed towebsite_url.
- Param
- Param
auto_archive_applicantsis removed.- Param
screening_questionsis moved torejection_settingsand renamed toreject_unqualified_applicants. - Param
outside_of_countryis moved torejection_settingsand renamed toreject_out_of_country_applicants.
- Param
- Param
send_rejection_notificationis moved torejection_settings.
- Param
Get job offer
GET /v1/linkedin/jobs/:job_id
- On Classic, use
GET /v2/:account_id/linkedin/jobs/:job_idGet a Job Posting. - On Recruiter, use
GET /v2/:account_id/linkedin/recruiter/jobs/:job_idGet a Job Posting.- To retrieve a job posting by project, use
GET /v2/:account_id/linkedin/recruiter/projects/:project_id/jobsGet a Job Posting by Project.
- To retrieve a job posting by project, use
- Common changes :
- Query param
serviceis removed as it is no longer relevant.
- Query param
Edit a job posting
PATCH /v1/linkedin/jobs/:job_id
- On Classic, use
PATCH /v2/:account_id/linkedin/jobs/:job_idEdit an existing Job Posting.- Changes are the same as in Create a Job Posting.
- On Recruiter, use
PATCH /v2/:account_id/linkedin/recruiter/projects/:project_id/jobs/:job_idEdit an existing Job Posting.- Param
project_idin body paramrecruiteris removed as the project ID must now be specified in the path params. - Other changes are the same as in Create a Job Posting.
- Param
Publish a job posting
POST /v1/linkedin/jobs/:draft_id/publish
- On Classic, use
POST /v2/:account_id/linkedin/jobs/:job_id/publishPublish a Job Posting.- Body param
hiring_photo_frameis renamed toset_hiring_frame. - Param
monthlyin body parambudgetis renamed tototal.
- Body param
- On Recruiter, use
POST /v2/:account_id/linkedin/recruiter/projects/:project_id/jobs/:job_id/publishPublish a Job Posting.- Body param
modecan only beFREEorPROMOTEDasPROMOTED_PLUSis specific to Classic. - Body param
hiring_photo_frameis removed as it doesn't apply to Recruiter. - Param
monthlyin body parambudgetis renamed tototal.
- Body param
- Common changes :
- Path param
draft_idis renamed tojob_id. - Body param
serviceis removed as it is no longer relevant.
- Path param
Solve a job publishing checkpoint
POST /v1/linkedin/jobs/:draft_id/checkpoint
This endpoint is removed as member privilegies verification is no longer considered a checkpoint.
RecommendationsIf you encounter an
insufficient_permissionserror after calling the job posting publish endpoint, you may need to verify your identity with the company on behalf of which you are posting the job offer. Use the following endpoints depending on the product :
- On Classic, use
POST /v2/:account_id/linkedin/company/:company_id/member/verify-emailVerify Company Member Identity.
- Then use
POST /v2/:account_id/linkedin/company/:company_id/member/submit-otpSubmit Otp Verification Code to submit your verification code.- On Recruiter, use
POST /v2/:account_id/linkedin/recruiter/company/:company_id/member/verify-emailVerify Company Member Identity.
- Then use
POST /v2/:account_id/linkedin/recruiter/company/:company_id/member/submit-otpSubmit Otp Verification Code to submit your verification code.
Close a job posting
POST /v1/linkedin/jobs/:id/close
- On Classic, use
POST /v2/:account_id/linkedin/jobs/:job_id/closeClose a Job Posting. - On Recruiter, use
POST /v2/:account_id/linkedin/recruiter/projects/:project_id/jobs/:job_id/closeClose a Job Posting. - Common changes :
- Path param
idis renamed tojob_id. - Query param
serviceis removed as it is no longer relevant.
- Path param
List all applicants to a job posting
GET /v1/linkedin/jobs/:id/applicants
- On Classic, use
POST /v2/:account_id/linkedin/jobs/:job_id/applicantsList Job Posting Applicants.- Query param
ratingsis no longer a string containing multiple values, but a string array. - Query param
sort_byhas changed.- Accepted enum values are now :
APPLIED_DATE,FIRST_NAMEorLAST_NAME.
- Accepted enum values are now :
- Query params
max_years_in_company,min_years_in_company,max_years_in_position,min_years_in_position,exclude_degreeandinclude_degreeare removed as they are specific to Recruiter.
- Query param
- On Recruiter, use
POST /v2/:account_id/linkedin/recruiter/projects/:project_id/talent-pool/applicantsList Job Posting Applicants.- Query param
ratingsis removed as it is specific to Classic. - Enum values for query param
sort_byare now uppercase. - Query params
min_years_in_companyandmax_years_in_companyare combined under the body paramyears_in_current_company(minandmaxproperties). - Query params
min_years_in_positionandmax_years_in_positionare combined under the body paramyears_in_current_position(minandmaxproperties). - Query params
include_degreeandexclude_degreeare combined under the body paramdegree(includeandexcludeproperties).
- Query param
- Common changes :
- Http method is now
POSTinstead ofGET, and query params are integrated in the body. - Path param
idis renamed tojob_id. - Query param
cursoris removed. Use body paramoffsetinstead. - Query param
serviceis removed as it is no longer relevant. - Query params
min_years_of_experienceandmax_years_of_experienceare combined under the body paramyears_of_experience(minandmaxproperties).
- Http method is now
Get a specific applicant to a job posting
GET /v1/linkedin/jobs/applicants/:applicant_id
- On Classic, use
GET /v2/:account_id/linkedin/jobs/:job_id/applicants/:applicant_idGet an Applicant. - On Recruiter, use
GET /v2/:account_id/linkedin/recruiter/projects/:project_id/talent-pool/applicants/:applicant_idGet an Applicant.
Download the resume of a job applicant
GET v1/linkedin/jobs/applicants/:applicant_id/resume
- On Classic, use
GET /v2/:account_id/linkedin/jobs/:job_id/applicants/:applicant_id/resumeGet an Applicant's Resume. - On Recruiter, use
GET /v2/:account_id/linkedin/recruiter/projects/:project_id/talent-pool/applicants/:applicant_id/resumeGet an Applicant's Resume.
Endorse a user profile specific skill
POST /v1/linkedin/profile/endorse
- Use
POST /v2/:account_id/linkedin/users/:user_id/endorseGet an Applicant's Resume.- Body param
profile_idis renamed touser_idand moved to path params.
- Body param
Response objects changes
CompanyProfile
v1 CompanyProfile field | v2 CompanyProfile mapping |
|---|---|
| Removed, use |
|
|
|
|
| Removed, use |
|
|
| Removed as not relevant. |
| Removed as no longer available. |
|
|
|
|
|
|
| Removed as not relevant. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SearchResult
People
Common changes
v1 SearchResult field | v2 PeopleSearchResult mapping |
|---|---|
| Removed as no longer relevant. |
|
|
|
|
|
|
|
|
| Removed, use |
|
|
Classic changes
| v1 SearchResult field | v2 PeopleSearchResult mapping |
|---|---|
verified | is_verified |
premium | is_premium |
open_profile | is_open_profile |
shared_connections_count | shared_relations_count |
Recruiter changes
v1 SearchResult field | v2 PeopleSearchResult mapping |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Removed as no longer available. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LinkedinSearch
LinkedinRawData
LinkedinSearchParameter
LinkedinSearchParametersList
LinkedinJobPosting
LinkedinJobPostingList
LinkedinJobApplicant
LinkedinJobApplicantList
RecruiterHiringProject
RecruiterHiringProjectList
InmailCredits
Updated 3 months ago