Everything an AI agent can do with the LinkedIn API.

A reference guide for building AI agents: every method, how to authenticate, and the permissions each one needs.

Endpoints28
API version202606
Last updated23 June 2026
Orientation

How the LinkedIn API works.

The LinkedIn API is how an app or AI agent works with LinkedIn: signing a member in, publishing a post for a person or a company page, reading and writing comments and reactions, and managing advertising accounts and campaigns. Access runs through OAuth 2.0, where a member consents and the app receives a token, and the permissions that token can carry depend on which Products and partner programs LinkedIn has approved for the app. Most of the API is gated behind that approval, and the Marketing and Community Management areas are versioned by month.

28Endpoints
7Capability groups
16Read
12Write
9Permissions
Authentication
LinkedIn uses OAuth 2.0. Almost every permission is a member permission obtained through 3-legged OAuth, where a member consents and the app receives an access token that acts on their behalf; a few partner programs use 2-legged (application) OAuth. Access tokens currently last 60 days, and refresh tokens are available only to a limited set of partners. Sign In with LinkedIn adds OpenID Connect, returning a signed ID token so the app learns who the member is.
Permissions
A token's scopes are gated behind LinkedIn Products and partner programs that the app must be approved for. Only three permissions are open and self-serve: profile and email (Sign In with LinkedIn using OpenID Connect) and w_member_social (Share on LinkedIn). Everything else, including r_organization_social, w_organization_social, rw_organization_admin, the social-feed scopes, r_ads, and rw_ads, requires applying for the Community Management or Advertising API Product. On top of the scope, the member must also hold the right company page or ad account role for the target.
Versioning
The Marketing and Community Management APIs are versioned by month through the Linkedin-Version header in YYYYMM format; the newest is 202606. A new version ships monthly and is supported for at least one year before it is sunset, such as 202506, which is now sunset. Every versioned call must name a version, since the latest is not applied by default, and a missing or deprecated version header returns an error. The Sign In and userinfo endpoints are unversioned.
Data model
LinkedIn is a Rest.li API over HTTPS, with versioned resources under https://api.linkedin.com/rest/ and consumer endpoints under /v2. Entities are identified by URNs, such as urn:li:organization:123 or urn:li:share:456, which must be URL-encoded in paths. Posts, comments, and reactions are authored either as a member (urn:li:person) or, with the right role, on behalf of an organization. Calls require the X-Restli-Protocol-Version: 2.0.0 header, and many list endpoints are Rest.li finders selected with a q parameter.
Connect & authenticate

Connection & authentication methods.

How an app or AI agent connects to LinkedIn determines what it can reach. Access runs through OAuth 2.0, and the permissions a token carries depend on which Products and partner programs LinkedIn has approved for the app.

Ways to connect

Versioned REST API

The versioned Marketing and Community Management APIs answer under https://api.linkedin.com/rest/ and require a Linkedin-Version header in YYYYMM format on every call, plus the X-Restli-Protocol-Version: 2.0.0 header. Identifiers are URNs, such as urn:li:organization:123, and many list endpoints use Rest.li finders.

Best forConnecting an app or AI agent to LinkedIn.
Governed byThe OAuth token and the permissions its approved Products grant.
Docs ↗

Consumer API (Sign In, userinfo)

Sign In with LinkedIn using OpenID Connect and the userinfo endpoint answer under https://api.linkedin.com/v2 and do not take a version header. This is the self-serve route for authenticating a member and reading their lite profile.

Best forAuthenticating a member and reading basic profile data.
Governed byThe OAuth token carrying openid, profile, and email scopes.
Docs ↗

Social-action push notifications

Within the Community Management API, approved partners can receive push notifications for social actions instead of polling. There is no general-purpose webhook system across the LinkedIn API, and push notifications are disabled at the Community Management Development access tier.

Best forApproved Community Management partners reacting to comments and reactions.
Governed byThe Community Management partner program and access tier.
Docs ↗
Authentication

Member authorization (3-legged OAuth)

The member grants consent through LinkedIn's authorization page, and the app exchanges the resulting code for an access token that acts on that member's behalf. Access tokens currently last 60 days, and refresh tokens last longer but are available only to a limited set of partners. Almost every LinkedIn permission is a member permission.

TokenOAuth 2.0 access token (member)
Best forActing on behalf of a signed-in member
Docs ↗

Application authorization (2-legged OAuth)

