Check Job Posting Statuses

After jobs have successfully posted on LinkedIn a jobs' status can change at a later time. Some examples are jobs converting from an on-site to off-site application flow, jobs being reported by members resulting in that job being closed. With those changes partners do not have visibility into these changes as they happen, and have no way to retrieve the current status of a job posting on LinkedIn. This limitation also prevents ATS partners from having a way to display accurate job status information to customers in their UI.

With the Job Posting Status API partners will be able to retrieve up-to-date statuses of their customer posted jobs.

Optionally, we've introduced a Job Status Change Notifications API. This allows partners to be notified by LinkedIn in near real-time of up-to-date statuses of their customer posted jobs.

Requirements

  • Periodically check the status of customer synced jobs at regular intervals to ensure your application has up-to-date job posting statuses.
  • Display, at minimum jobPostingUrl, listingStatus, linkedInApplyStatus, promotionStatus on all job postings synced to LinkedIn.
  • Ensure your LinkedIn API requests comply with the following size requirements below. If your request exceeds the size requirements your request will receive a 414 response.
Request parameter Size in KB
Raw URL 8 KB max length (scheme + hostname + port + path + query string of the URL)
Query String 4 KB max length
Request URL 28 KB max length (headers + cookies + URI + queryString, but excluding POST data)
URL path segment 4 KB max characters (the area between slashes in a URL)

Authentication

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

Throttle Limits

Throttle Limits Daily Call Limit (UTC)
Application maximum 1,000,000

Important

Maximum limit of 100 jobs are supported per batch request.

Job Posting Status Request

API Endpoint

GET https://api.linkedin.com/v2/jobPostingStatus?ids={externalJobPostingId_1}&ids={externalJobPostingId_2}

Sample Request

curl --location --request GET 'https://api.linkedin.com/v2/jobPostingStatus?ids={external_job_posting_id_1}&ids={external_job_posting_id_2}' \
--header 'Authorization: Bearer {access_token}' \

Sample Request with Query Tunneling

curl --location --request POST 'https://api.linkedin.com/v2/jobPostingStatus' \
--header 'X-HTTP-Method-Override: GET' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Bearer {access_token}' \
--data-urlencode 'ids={external_job_posting_id_1}' \
--data-urlencode 'ids={external_job_posting_id_2}'

Sample Response Body of jobs without alternateLocations

{
    "results": {
        "job-1234": {
            "jobPostingUrl": "https://www.linkedin.com/jobs/view/12345678",
            "partnerJobCampaign": "374823",
            "promotionStatusDetail": {
                "errorCode": 1054,
                "errorType": "CUSTOMER_ERROR",
                "statusMessage": "Reach out to LinkedIn Sales (https://business.linkedin.com/talent-solutions/contact-us) to learn more."
            },
            "jobCampaign": "urn:li:jobCampaign:12844",
            "listingStatus": "LISTED",
            "rawLocation": "Enterprise, UT",
            "externalJobPostingId": "job-1234",
            "linkedInApplyStatus": "ENABLED",
            "jobPostingInfo": {
                "location": "Enterprise, Utah, United States",
                "companyDetails": {
                    "companyPage": "https://www.linkedin.com/company/1234567890",
                    "companyName": "Test Company"
                },
                "expireAt": 1710615358000,
                "listedAt": 1694015408000
            },
            "promotionStatus": "NOT_PROMOTED"
        },
        "job-2345": {
            "listingStatus": "NOT_LISTED",
            "externalJobPostingId": "job-2345",
            "listingStatusDetail": {
                "errorCode": 1050,
                "errorType": "PARTNER_ERROR",
                "statusMessage": "The job was not found. Please ensure the job was sent to LinkedIn"
            }
        }
    },
    "statuses": {},
    "errors": {}
}

Sample Response Body of jobs with alternateLocations

For each location a job object will be returned with the details and statuses.

{
  "statuses": {},
  "results": {
    "job-1234~~1f3a599": {
      "linkedInApplyStatusDetail": {
        "statusMessage": "No attempt to enable LinkedInApply was found for this job.",
        "errorType": "PARTNER_ERROR"
      },
      "jobPostingUrl": "https://www.linkedin.com/jobs/view/12345678",
      "listingStatus": "LISTED",
      "rawLocation": "Enterprise, UT",
      "externalJobPostingId": "job-12345",
      "linkedInApplyStatus": "NOT_ENABLED",
      "developerApplicationUrn": "urn:li:developerApplication:12345678",
      "jobPostingInfo": {
        "companyDetails": {
          "companyPage": "https://www.linkedin.com/company/1234567890",
          "companyName": "Test Company"
        },
        "location": "Enterprise, Utah, United States",
        "listedAt": 1706819177000,
        "expireAt": 1724531132000
      },
      "promotionStatus": "NOT_PROMOTED"
    },
    "job-1234~~a678450": {
      "linkedInApplyStatusDetail": {
        "statusMessage": "No attempt to enable LinkedInApply was found for this job.",
        "errorType": "PARTNER_ERROR"
      },
      "partnerJobCampaign": "374823",
      "jobPostingUrl": "https://www.linkedin.com/jobs/view/012345678",
      "jobCampaign": "urn:li:jobCampaign:12844",
      "listingStatus": "LISTED",
      "rawLocation": "San Francisco, CA",
      "externalJobPostingId": "job-12345",
      "linkedInApplyStatus": "NOT_ENABLED",
      "developerApplicationUrn": "urn:li:developerApplication:12345678",
      "jobPostingInfo": {
        "companyDetails": {
          "companyPage": "https://www.linkedin.com/company/1234567890",
          "companyName": "Test Company"
        },
        "location": "San Francisco, California, United States",
        "listedAt": 1706819177000,
        "expireAt": 1724531132000
      },
      "promotionStatus": "NOT_PROMOTED"
    }
  },
  "errors": {}
}

