Job Posting Schema
This document lists and describes the job fields supported by the Job Posting API.
Foundation Schema
The schema below includes attributes required for posting jobs on LinkedIn. The foundation schema represents the core schema that has to be implemented irrespective of integration type. The partner needs to implement the Foundation schema and can also build any extension schema(s) which are defined in the topics below.
Field | Description | Type | Required |
---|---|---|---|
integrationContext | Represents the unique identifier of the company page on LinkedIn for which this job is posted. Must be in the format urn:li:organization:{company_id} for example, urn:li:organization:1234 . If the company is a LinkedIn customer with access to the onboarding widget, then this field must be used to identify the company, else use companyName field |
URN | integrationContext is a recommended field and must be provided to ensure job postings get associated with correct company page. Provide companyName field value only if you cannot provide value for this field. However, this does not guarantee a 100% accurate match with LinkedIn company page |
companyApplyUrl | URL for applicants to apply for the jobs | String | Yes |
externalJobPostingId | Represents unique job id within the partner system. Do not send an empty or null string for this field. The maximum allowed length is 200 characters | String | Yes |
jobPostingOperationType | Represents the operation on the job posting. Available operation options are: CREATE, UPDATE, RENEW, CLOSE | String | Yes |
title | Represents the title of the job posting that will be published. Character limit: 200 | String | Yes |
description | Represents the job description including the job basic information, responsibility and so on. Character limit: 100 ~ 25,000, limited set of HTML tags accepted, non-support HTML tags will be ignored. | String | Yes |
listedAt | Represents initial date the job posting was added into the application tracking system. The date is epoch timestamp in milliseconds (UTC) and should not be a future time | Integer | Yes |
location | Represents the geographic location of the job position to hire. Please use one of the below recommended formats:
|
String | Yes |
alternateLocations | Represents alternate locations for a job with multiple locations. This field takes the locations as input (including the one set in the location field). This field is null if the job has only one location. Maximum up to seven alternate locations are allowed.
|
String Array | Optional |
categories | Represents job functions specific to this job (for example, Accounting, Marketing, Sales). Category names are predefined by LinkedIn and can be retrieved from Job Functions reference table. You can provide upto 3 values.
|
String Array | Yes, if available on career site. |
skillsDescription | Represents description of desired skills and experiences of the job position. The maximum allowed length is 4000 characters. Limited set of HTML tags accepted (details below) | String | No |
companyJobCode | Represents job posting id within the company’s system for reference. Should be used only when the unique ID for a job in your system is different from the unique ID of the job as in the customer's platform where the job originated. Do not send an empty or null string for this field | String | Yes, if available on career site. |
workplaceTypes | Represents the workplace nature of the job. Available options are
On-Site should be used when it is mandatory for employee to work only from the designated office.
|
Array of String. Currently accepts single element array with one of the following values On-site , Hybrid , Remote |
Yes, if available on career site. |
industries | Represents industries of this job or company. Array element must be quoted and in URN format: "urn:li:industry:{industry_id}". Industry IDs are predefined by LinkedIn and can be retrieved from Industry Codes reference table. Each company page on LinkedIn is linked to one or multiple industry codes. When posting a job on that company page, the job will default to the industry code(s) defined for the company. Providing an industry code in this field will override the industry code(s) defined on the company page for the job posting. The API will return an error if no industry code exists on the company page and one is not provided in the API request. |
Array of Industry URN | No |
employmentStatus | Represents employment status of the job position. Available options are: FULL_TIME , PART_TIME , CONTRACT , INTERNSHIP , TEMPORARY , VOLUNTEER . If predefined LinkedIn values are provided, they are displayed on the LinkedIn job posting. If a non-standard value is provided, LinkedIn attempts to standardize and match it to the closest pre-defined value. If no values are provided, LinkedIn standardizes to the closest matched value based on other fields in the job posting |
String | Yes, if available on career site. |
experienceLevel | Represents experience level of the job position to hire. Available options are: ENTRY_LEVEL , MID_SENIOR_LEVEL , DIRECTOR , EXECUTIVE , INTERNSHIP , ASSOCIATE , NOT_APPLICABLE . If predefined LinkedIn values are provided, they are displayed on the LinkedIn job posting. If a non-standard value is provided, LinkedIn attempts to standardize and match it to the closest pre-defined value. If no values are provided, LinkedIn standardizes to the closest matched value based on other fields in the job posting |
String | Yes, if available on customer career sites. |
trackingPixelUrl | URL for the tracking pixel to be embedded on the job description. To know more refer to Help Article | String | No |
companyName | The company name for which this job posting is created for. This field should be used in lieu of integrationContext only if the customer does not have contract with LinkedIn and cannot access the Customer Onboarding Widget | String | Yes, if integrationContext or companyPageUrl is not available, and only if none of them is available. |
companyPageUrl | The URL of the customer’s LinkedIn Company Page they would like their jobs posted to (e.g. https://www.linkedin.com/company/{company_page}/) | String | Yes, if integrationContext or companyName is unavailable. |
compensation | Compensation provided by the job poster. | PosterProvidedCompensation | No |
expireAt | The date when a job should expire and no longer be available to users. This date should be greater than the current date. If this field is not provided, the default expiration is 180 days for basic and 30 days for premium jobs. For PREMIUM jobs, the expiration date must be within the range of 1 to 90 days, for invalid date API will return an "Invalid ExpirationDate" error. |
Epoch in Milliseconds (UTC) | No |
listingType | Represents the type of the job posting. Value of PREMIUM should be provided only if integration is build for Premium Job Posting Extension schema. For everything else, value of this field should be BASIC . Default value is BASIC . |
String | No |
Poster Provided Compensation Schema
Field | Description | Type | Required |
---|---|---|---|
compensations | Compensation detail | Array of compensation | Yes |
Compensation Schema
Field | Description | Type | Required |
---|---|---|---|
amount | The amount of compensation. | MoneyAmount | No |
value | The compensation amount, which may be either "range" or "exactAmount" | MoneyAmountRange | Yes |
period | Period in which the amount of compensation is paid. Valid value is YEARLY ,MONTHLY , SEMIMONTHLY , BIWEEKLY ,WEEKLY ,DAILY ,HOURLY |
String | Yes |
type | Type of compensation, valid value are BASE_SALARY ,TIPS ,COMMISSION ,PROFIT_SHARING ,STOCK_OPTIONS ,STOCK ,BONUS ,SIGN_ON_BONUS ,OVER_TIME ,OTHER |
String | Yes |
Money Amount Schema
Field | Description | Type | Required |
---|---|---|---|
currencyCode | ISO currency code. | String | Yes |
amount | The amount of money as a real number string | String | Yes |
Money Amount Range Schema
Field | Description | Type | Required |
---|---|---|---|
start | Represents the inclusive (greater than or equal to) value in which to start the range. This field is optional. An unset field indicates an open range; for example, if end is 5, it means everything less than or equal to 5. | MoneyAmount | Yes |
end | Represents the inclusive (less than or equal to) value in which to end the range. This field is optional. An unset field indicates an open range; for example if start is 2 it means everything greater than or equal to 2. | MoneyAmount | Yes |
Sample Request for compensation
"compensation":{
"compensations":[
{
"period":"YEARLY",
"type":"BASE_SALARY",
"value": {
"range": {
"start":{"amount":"1234", "currencyCode":"USD"},
"end":{"amount":"4567", "currencyCode":"USD"}
}
}
}
]
}
"compensation":{
"compensations":[
{
"period":"YEARLY",
"type":"BASE_SALARY",
"value": {
"exactAmount": {"amount":"4000", "currencyCode":"USD"}
}
}
]
}
Promoted Jobs Extension Schema
Includes additional attributes required or optional for jobs promotion.
Field | Description | Type | Required |
---|---|---|---|
contract | Represents the contract this job posting is published to, which is signed by the customer with LinkedIn to use LinkedIn Recruiter services. Must be in the format urn:li:contract:{contractId} | Contract URN | Yes |
posterEmail | Represents valid email address of the poster who will publish the job. Must be the primary email address of the seat holder as defined in the customer's contract. If not provided, the defaultJobPoster configured by the customer is used |
String | No |
showPosterInfo | Represents whether LinkedIn would display the poster information on job description page. The default value is false (No). For Basic jobs this only works if posterEmail is provided and can be associated to a contract seat holder |
Boolean | No |
Note
It is mandatory to provide the value of listingType
field as PREMIUM.
Recruiter System Connect and CRM Connect Extension Schema
Includes additional attributes required or optional for Recruiter System Connect (RSC) and CRM Connect.
Field | Description | Type | Required |
---|---|---|---|
accessRestricted | Flag indicating whether the job is visible in the Recruiter UI and 1-Click Export dropdown list. For any ATS that does not have the ATS Integration Configuration set to "JOB_POSTING_VIEWERS" or "APPLICATION_VIEWERS": For an ATS which has ATS integration configuration "JOB_POSTING_VIEWER" setting as "ALL_PRODUCT_USERS", jobs will be visible for all recruiters in 1 Click Export dropdown list and in the LinkedIn Recruiter UI. For an ATS which has ATS IntegrationConfiguration "APPLICATION_VIEWER" setting "ALL_PRODUCT_USERS", associated applications with jobs will be visible for all recruiters in the LinkedIn Recruiter UI. |
Boolean | No |
availability | Valid values are PUBLIC or PRIVATE_TO_ATS_INTEGRATION . Must be PUBLIC for Apply Connect and Premium jobs |
String | Yes |
requisitionOwnerEmail | Email of the requisition owner | String | No |
requisitionOwnerLastName | Last name of the requisition owner | String | No |
requisitionOwnerFirstName | First name of the requisition owner | String | No |
Note
For Partner ATS who have also integrated for Recruiter System Connect, it is a requirement that they make it optional for customers to choose whether to sync jobs as Private(PRIVATE_TO_ATS_INTEGRATION) or Public.
Apply Connect Extension Schema
Includes additional attributes required or optional for Apply Connect
Field | Description | Type | Required |
---|---|---|---|
onsiteApplyConfiguration | Information required to configure job applications to be collected on LinkedIn | Onsite ApplyConfiguration | Yes |
HTML Tags
The following HTML tags are supported for description
and skillsDescription
fields. Other HTML tags will be stripped out, and their contents will be displayed as plain text.
HTML Tag | Description |
---|---|
<b>, <strong> |
Bold / strong |
<u> |
Underline |
<i> |
Italic |
<br> |
Line break |
<p> |
Paragraph |
<ul> |
Unordered list |
<li> |
List element |