Some endpoints, mostly in the Sales Navigator and other partner programs, use the client credentials flow, where the app authenticates as itself rather than a member. This route is limited to specific approved programs.

TokenOAuth 2.0 access token (application)
Best forApproved partner programs that act as the application
Docs ↗

Sign In with LinkedIn (OpenID Connect)

An identity layer on top of OAuth 2.0. The openid scope returns an RS256-signed ID token (a JWT) alongside the access token, so the app learns who the member is without an extra call. The profile and email scopes add lite profile and email claims. This Product is open and self-serve.

TokenOAuth 2.0 access token plus an OIDC ID token
Best forLetting members sign in and reading basic profile data
Docs ↗
Capability map

What an AI agent can do in LinkedIn.

The LinkedIn API is split into areas an agent can act on, such as member sign-in, posts, comments and reactions, organization pages, media, and advertising. Each area has its own methods and its own permissions, and most are gated behind an approved Product or partner program.

Endpoint reference

Every LinkedIn API method.

Filter by method, access, or permission, or search any path. Select a row for version detail, rate limits, the related webhook event, and the source.

MethodEndpointWhat it doesAccessPermissionVersion

Sign In & profile

Authenticate a member with OpenID Connect and retrieve their lite profile, including name, picture, and email.2

Part of the open Sign In with LinkedIn using OpenID Connect Product, which is self-serve. Needs the openid and profile scopes; the email and email_verified fields need the email scope. The member's email address is returned only when email is granted.

Acts onmember
Permission (capability)profile
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Public metadata, served from www.linkedin.com, no token required. The jwks_uri at /oauth/openid/jwks holds the public keys used to verify the RS256-signed ID token.

Acts ondiscovery document
Permission (capability)None required
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Posts

Create, retrieve, update, and delete posts for a member or an organization page, including text, images, video, documents, articles, and reshares.5

Posting as a member needs w_member_social; posting as an organization needs w_organization_social, and the member must hold an ADMINISTRATOR, DIRECT_SPONSORED_CONTENT_POSTER, or CONTENT_ADMIN page role. Returns 201 with the post URN in the x-restli-id header. Needs the Share on LinkedIn, Community Management, or Advertising Product.

Acts onpost
Permission (capability)w_member_social
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Reading organization posts needs r_organization_social with an admin page role; reading a member's own posts needs the restricted r_member_social, granted to approved partners only. The URN must be URL encoded.

Acts onpost
Permission (capability)r_organization_social
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Finding an organization's posts needs r_organization_social; finding a person's posts needs the restricted r_member_social. Returns both organic and sponsored posts; the isDsc filter is deprecated. Max count is 100.

Acts onpost
Permission (capability)r_organization_social
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Sent as a partial update with the X-RestLi-Method: PARTIAL_UPDATE header. Needs w_organization_social or w_member_social depending on the author. A successful update returns 204.

Acts onpost
Permission (capability)w_organization_social
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Deletion is idempotent and returns 204, even for an already-deleted post. Batch delete is not supported. Needs w_organization_social or w_member_social depending on the author.

Acts onpost
Permission (capability)w_organization_social
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Shares (legacy ugcPosts)

Read posts created through the older ugcPosts API, which the Posts API replaces.1

ugcPosts is the older content API; new integrations should use the Posts API. Reading an organization's posts needs r_organization_social.

Acts onugcPost
Permission (capability)r_organization_social
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Comments & reactions

Read and write comments on posts, and add or remove reactions such as Like, Celebrate, and Love.6

Commenting as a member needs w_member_social_feed; as an organization, w_organization_social_feed with an admin page role. The new comment's id is returned in the x-restli-id header. Part of the Community Management Product.

Acts oncomment
Permission (capability)w_member_social_feed
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Reading an organization's comments needs r_organization_social_feed with an admin page role; reading a member's own needs the restricted r_member_social_feed. A single comment is fetched at /comments/{commentId}.

Acts oncomment
Permission (capability)r_organization_social_feed
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Needs w_member_social_feed, or w_organization_social_feed when deleting as an organization. The actor query parameter is required only for organization deletes.

Acts oncomment
Permission (capability)w_member_social_feed
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Reacting as a member needs w_member_social_feed; as an organization, w_organization_social_feed with an admin page role. The MAYBE reactionType is deprecated and returns 400. Returns 201 on success.