Job Posting Status Field Schema

Field Description Format Required
externalJobPostingId Unique job posting id within the partner's system. string Yes
jobPostingInfo Unique job posting id within the partner's system. JobPostingInfo Optional
jobPostingUrl Link to the job posting on LinkedIn. Will only be present if job is listed on LinkedIn. string Optional
linkedInApplyStatus LinkedIn Apply status of the job posting. Will be one of ENABLED, NOT_ENABLED, IN_PROGRESS. enum Optional
linkedInApplyStatusDetail JobPostingStatusDetail Optional
listingStatus Listing state of the job posting. Will be one of LISTED, NOT_LISTED, IN_PROGRESS. enum Yes
listingStatusDetail Error description for the job, if not listed successfully. JobPostingStatusDetail Optional
promotionStatus Promoted status of the job listing. Will be one of PROMOTED, NOT_PROMOTED. enum Optional
promotionStatusDetail Instruction message to manage job promotion. JobPostingStatusDetail Optional
jobCampaign Job campaign id (or urn) used for job promotion. Will only be present if there is a corresponding LinkedIn job campaign for the specific job. Will be in the format urn:li:jobCampaign:{linkedIn_jobCampaign_id} for example, urn:li:jobCampaign:12844. URN Optional
partnerJobCampaign Partner job campaign id used for job promotion. This value is either scraped from a source directly or sent in the job posting API payload by the partner. May not always be numeric or map to a LinkedIn job campaign id (jobCampaign). string Optional
rawLocation The original location as inputted for this job. String Required

JobPostingInfo Field Schema

Field Description Format Required
expireAt Represents the date the job posting will expire on LinkedIn. Null if the job posting is not listed yet. The date is epoch timestamp in milliseconds (UTC). Long Optional
listedAt Represents initial date the job posting was listed on Linkedin. The date is epoch timestamp in milliseconds (UTC). Long Yes
location Standardized location for the job listing. 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 Optional
companyDetails Job company details, contains company name and page url. CompanyDetails Optional
visibilityTag The job visibility tag for the job posting. This field states whether a member viewer is eligible to view a job. JobVisibility Optional

CompanyDetails Field Schema

Field Description Format Required
companyName The name of a company. string Yes
companyPage The company page on LinkedIn. string Yes

JobVisibility Enums

Enum Description
PRIVATE Job visibility is restricted across job search. Job cannot be accessed with explicit Linkedin job URL.
TEST Job is visible to Linkedin allow listed employees only.
PARTNER Jobs are only served to a group of allow listed partner developers. Partners can see each others jobs abiding by the product access rules.
COMPANY Job is only visible to the company employees to which the job is associated If a job is associated with a specific company & the member is an employee of a different company, then the member cannot access to view the job.
PUBLIC By default job will be visible across the platform in all channels.

JobPostingStatusDetail Field Schema

Field Description Format Required
errorCode Error code identifier. int optional
errorType Error desciption. Will be one of
  • CUSTOMER_ERROR
    • Customer inputted data contains errors.
  • PARTNER_ERROR
    • Partner API request contains errors.
  • LINKEDIN_ERROR
    • An error occurred on LinkedIn.
enum Optional
statusMessage Description of the status. string Yes

ListingStatusDetails Error Codes

ListedStatus Error Code Error Type Error Message Description
NOT_LISTED 10XX CUSTOMER_ERROR INVALID_LOCATION: The job location cannot be standardized. Please update the location in your ATS according to the API schema location field best practices. The location cannot be recognized, most likely because it is missing information such as a Country or Postal code.
NOT_LISTED 10XX CUSTOMER_ERROR MISSING_LOCATION: The job is missing location data. Please add the location in your ATS to post. The job is missing a location.
NOT_LISTED 10XX CUSTOMER_ERROR BLOCKED_COUNTRY: The job’s location is a country blocked by LinkedIn to comply with US government sanctions. Please refer to LinkedIn Help to ensure the job location is not in a sanctioned country. The job location cannot be in a country sanctioned by the US.
NOT_LISTED 10XX CUSTOMER_ERROR MEMBER_REPORTED: The job was closed because it was reported by multiple LinkedIn members as no longer accepting applications. Please ensure the job was not incorrectly closed in your ATS. LinkedIn auto-closes jobs that have been reported multiple times by jobseekers as no longer accepting applicants.
NOT_LISTED 10XX CUSTOMER_ERROR CUSTOMER_EXCLUDED: The job was deliberately not posted due to a customer-requested rule. Please reach out to LinkedIn Support to modify or remove the rule. Customers may exclude certain jobs from being posted by requesting rules through LinkedIn Support.
NOT_LISTED 10XX PARTNER_ERROR PENDING_CUSTOMER_MIGRATION:This job is not yet eligible to be posted automatically via the API. LinkedIn Support has been notified to ensure customer’s readiness to migrate to real time API posting within 1-2 weeks.

