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 asUPDATE
listingType
field value asPREMIUM
contract
field value as in the formaturn: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 asUPDATE
listingType
field value asBASIC
contract
field value as in the formaturn: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.
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. |