---
title: "Posting jobs to LinkedIn via API: what access actually requires in 2026"
description: "LinkedIn has a real job posting API. It is gated behind a Talent Solutions partnership, and the docs currently say new partnerships are closed."
canonical: https://jobspipe.dev/blog/linkedin-api-post-job
date_published: 2026-07-25
date_modified: 2026-09-30
author: Dvir Atias
---

# Posting jobs to LinkedIn via API: what access actually requires in 2026

LinkedIn has a real job posting API. It is gated behind a Talent Solutions partnership, and the docs currently say new partnerships are closed. Here is the endpoint, the auth model, the quotas, and what to do if you actually wanted to read job data instead.

Search for `linkedin api post job` and you will land on two completely different sets of documentation. One is about publishing a text update to the LinkedIn feed. The other is about publishing an employment opportunity to LinkedIn Jobs. They share almost nothing: different base paths, different auth flows, different approval regimes. Getting this wrong costs people days.

The short version. If you want to publish a **feed post**, you want the Posts API at `POST /rest/posts`, and the member-level permission for it is self-serve. If you want to publish a **job opening**, you want the Job Posting API at `POST /rest/simpleJobPostings`, and it is gated behind a LinkedIn Talent Solutions partnership. As of this writing, LinkedIn’s own Job Posting API overview carries a notice that it is not accepting new partnerships for that API. Everything below is verified against LinkedIn’s developer documentation on Microsoft Learn, which is where LinkedIn publishes its API reference. The wider question, what LinkedIn’s APIs offer for reading jobs and who can get access, is answered in [does LinkedIn have a jobs API?](https://jobspipe.dev/guides/linkedin-jobs-api)

## Share post versus job post: the disambiguation

These are the two things people conflate, side by side.

| What you want | API | Endpoint | Access |
| --- | --- | --- | --- |
| Publish text, an image, or a link to the feed | Posts API (replaces the older ugcPosts API) | POST https://api.linkedin.com/rest/posts | w_member_social is an open permission any developer can enable via the Products tab in the Developer Portal. Posting as an organization needs w_organization_social, which is not an open permission. |
| Publish an actual job opening to LinkedIn Jobs | Job Posting API (LinkedIn Talent Solutions) | POST https://api.linkedin.com/rest/simpleJobPostings | Talent Solutions partnership only. No self-serve path exists. |

A share does not become a job listing. Posting _“we’re hiring a backend engineer”_ to the feed puts content in front of your followers. It does not create a record in LinkedIn Jobs, it does not appear in job search, and it does not consume a job slot. Those are separate systems.

A quick tell for whichever doc page you have open: if it mentions `lifecycleState` and `commentary`, you are in the feed docs. If it mentions `jobPostingOperationType` and `externalJobPostingId`, you are in the jobs docs.

## What the LinkedIn Job Posting API is

LinkedIn’s Job Posting API lets authorized third parties - ATS vendors, job distributors, and their customers - post jobs directly to LinkedIn on behalf of those customers, instead of a recruiter typing them into the LinkedIn website. It sits inside LinkedIn Talent Solutions alongside Apply Connect, Apply with LinkedIn, and Recruiter System Connect.

It supports two job categories, selected with the `listingType` field. **Basic** jobs are free listings that get limited active promotion. **Premium** jobs are paid listings that land in a customer’s purchased job slots and require a LinkedIn Recruiter contract ID. Not every approved partner gets promoted-job permission; the docs say it is granted selectively.

There is a second, non-API route: XML feeds, where LinkedIn ingests jobs from a feed rather than having them pushed over HTTP. LinkedIn warns not to use both for the same customer, because the same job arriving twice gets deduplicated unpredictably.

## The access model, stated plainly

There is no self-serve path. LinkedIn’s Getting Access page lists exactly three open permissions available to all developers without approval: `profile` and `email` from Sign In with LinkedIn using OpenID Connect, and `w_member_social` from Share on LinkedIn. Everything in the Talent catalog - Job Posting, Apply Connect, Apply with LinkedIn, Recruiter System Connect - sits behind the Talent Solutions partner application.

On top of that, the Job Posting API overview page now opens with an explicit notice that LinkedIn is not currently accepting new partnerships for the Job Posting API, and directs developers who want job-posting capability to request access to Apply Connect instead. Apply Connect is an ATS integration whose scope is broader: partners post jobs on behalf of customers _and_ receive applications back into the ATS, with candidates applying without leaving LinkedIn.

The docs are not perfectly consistent about this. The Premium Job Posting page still points readers at the partner request form without carrying the closure notice. Treat the Apply Connect redirect on the Job Posting overview as the current signal, and confirm with LinkedIn before you build.

The attached terms are not boilerplate either. Partners must make customers accept LinkedIn’s Jobs Terms and Conditions before any job is posted, keep an auditable record of who accepted and when, and produce it on request. Partners are also barred from marketing the integration as a free way to post jobs to LinkedIn, and LinkedIn reserves the right to require that certain jobs be promoted.

For the open permissions the steps are short, and they are the usual answer to “how do I use the LinkedIn API”. Create an app in the LinkedIn Developer Portal, open the Products tab on the app page and add Sign In with LinkedIn using OpenID Connect or Share on LinkedIn, then run member authorization, the 3-legged OAuth flow in which a member grants your app access to their own account. The Talent APIs use application authorization instead, the 2-legged flow described below, and no amount of self-service setup adds them to an app.

## LinkedIn’s job-related API surfaces

| Surface | Direction | Access model |
| --- | --- | --- |
| Job Posting API | Write jobs into LinkedIn | Talent partnership; new partnerships closed per the docs |
| XML feeds | Write jobs into LinkedIn | Arranged with LinkedIn, not open |
| Job Posting Status API | Read back your own submitted jobs only | Same partnership |
| Apply Connect | Write jobs, read applications back | Talent partnership plus certification |
| Apply with LinkedIn | Read a member profile into your application form | Talent partnership |
| Recruiter System Connect | Two-way candidate sync with Recruiter | Talent partnership |
| Posts API | Write a feed post | Member posting self-serve; organization posting needs approval |
| Search or read LinkedIn job listings generally | Read out of LinkedIn | Not offered |

## The technical shape, if you do get in

Auth is OAuth 2.0 **client credentials**, not the three-legged member flow. You POST `grant_type=client_credentials` with your client ID and secret to `https://www.linkedin.com/oauth/v2/accessToken` and get back a token with a 30-minute lifespan. LinkedIn recommends reusing one token across concurrent and consecutive calls rather than minting a new one per request.

There is no scope name to request for job posting. Unlike `w_member_social`, access is granted at the application level when LinkedIn provisions your app. If your app was not enabled for it, the token request itself fails with `access_denied`.

All versioned Talent endpoints live under `https://api.linkedin.com/rest/` and require a `LinkedIn-Version` header in `YYYYMM` format; the docs currently name `202604` as the latest Talent version. Each version is supported for at least two years, and calling a sunset version returns `426 Upgrade Required`. Legacy unversioned endpoints under `/v2/` still exist and are being retired.

Job creation is a batch write. You send an `elements` array and set the `x-restli-method: batch_create` header; omitting it returns a 403. The four lifecycle operations - create, update, renew, close - are all selected by the `jobPostingOperationType` field on each element, not by different endpoints or verbs.

```
POST https://api.linkedin.com/rest/simpleJobPostings

Authorization: Bearer {access_token}
LinkedIn-Version: 202604
x-restli-method: batch_create
Content-Type: application/json

{
  "elements": [
    {
      "company": "urn:li:company:{company_id}",
      "externalJobPostingId": "1234",
      "jobPostingOperationType": "CREATE",
      "title": "Software Engineer",
      "description": "We are looking for a passionate Software Engineer...",
      "location": "San Francisco, CA",
      "employmentStatus": "FULL_TIME",
      "companyApplyUrl": "https://example.com/jobs/1234",
      "listedAt": 1440716666,
      "workplaceTypes": ["remote"]
    }
  ]
}
```

The call is asynchronous. A success returns `200 OK` with a `urn:li:simpleJobPostingTask:...` id per element, valid for 24 hours, which you then poll for the real outcome. Per-element errors also come back inside a 200 body, so you cannot just check the HTTP status and move on. A maximum of 100 jobs is allowed per batch call.

To see whether a job actually went live, use the Job Posting Status API at `GET https://api.linkedin.com/rest/jobPostingStatus?ids=...`, also capped at 100 jobs per batch. It returns `jobPostingUrl`, `listingStatus`, `linkedInApplyStatus`, `promotionStatus`, and `expireAt`, and partners are required to surface the first four in their own UI. That matters more than it sounds: LinkedIn can close a job on its own, for example when multiple members report it as no longer accepting applications, and this is how you find out.

Two other limits worth knowing before you scope the work: descriptions cap at 25,000 characters including HTML tags, and a job can carry at most seven locations via `alternateLocations`.

## Rate limits and quotas

LinkedIn publishes these as application-level throttles measured in UTC.

-   Job Posting API: 100,000 requests per day. For promoted jobs specifically, 2,000 records per minute and 60,000 records per day.
-   Job Posting Status API: 1,000,000 calls per day.
-   Share on LinkedIn, for contrast: 150 requests per day per member and 100,000 per day per application.

Those are generous ceilings, which tells you the constraint here was never throughput. It is admission.

## What getting approved actually takes

If you are a developer deciding whether to even start, here is the honest shape of it.

-   You need a commercial relationship first. The docs repeatedly say to reach out to your LinkedIn Relationship Manager or Business Development contact, and if you do not have one, to submit the Talent Solutions Partner Request Form. This is a business development process, not a signup form.
-   You sign an API agreement with data restrictions. LinkedIn states you must meet certain criteria and sign that agreement before using the integration.
-   The profile that fits is an ATS or job distributor with existing customers. Every part of the design assumes it: you create a child API key per customer through the Provisioning API with a strict one-to-one mapping, and you build an onboarding widget to collect each customer’s company page ID and, for paid jobs, their Recruiter contract ID.
-   You certify before you go live. Apply Connect certification runs across seven modules and 28 numbered test cases covering token refresh, webhook signature verification, application delivery, plugin rendering, and retry logic. You demo them to your business development contact, and LinkedIn provisions your production API key only after full coverage.
-   LinkedIn does not publish a fee, an approval timeline, or an SLA for any of this. Anyone quoting you one is guessing.

That is a multi-quarter integration program with a commercial gate in front of it. Reasonable if you sell an ATS. Not something a solo developer finishes on a weekend.

## If you are an employer who wants jobs on LinkedIn

You almost certainly do not need to build this yourself. If your ATS is already a LinkedIn Talent Solutions partner, jobs flow through that integration and the work is configuration, not code. That is the normal path, and it is why the API is built around per-customer child applications in the first place. If you are choosing an ATS partly on this basis, see our walkthrough of [how ATS API integrations are structured](https://jobspipe.dev/blog/ats-api-integration) and the breakdown of [which ATS APIs are public and which are gated](https://jobspipe.dev/blog/public-vs-gated-ats-apis). LinkedIn is not unusual here. The same pattern shows up in [Indeed’s partner APIs](https://jobspipe.dev/blog/indeed-partner-apis), and it is the default across [job posting APIs](https://jobspipe.dev/blog/job-posting-api) as a category.

## If you actually wanted to read LinkedIn job data

Say it plainly: **LinkedIn does not offer an API for searching or reading job postings.** The Talent product catalog contains four products - Apply Connect, Apply with LinkedIn, Job Posting, and Recruiter System Connect - and every one of them is employer-side. The only read surface in the job stack is the Job Posting Status API, and it returns status for jobs you yourself submitted, keyed by your own `externalJobPostingId`. There is no endpoint that queries LinkedIn’s job index by title, company, or location.

That is why so much “LinkedIn jobs API” search traffic ends in disappointment. There is no gated program to apply to and no enterprise tier to buy. The capability does not exist as a product.

Which leaves two options. The first is scraping, covered in [building a LinkedIn job scraper in Python](https://jobspipe.dev/blog/linkedin-job-scraper-python). Be clear-eyed about it: it runs against LinkedIn’s User Agreement, it is aggressively rate limited and challenged, account and IP bans are routine, and the markup changes often enough that maintenance is the real cost rather than the build. Plenty of people do it anyway. Just price the ongoing breakage before you commit a roadmap to it.

The second is to stop treating one job board as the dataset. Most questions phrased as “LinkedIn job data” are really questions about the job market: who is hiring for a role, where, at what seniority, how recently. Those are better answered from broad coverage of public postings than from any single site.

JobsPipe is one such API: job postings from 30+ sources in one schema, served from one endpoint with a self-serve key. There is no partnership application and no business development call.

```
curl -X POST https://api.jobspipe.dev/v1/jobs/search \
  -H "Authorization: Bearer jp_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "job_title_or": ["backend engineer", "platform engineer"],
    "job_country_code_or": ["US", "GB"],
    "job_seniority_or": ["senior"],
    "remote": true,
    "posted_at_max_age_days": 7,
    "limit": 50,
    "include_total_results": true
  }'
```

You get back a `metadata` object with `total_results` and `next_cursor`, plus a `data` array of postings carrying title, company, location, country, compensation, seniority, posted date, a stable `id`, and an `apply_url`. The free plan includes 1,000 jobs to start. If you are still comparing options, we keep a running survey of [the jobs APIs worth considering](https://jobspipe.dev/blog/best-jobs-api-2026) and an explainer on [why unified job data beats per-source integrations](https://jobspipe.dev/blog/unified-api-job-data).

## The summary

LinkedIn has a real, well-documented job posting API at `POST /rest/simpleJobPostings`. You probably cannot get it: it needs a Talent Solutions partnership, and the docs say new Job Posting API partnerships are closed, pointing developers to Apply Connect. It is not the share API, which is what most people searching for this find first. And if you wanted to read job postings out of LinkedIn, no such API exists in any tier.

## Frequently Asked Questions

### Can you post jobs to LinkedIn via API?

Yes, but only as an approved LinkedIn Talent Solutions partner. The Job Posting API at POST https://api.linkedin.com/rest/simpleJobPostings lets ATS platforms and job distributors publish jobs on behalf of their customers. There is no self-serve path, and LinkedIn's own documentation currently states it is not accepting new partnerships for the Job Posting API, directing developers to request Apply Connect instead.

### What is the LinkedIn Job Posting API?

The LinkedIn Job Posting API is a Talent Solutions endpoint that lets authorized third parties post, update, renew, and close jobs on LinkedIn on behalf of customers, instead of a recruiter entering them manually on the website. It supports free basic jobs and paid promoted jobs that consume a customer's LinkedIn Recruiter job slots. Requests are batched, asynchronous, and return a task id you poll for the real result.

### How do I get access to the LinkedIn Talent Solutions API?

Access starts with a business relationship, not a signup form. LinkedIn directs developers to their Relationship Manager or Business Development contact, or to the LinkedIn Talent Solutions Partner Request Form if they do not have one. You then sign an API agreement with data restrictions, build against a test organization, and complete a certification demo covering every applicable test case before LinkedIn provisions a production API key. LinkedIn does not publish a fee or an approval timeline for this process.

### Is there a free LinkedIn jobs API?

No. LinkedIn's only open, self-serve permissions are profile and email from Sign In with LinkedIn using OpenID Connect, plus w\_member\_social from Share on LinkedIn for publishing feed posts. Everything in the Talent catalog, including job posting, requires partner approval. LinkedIn also explicitly forbids partners from marketing their integration as a free way to post jobs to LinkedIn.

### Can I search LinkedIn jobs with an API?

No. LinkedIn does not publish any API for searching or reading job postings. Its Talent product catalog contains only employer-side products: Apply Connect, Apply with LinkedIn, Job Posting, and Recruiter System Connect. The single read surface in the job stack is the Job Posting Status API, which returns status only for jobs your own application submitted. Developers who need broad job data typically use a jobs API such as JobsPipe that indexes public postings across many sources.

### What is the difference between the LinkedIn share API and the job posting API?

They are unrelated systems. The share or Posts API at POST https://api.linkedin.com/rest/posts publishes content to the LinkedIn feed, and the member-level permission w\_member\_social for it is self-serve. The Job Posting API at POST https://api.linkedin.com/rest/simpleJobPostings creates records in LinkedIn Jobs and is partner-gated. Posting text about a vacancy to the feed does not create a job listing, does not appear in LinkedIn job search, and does not consume a job slot.

Related

## Keep reading

-   [Guide · Jun 28, 2026How to scrape LinkedIn jobs in Python (and the API that replaces it)](https://jobspipe.dev/blog/linkedin-job-scraper-python)
-   [Reference · Jul 25, 2026Monster job posting API: the SOAP gateway, the search API, and who can actually use them](https://jobspipe.dev/blog/monster-job-posting-api)
-   [Product · Jul 28, 2026Every job posting, classified: ISCO-08 occupations, ISIC industries and skills, live on the API](https://jobspipe.dev/blog/classified-job-postings-api)
-   [Guide · Aug 12, 2026Levels.fyi API: what you get, how access works, and what it cannot answer](https://jobspipe.dev/blog/levels-fyi-api)
-   [Reference · Aug 25, 2026LinkedIn industries: the full list with V2 codes (2026)](https://jobspipe.dev/blog/linkedin-industries-list)


## Further reading

- [LinkedIn API](https://jobspipe.dev/sources/linkedin)
- [Is There a LinkedIn Jobs API?](https://jobspipe.dev/guides/linkedin-jobs-api)
- [LinkedIn API Cost: What Each Surface Actually Charges](https://jobspipe.dev/guides/linkedin-api-cost)
- [LinkedIn Jobs API: Public LinkedIn Job Postings as Normalized JSON](https://jobspipe.dev/linkedin-jobs-api)
- [Does LinkedIn have a jobs API?](https://jobspipe.dev/answers/does-linkedin-have-a-jobs-api)

---
Try it with no key: `curl -d '{"limit":3}' https://api.jobspipe.dev/v1/sandbox/jobs/search`. AI agents: the full machine-readable index of this site is https://jobspipe.dev/llms.txt?src=md-twin - API quickstart, MCP server, pricing. Free key (1,000 jobs to start): https://jobspipe.dev/signup