LinkedinApplyStatus Error Codes

linkedInApplyStatus Error Code Error Type Error Message Description Resolution
IN_PROGRESS 1156 CUSTOMER_ERROR IN_PROGRESS: LinkedIn Apply is being processed. Please check back in 5 minutes. LinkedIn Apply enablement has been requested and is being processed by the system. No action needed.
NOT_ENABLED 1100 PARTNER_ERROR ENABLING_APPLY_CONNECT_BY_PARTNER_FAILED: Required one non-null optional field in /questionDetails questionDetails in SimpleTalentQuestionDefinition should have exactly one field. For example, if dateQuestionDetails is present then other fields should not be present. Address error and update job.
NOT_ENABLED 1101 PARTNER_ERROR ENABLING_APPLY_CONNECT_BY_PARTNER_FAILED: PrerequisiteQuestion cannot depend on the response of another PrerequisiteQuestion Prerequisite question in prerequisiteQuestionResponse can not be a dependent question. For example, with two questions, Q1 and Q2, if Q2 has Q1 as its prerequisiteQuestionResponse then Q1 should have a null prerequisiteQuestionResponse Address error and update job.
NOT_ENABLED 1102 PARTNER_ERROR ENABLING_APPLY_CONNECT_BY_PARTNER_FAILED: PrerequisiteQuestion must be present within the same customQuestions set/array Prerequisite question in prerequisiteQuestionResponse should be defined within the same customQuestions array Address error and update job.
NOT_ENABLED 1103 PARTNER_ERROR ENABLING_APPLY_CONNECT_BY_PARTNER_FAILED: Repeatable questions cannot have PrerequisiteQuestion If any of the question types in SimpleTalentQuestions has repeatLimit > 1 then all of the questions in it must have a null prerequisiteQuestionResponse Address error and update job.
NOT_ENABLED 1150 PARTNER_ERROR ENABLING_APPLY_CONNECT_BY_PARTNER_FAILED: LinkedIn Apply update failed This error occurs due to some issue on LinkedIn and no action is required from the customer side. No action required. LinkedIn will retry processing.
NOT_ENABLED 1151 PARTNER_ERROR ENABLING_APPLY_CONNECT_BY_PARTNER_FAILED: Unable to process questions This error occurs due to issues with question transformation/validation or due to duplicate question identifiers. Partners are advised to re-validate the question payload and format.
NOT_ENABLED 1153 PARTNER_ERROR ENABLING_APPLY_CONNECT_BY_PARTNER_FAILED: Unable to register jobApplicationWebhookUrl This error occurs when the job application webhook url is not successfully registered to receive job applications. Ensure webhook is valid and update job.
NOT_ENABLED 1154 PARTNER_ERROR BLOCKED_WEBHOOK: The application delivery webhook wasn’t reachable. Please ensure webhook is reachable and able to accept applications and then resync the job. Webhook validation failed. Usually means challengeResponse != Hex-encoded(HMACSHA256(challengeCode, clientSecret)). Webhook Validation Ensure webhook is valid and update job.
NOT_ENABLED 1155 PARTNER_ERROR LOW_APPLICATION_DELIVERY: LinkedIn Apply has been disabled due to application delivery failures. Please verify the webhook url, ensure you are able to process applications successfully for this job and then resync the job. Linked Apply has been disabled due to application delivery failures. Please verify the webhook url, ensure you are able to process applications successfully for this job and then resync the job.

PromotionStatus Error Codes

PromotionStatus Error Code Error Type Error Message Description Resolution
PROMOTED 10XX CUSTOMER_ERROR LI_CUSTOMER_PROMOTED: Visit Recruiter to manage. The LinkedIn customer’s job was promoted successfully through their LinkedIn Recruiter contract. No action required from partner or customer in the ATS.
NOT_PROMOTED 10XX CUSTOMER_ERROR LI_CUSTOMER_BASIC: Promote your job in Recruiter or ask your Job Posting Admin to manage. The LinkedIn customer’s job was posted as a basic job. No action required from partner or customer in the ATS.
NOT_PROMOTED 10XX CUSTOMER_ERROR ATS_CUSTOMER_BASIC: Reach out to LinkedIn Sales to learn more. The ATS customer’s job was posted as a basic job since they do not have a LinkedIn contract. No action required from partner or customer in the ATS.