Acts onreaction
Permission (capability)w_member_social_feed
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Reading an organization's reactions needs r_organization_social_feed with an admin page role; reading a member's own needs the restricted r_member_social_feed. A single reaction is fetched by its actor-and-entity composite key.

Acts onreaction
Permission (capability)r_organization_social_feed
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Needs w_member_social_feed, or w_organization_social_feed when removing an organization's reaction. Returns 204 on success.

Acts onreaction
Permission (capability)w_member_social_feed
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Media upload

Register and retrieve image and video assets for use in posts and ads.3

Accepts rw_ads, w_member_social, or w_organization_social. For a company owner the caller needs an ADMIN or DSC page role; for a member owner the caller must match the owner. Image is then PUT to the returned upload URL.

Acts onimage
Permission (capability)w_organization_social
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

On versioned calls, a token holding only w_member_social cannot GET an image, since that scope is write-only here; w_organization_social or rw_ads is needed to read. For a company-owned image the caller needs an admin or DSC page role.

Acts onimage
Permission (capability)w_organization_social
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Mirrors the Images API permission model: rw_ads, w_member_social, or w_organization_social, with an admin or DSC page role for an organization owner. The video is uploaded in parts to the returned URLs and finalized.

Acts onvideo
Permission (capability)w_organization_social
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Organizations

Look up company pages by id or vanity name and read an organization's follower count.3

Full fields require the member to hold the ADMINISTRATOR role on the organization; a non-admin lookup returns 403 or only public fields. Needs the Community Management or Advertising Product.

Acts onorganization
Permission (capability)rw_organization_admin
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Returns non-admin (public) fields and so works without administering the page. Wildcards and boolean logic are not supported in the search string.

Acts onorganization
Permission (capability)rw_organization_admin
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

The edgeType value changed from CompanyFollowedByMember to COMPANY_FOLLOWED_BY_MEMBER in v202305, and the two are not interchangeable across versions.

Acts onorganization
Permission (capability)r_organization_social
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Marketing (ads)

Create, read, update, and search advertising accounts, campaign groups, and campaigns.8

Needs r_ads or rw_ads, plus an ad account role on each account. From v202401 this finder uses cursor pagination via pageToken and pageSize (max 1,000). Part of the Advertising API Product.

Acts onad account
Permission (capability)r_ads
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Needs r_ads or rw_ads. The VIEWER ad account role is read-only even with the rw_ads scope.

Acts onad account
Permission (capability)r_ads
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Needs rw_ads with an ACCOUNT_BILLING_ADMIN, ACCOUNT_MANAGER, CAMPAIGN_MANAGER, or CREATIVE_MANAGER role. Only BUSINESS accounts can be created through the API. At the Development access tier each app can create only one test account.

Acts onad account
Permission (capability)rw_ads
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Sent as a partial update with the X-RestLi-Method: PARTIAL_UPDATE header; returns 204. A non-draft account is removed by setting status to PENDING_DELETION; only the billing admin can delete.

Acts onad account
Permission (capability)rw_ads
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Needs r_ads or rw_ads with an ad account role. Campaign groups are nested under their ad account in the path.

Acts oncampaign group
Permission (capability)r_ads
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Needs r_ads or rw_ads with an ad account role. Campaigns are nested under their ad account in the path.

Acts oncampaign
Permission (capability)r_ads
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Needs rw_ads with an editing ad account role. An account holds at most 5,000 campaigns. At the Development access tier, edits are limited to up to five ad accounts.

Acts oncampaign
Permission (capability)rw_ads
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply

Needs r_ads or rw_ads with an ad account role.

Acts oncampaign
Permission (capability)r_ads
VersionAvailable since the API’s base version
Webhook eventNone
Rate limitStandard limits apply
No endpoints match those filters.
Webhooks

Webhook events.

LinkedIn has no general-purpose webhook system for most APIs. Social-action push notifications exist only within the Community Management API for approved partners, and are disabled at the Development access tier, so most integrations learn about activity by calling the API.

EventWhat it signalsTriggered by
No events match that search.
Rate limits & pagination

Rate limits, pagination & request size.

LinkedIn limits how much an app or AI agent can call through two daily quotas that reset at midnight UTC: one for the whole application and one for each member's token. The exact ceiling depends on the endpoint and is shown in the Developer Portal rather than published in the docs.

Request rate

