Sync Premium Jobs API

LinkedIn's Premium Job Posting API enables authorized third parties to post premium jobs directly to LinkedIn on the behalf of LinkedIn Recruiter customers. This is an asynchronous API and you will receive a task id which you can use to see the status of the job, verify whether it successfully posted to LinkedIn, or see if there was an error during creation and view any details about the error.

Job Posting Field Schema

In order to publish a premium job, you need to construct the request body with all required fields. The API also provides many additional fields to post, which would be used for job recommendation. The more information your application can provide, the more candidates can be reached to satisfy customers’ needs.

See this page for full field schema information.

Authentication

All requests below require access tokens obtained via the OAuth 2 Client Credentials flow.

Throttling

Throttle Limits Requests Per Day (UTC) Records Per Minute Records Per Day
Application maximum 100,000 2,000 60,000

Rest.li Concepts

APIs below are built on the top of LinkedIn REST framework rest.li , which are similar as standard REST APIs, but provide more rich features, like field projections, extended request methods etc. It’s highly recommended to read these technical details before development.

Topic

Publish premium jobs

Use the following endpoint to submit a task to have one premium job created asynchronously:

POST https://api.linkedin.com/v2/simpleJobPostings

Note that the header for making the request is X-Restli-Method: batch_create . The maximum number of jobs which can be submitted during one batch call is 100. If you would like to submit more than 100 jobs at a time, please group your jobs in to collections of 100 and make multiple batch calls.

Sample Request

Sample Header
Authorization: Bearer {access token}
X-restli-method: batch_create
Sample Request Body
{
   "elements":[
      {
         "externalJobPostingId":"PremiumJobPostingG1TC1",
         "listingType":"PREMIUM",
         "title":"Premium Job Posting G1 TC1",
         "description":"<b>Objective of the Position</b><br/> <ul> <li>To develop digital content plan, manage and monitor different content executions for social and online platforms to maximize the communication effectiveness and impact</li> <li>To manage, monitor and keep optimizing the performance of social platforms of MB and AMG</li> <li>To monitor and manage internet word of mouth to keep the health of brand and product image</li></ul>",
         "contract":"urn:li:contract:{your_contract_id_01}",
         "integrationContext":"urn:li:organization:{your_organization_id_01}",
         "companyApplyUrl": "http://linkedin.com/jobpostingG1TC1",
         "location":"San Francisco, CA",
         "listedAt":1513756352000,
         "jobPostingOperationType":"CREATE"
      },
      {
         "externalJobPostingId":"PremiumJobPostingG1TC2",
         "listingType":"PREMIUM",
         "title":"Premium Job Posting G1 TC2",
         "description":"<b>G1 TC2: Objective of the Position</b><br/> <ul> <li>To develop digital content plan, manage and monitor different content executions for social and online platforms to maximize the communication effectiveness and impact</li> <li>To manage, monitor and keep optimizing the performance of social platforms of MB and AMG</li> <li>To monitor and manage internet word of mouth to keep the health of brand and product image</li></ul>",
         "contract":"urn:li:contract:{your_contract_id_02}",
         "industries":["urn:li:industry:4", "urn:li:industry:99"],
         "integrationContext":"urn:li:organization:{your_organization_id_02}",
         "companyApplyUrl": "http://linkedin.com/jobpostingG1TC2",
         "countryCode": "us",
         "postalCode": "94131",
         "listedAt":1513756352000,
         "jobPostingOperationType":"CREATE",
         "posterEmail":"stub@your_poster_email_address"
      }
   ]
}

Sample Response

A successful request will return a 200 OK response code, and you will find the simpleJobPostingTaskIDs in the response body.

{
    "elements": [
        {
            "id": "urn:li:simpleJobPostingTask:03ff7ca6-dedf-4d92-b856-10669f8fe5ef",
            "status": 202
        },
        {
            "id": "urn:li:simpleJobPostingTask:01c922a8-96cd-4c32-8cc1-40eea169fe01",
            "status": 202
        }
    ]
}

Note

Be sure to check the response for error statuses corresponding to individual entities you submit.

  • Task ids are valid for 30 days.
  • Please ensure that requests do not include duplicate updates to the same externalJobPostingId.

