Module 4 - Inline Upgrade / Downgrade

Overview

Upgrading a Basic job to a Premium job and Downgrading a Premium job to a Basic job is possible via simpleJobPosting API. The underlying job has to be an API job as well.

Note

  • The inline upgrade/downgrade feature is subject to availability, please contact your Business Development point of contact.
  • Inline upgrades and downgrades are only applicable to API jobs posted to a single location (non-multiplexed jobs).

API Overview

Use the /simpleJobPostings API to inline upgrade or downgrade jobs on LinkedIn. To know more about this API, refer to API Overview

API Endpoint

Use the following endpoint to submit a task to upgrade or downgrade to one or more jobs asynchronously:

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

API Authorization

All requests below require access tokens obtained via the OAuth2.0 Client Credentials flow.

Important

  • We strongly recommend to use same access token for all concurrent and consecutive calls. An access token has a lifespan of 30 mins. Only on expiry of the existing token, new token should be generated.
  • When upgrading or downgrading a job, it is important to use the same externalJobPostingId that was used for the underlying job.

Sample Request for Upgrade Jobs

To upgrade a Basic API job to a Premium job, repost it with following changes.

  • jobPostingOperationType field value as UPDATE
  • listingType field value as PREMIUM
  • contract field value as in the format urn:li:contract:{contractId}

Ensure to configure the Customer Application and ATS Integration prior to initiating the inline upgrade, details.

posterEmail & showPosterInfo can be added optionally as mentioned in the promoted job extension schema.

When an API job is upgraded, the expiration of job posts is reset to either 30 days from the date of upgrade or to the date specified in the 'expireAt' field of the payload, if that date has already passed. The expiration date can be extended up to 90 days from the date of job upgrade.

Refer to Check the Job Operation Task Status for finding the status & job url of update call.

Important

The LinkedIn jobId & URL remains the same after an inline upgrade.

API Header

The header for making the request is X-Restli-Method: batch_create.

Authorization: Bearer {token}
x-restli-method: batch_create

Sample Upgrade Request Body

{
 "elements": [{
   "integrationContext": "urn:li:organization:{organization_id}",
   "companyApplyUrl": "https://{apply_url}",
   "externalJobPostingId":"BasicJobPosting01",
   "title": "Software Engineer",
   "description": "We are looking for a passionate Software Engineer to design, develop and install software solutions. Software Engineer responsibilities include gathering user requirements, defining system functionality and writing code in various languages. Our ideal candidates are familiar with the software development life cycle (SDLC) from preliminary system analysis to tests and deployment.",
   "listedAt": "{timestamp-in-mili}",
   "location":"San Francisco, CA",
   "workplaceTypes": ["On-site"],

   "jobPostingOperationType": "UPDATE",
   "listingType":"PREMIUM",         
   "contract":"urn:li:contract:{contract_id}"
  }
 ]
}

Sample Request for Downgrade Jobs

To downgrade a Premium API job to a Basic job, repost it with following changes:

  • jobPostingOperationType field value as UPDATE
  • listingType field value as BASIC
  • contract field value as in the format urn:li:contract:{contractId}

The downgradation of an API job resets the expiry of job posts to 180 days from the date of downgrade or to the expireDate if passed in the payload in the field expireAt while downgrading the job.

Refer to Check the Job Operation Task Status for finding the status & job url of update call.

Important

The LinkedIn jobId & URL gets changed after inline downgrade. Please update the new job url for customers to refer via UI. You can find the new job URL and ID by calling the Job Posting Status API and retrieving the jobPostingUrl once the Job Posting Task generated for the downgrade has SUCCEEDED.

API Header

The header for making the request is X-Restli-Method: batch_create.

Authorization: Bearer {token}
x-restli-method: batch_create

Sample Downgrade Request Body

{
 "elements": [{
   "integrationContext": "urn:li:organization:{organization_id}",
   "companyApplyUrl": "https://{apply_url}",
   "externalJobPostingId":"PremiumJobPosting01",
   "title": "Software Engineer",
   "description": "We are looking for a passionate Software Engineer to design, develop and install software solutions. Software Engineer responsibilities include gathering user requirements, defining system functionality and writing code in various languages. Our ideal candidates are familiar with the software development life cycle (SDLC) from preliminary system analysis to tests and deployment.",
   "listedAt": "{timestamp-in-mili}",
   "location":"San Francisco, CA",
   "workplaceTypes": ["On-site"],

   "jobPostingOperationType": "UPDATE",
   "listingType":"BASIC",         
   "contract":"urn:li:contract:{contract_id}"
  }
 ]
}

Get Job Posting Status

Upon successful completion of a job upgrade or downgrade, it is necessary to use the job posting status API to determine the job's status and listing type (Basic or Premium). This API must be used once the job operation task status has been successfully completed.

RSC and Inline upgrade / downgrade

When an API Job is designated as Basic, either by creating a new Basic API Job or by inline downgrading a Premium API Job, it will be visible in the RSC.

Inline upgrading a Basic API Job to a Premium Job does not change its visibility in the RSC; the job remains visible until it is closed.

Similarly, inline downgrading a Premium API Job to a Basic Job will make the job appear in the RSC. No updates to an API Job, except for the CLOSE action, are sent to the RSC.

Error Codes

Given below is a list of possible error codes that can display while updating a job. One of the following responses is returned, that contains a JSON object with a status and a message about the error for Post on /simpleJobPostings.

HTTP CODE RESPONSE STATUS ERROR MESSAGE DESCRIPTION RESOLUTION
200 403 Caller is not authorized to access the jobs for contract: urn:li:contract:{contract-id} Used customer-app is not configured with the contract to post a premium job Refer to module-2, to onboard the customer app with the contract
200 400 Contract field missing for job promotion with extJobPostingId {Dummy_Ext_Job_Id} While downgrading, contractId has to be part of the payload Please refer to the Sample Request for Downgrade Jobs and send the payloads accordingly
401 401 The token used in the request has expired Authorization token has expired, usually it has 30 minute life To retry the operation, please regenerate the authorization token and pass it in the API header.