LinkedIn rate-limits by daily call counts that reset at midnight UTC, not by a per-second rate. Two quotas apply at once: an application limit on the total calls the app makes in a day, and a member limit on the calls a single member's token can make in a day through the app. The ceiling depends on the endpoint and is not published in the docs; an app sees the limit for any endpoint it has called that day on the Analytics tab of the Developer Portal. As a concrete example, the Community Management Development access tier caps an app at 500 calls per 24 hours and 100 calls per member per 24 hours, with batch-get calls disabled, while the Standard tier removes those restrictions. Exceeding a limit returns a 429 response, and developer admins get an email alert once an application-level quota passes 75 percent, roughly one to two hours after the fact.

Pagination

Most list endpoints use Rest.li paging with start and count parameters, where count tops out at 100 on the Posts finder and up to 1,000 on some others such as images and ad accounts, and a links array with a next href carries the cursor to the following page. From version 202401, the advertising search finders moved to cursor-based pagination using pageSize and pageToken, with nextPageToken returned in the response metadata.

Request size

Requests and responses are JSON over HTTPS, with identifiers expressed as URNs that must be URL-encoded in paths and query strings. Access tokens are around 500 characters today, and LinkedIn advises planning for at least 1,000. Images must be under 36,152,320 pixels in JPG, GIF, or PNG, with GIFs up to 250 frames. An ad account holds at most 5,000 campaigns and 15,000 creatives.

Errors

Status codes & error handling.

The status codes an agent should handle, and what to do about each.

StatusCodeMeaningWhat to do
400INVALID_URN_TYPE / MISSING_FIELDThe request was malformed: a URN is the wrong type or invalid, a required field is missing, an enum value is invalid, or a Rest.li 2.0 query parameter is not encoded correctly.Fix the named field or URN, ensure required fields are present, and URL-encode URNs and query parameters for Rest.li 2.0.
401EMPTY_ACCESS_TOKEN / invalid_requestThe OAuth access token is missing, invalid, or expired, or an OAuth flow parameter such as redirect_uri or client_id does not match.Send a valid Bearer token, refresh it before its 60-day expiry, and confirm the redirect URI and client credentials match the app.
403ACCESS_DENIEDThe token lacks the required scope, the app lacks the Product that grants it, or the member lacks the needed company page or ad account role for the target.Grant the missing scope, apply for the Product or partner program that provides it, and confirm the member holds the right page or account role.
404NOT_FOUNDThe requested entity does not exist, was deleted, or is an inactive organization.Confirm the URN or id is correct and that the entity is still active.
426Version header missing or deprecatedA versioned call was sent without a Linkedin-Version header, or with a version that has been sunset, such as 202506.Send a Linkedin-Version header in YYYYMM format set to a supported version, and migrate off any sunset version.
429TOO_MANY_REQUESTSA daily rate limit was exceeded, either the application-level or the per-member quota for that endpoint, both of which reset at midnight UTC. LinkedIn may also return 429 briefly as infrastructure protection.Slow down and retry after the daily reset, and check the endpoint's limit on the app's Analytics tab in the Developer Portal.
500INTERNAL_SERVER_ERRORAn unexpected error on LinkedIn's side. A 503 SERVICE_UNAVAILABLE means the service is temporarily unavailable.Retry after a short delay, and contact LinkedIn Developer Support if it persists.
Versioning & freshness

Version history.

LinkedIn versions its Marketing and Community Management APIs by month through the Linkedin-Version header, in YYYYMM format. The newest version is 202606, a new version ships every month, and each is supported for at least one year before it is sunset.

Version history

What changed, and when

Latest version202606
202606Current version
Current version (June 2026)

LinkedIn's Marketing and Community Management APIs are versioned by month through the Linkedin-Version header in YYYYMM format. 202606 is the latest version, served from the base path https://api.linkedin.com/rest/. A new version ships each month and is supported for at least one year, and every versioned call must name a version since the latest is not applied by default.

What changed
  • Latest monthly version of the versioned Marketing and Community Management APIs.
  • Supported for at least one year from release before any sunset.
202504
Member profile analytics added

The r_member_profileAnalytics permission, which returns a member's profile viewers, followers, and search appearances, became available in versions from 202504 onward under the Community Management API.

What changed
  • r_member_profileAnalytics supported from version 202504.
202506
Member post analytics added, then sunset

The r_member_postAnalytics permission, returning impressions, reactions, comments, and shares for a member's posts, became available from version 202506. The 202506 version itself (Marketing June 2025) has since been sunset, and integrations are advised to migrate to a supported version.