Update Premium Jobs

In order to update premium job postings, you can just re-post jobs with any changed information. LinkedIn uses externalJobPostingId to identify whether a job should be created or updated.

Sample Request

Sample Header
Authorization: Bearer {access token}
X-restli-method: batch_create
Sample Request Body
{
   "elements":[
      {
         "externalJobPostingId":"PremiumJobPostingSMM01",
         "title":"Social Media Management",
         "description":"<b>Objective of the Position</b><br/> <ul> <li>To develop digital content plan, manage and monitor different content executions for social and online platforms to maximize the communication effectiveness and impact</li> <li>To manage, monitor and keep optimizing the performance of social platforms of MB and AMG</li> <li>To monitor and manage internet word of mouth to keep the health of brand and product image</li></ul>",
         "contract":"urn:li:contract:{contract_id}",
         "integrationContext":"urn:li:company:{company_id}",
         "companyApplyUrl": "http://linkedin.com/jobpostingSMM01",
         "listingType":"PREMIUM",
         "jobPostingOperationType":"UPDATE",
         "location":"San Francisco, CA",
         "posterEmail":"recruiter_email@yourcompany.com"
      }
   ]
}

Close Premium Jobs

In order to close premium job postings, you can just re-post jobs but set jobPostingOperationType to CLOSE .

Note

Please close jobs previously posted by /jobs API using /jobs CLOSE call.

Sample Request

Sample Header
Authorization: Bearer {access token}
X-restli-method: batch_create

Sample Request Body

{
   "elements":[
      {
         "externalJobPostingId":"PremiumJobPostingSMM01",
         "title":"Social Media Management",
         "description":"<b>Objective of the Position</b><br/> <ul> <li>To develop digital content plan, manage and monitor different content executions for social and online platforms to maximize the communication effectiveness and impact</li> <li>To manage, monitor and keep optimizing the performance of social platforms of MB and AMG</li> <li>To monitor and manage internet word of mouth to keep the health of brand and product image</li></ul>",
         "contract":"urn:li:contract:{contract_id}",
         "integrationContext":"urn:li:company:{company_id}",
         "companyApplyUrl": "http://linkedin.com/jobpostingSMM01",
         "listingType":"PREMIUM",
         "jobPostingOperationType":"CLOSE",
         "location":"San Francisco, CA",
         "posterEmail":"recruiter_email@yourcompany.com"
      }
   ]
}

Renew premium jobs

There are three ways to renew premium job postings:

  1. Re-post premium jobs without any change, it would extend published jobs by 30 days.
  2. Close previous premium jobs, and re-post premium jobs without any changes.
  3. Publish new premium jobs with different externalJobPostingId.

Check the job operation task status

After creating job postings, you can use the task ids from the response to track the status of the creation of the job postings. Typically the job creation process should take no longer than 5 minutes and it is suggested that you validate the completion of the job creation at least 5 minutes after your initial call to confirm there were no issues during job creation. The task IDs returned will have a lifespan of 30 days. Possible status values returned are: IN_PROGRESS , SUCCEEDED , FAILED .

Throttle Limits

Throttle Limits Daily Call Limit (UTC)
Application maximum 300,000
GET https://api.linkedin.com/v2/simpleJobPostingTasks?ids={simpleJobPostingTaskUrn 1}&ids={simpleJobPostingTaskUrn 2}

Sample Response

{
    "errors": {},
    "results": {
        "urn:li:simpleJobPostingTask:07ae37ab-2216-4d0f-97a0-53a516681c8f": {
            "id": "urn:li:simpleJobPostingTask:07ae37ab-2216-4d0f-97a0-53a516681c8f",
            "jobPosting": "urn:li:jobPosting:123456789",
            "status": "SUCCEEDED"
        },
        "urn:li:simpleJobPostingTask:edc75eb8-2c4f-4ac7-a64f-2ee583446f83": {
            "id": "urn:li:simpleJobPostingTask:edc75eb8-2c4f-4ac7-a64f-2ee583446f83",
            "status": "IN_PROGRESS"
        }
    },
    "statuses": {}
}

Note

Be sure to check the response for error statuses corresponding to individual entities you submitted.