What changed
  • r_member_postAnalytics supported from version 202506.
  • Version 202506 (Marketing June 2025) has been sunset.
202401
Cursor pagination for advertising search

From version 202401, the advertising search finders moved from index-based pagination to cursor-based pagination, using pageSize and pageToken, with nextPageToken returned in the response metadata.

What changed
  • Advertising search finders switched to cursor pagination (pageSize, pageToken).
  • Find Organization by Email Domain finder discontinued from version 202408 and above.
Earlier
Versioned APIs and Posts API introduced

LinkedIn's first versioned Marketing API release was June 2022, under the new base path https://api.linkedin.com/rest/. The Posts API was introduced to replace the older ugcPosts content API, and the Images API replaced the Assets (Vector) API.

What changed
  • June 2022: first versioned Marketing API release and the /rest/ base path.
  • Posts API introduced to replace the ugcPosts API.
  • Images API introduced to replace the Assets / Vector API.

Every versioned call must name a version; the latest is not applied by default.

LinkedIn Marketing API changelog ↗
Questions

LinkedIn API, answered.

Why can't I access most of the LinkedIn API straight away?+
Almost all of LinkedIn's API is gated behind Products and partner programs that an app must be approved for. Only three permissions are open and self-serve: profile and email for Sign In with LinkedIn using OpenID Connect, and w_member_social for Share on LinkedIn. Reading or writing organization content, social actions, or ads requires applying for the Community Management API or the Advertising API, and some programs such as Sales Navigator and Matched Audiences have stricter qualification criteria evaluated by LinkedIn.
How does API versioning work?+
The Marketing and Community Management APIs are versioned by month. Each request must send a Linkedin-Version header in YYYYMM format, such as 202606, the current version. A new version ships every month and is supported for at least one year before it is sunset; 202506 has already been sunset. The latest version is never applied automatically, so a call with no version header, or with a deprecated one, returns an error. Sign In with LinkedIn and the userinfo endpoint are not versioned.
What are the rate limits?+
LinkedIn limits by daily call counts that reset at midnight UTC, with two quotas at once: one for the whole application and one for each member's token through the app. Standard limits are not published in the docs and depend on the endpoint; an app looks up the limit for any endpoint it has called that day on the Analytics tab of the Developer Portal. As an example, the Community Management Development access tier allows 500 calls per app per day and 100 per member per day. Exceeding a limit returns 429.
Does LinkedIn support webhooks?+
There is no general-purpose webhook system across the LinkedIn API. The one push mechanism is social-action push notifications inside the Community Management API, available to approved partners and disabled at the Development access tier. Most integrations learn about new activity by calling the API, for example the comments and reactions finders on a post.
How do I post as a company page rather than a member?+
Set the post's author to the organization URN, such as urn:li:organization:123, and use the w_organization_social scope instead of w_member_social. The authenticated member must also hold a company page role of ADMINISTRATOR, DIRECT_SPONSORED_CONTENT_POSTER, or CONTENT_ADMIN on that organization, or the call returns 403. The same member-versus-organization split applies to comments and reactions, which use the social-feed scopes.
Is there an official LinkedIn MCP server?+
No. LinkedIn does not publish a first-party Model Context Protocol server. Several community-built LinkedIn MCP servers exist on GitHub, but they are independent projects, not official, and connect through the same OAuth-gated API. An agent reaches LinkedIn through the versioned REST API and the consumer Sign In endpoints.
How long do access tokens last, and can I refresh them?+
Access tokens currently last 60 days. Refreshing happens without a fresh consent prompt when the member is still logged in to LinkedIn, but programmatic refresh tokens are available only to a limited set of approved partners. If the scopes an app requests change, the member must re-authenticate, and requesting a different scope than before invalidates any previously issued tokens.
Related

More social API guides for agents

What is Bollard AI?

Control what every AI agent can do in LinkedIn.

Bollard AI sits between a team's AI agents and LinkedIn. Grant each agent exactly the access it needs, read or write, area by area, and every call is checked and logged.

  • Set read, write, or full access per agent, never a shared LinkedIn token.
  • Denied by default, so an agent reaches only what has been explicitly allowed.
  • Every call recorded in plain English: who, what, where, and the decision.
LinkedIn
Social Agent
Read company posts ResourceOffReadFull use
Publish a post ActionOffReadFull use
Manage ad campaigns ResourceOffReadFull use
Per-agent access, set in Bollard AI, not in LinkedIn