Key takeaways
- A post's author field is either a person URN (urn:li:person:{id}) or an organization URN (urn:li:organization:{id}) — posting as a person needs w_member_social, posting to a Company Page needs w_organization_social plus the authenticated member holding an admin-tier role on that page.
- Company Page (and most third-party scheduling) access runs through the Community Management API, a two-tier program: Development Tier (limited, 500 requests/app and 100/member by default) and Standard Tier, which requires a screencast video demonstrating each requested use case.
- Every request needs a LinkedIn-Version header in YYYYMM format (current as of September 2026: 202609) — LinkedIn ships a new version monthly and supports each for a minimum of one year before sunset.
- /rest/posts is documented as replacing the older ugcPosts/shares endpoints — build against it directly rather than the legacy surface.
LinkedIn API: how to post to a Company Page vs a personal profile
The author field on a post accepts either urn:li:person:{id} for a personal profile or urn:li:organization:{id} for a Company Page. Posting as a person requires the w_member_social scope. Posting to an organization requires w_organization_social, and the authenticated member additionally has to hold an ADMINISTRATOR, DIRECT_SPONSORED_CONTENT_POSTER, or CONTENT_ADMIN role on that specific Company Page — a scope grant alone is not sufficient without that role.
The Community Management API access tiers
Most third-party posting access, and essentially all Company Page access, is gated behind LinkedIn's Community Management API program rather than being self-serve. Development Tier is the initial approval level, with limited default request volume — recently raised from 100 to 500 requests per app and from 10 to 100 requests per member. Standard Tier, needed for full production volume, requires submitting a screencast video demonstrating each use case matching what was originally requested for review.
r_member_social — reading a person's own posts back — is explicitly called out in LinkedIn's own documentation as a currently closed permission, "not accepting access requests at this time due to resource constraints." Standard Tier's exact numeric rate limits beyond the Development Tier defaults above are not published on LinkedIn's access-tier documentation.
Versioning and the current posting endpoint
Every LinkedIn API call needs a LinkedIn-Version header in YYYYMM format — as of September 2026 the current value is 202609. LinkedIn ships a new version every month, and each version is supported for a minimum of one year before it sunsets; a missing or sunset version header returns a 400 error (or, on some endpoints, a distinct 426 "Version Header is Deprecated" response).
The current endpoint for creating a post is POST https://api.linkedin.com/rest/posts, with required headers X-Restli-Protocol-Version: 2.0.0 and Linkedin-Version: {YYYYMM}. LinkedIn's own documentation states plainly that the Posts API replaces the older ugcPosts API — a successful create returns 201 with the new post's URN in the x-restli-id response header.
FAQ
- What scope does posting to a LinkedIn Company Page need?
- w_organization_social, plus the authenticated member holding an ADMINISTRATOR, DIRECT_SPONSORED_CONTENT_POSTER, or CONTENT_ADMIN role on that specific page — the scope grant alone is not enough without one of those roles.
- What is LinkedIn's Community Management API?
- The access program most third-party apps need to post on behalf of members or Company Pages in production. It has two tiers: a limited Development Tier granted on initial approval, and a Standard Tier that requires submitting a screencast demonstrating each use case.
- Is the ugcPosts endpoint still the right one to use for creating a LinkedIn post?
- No — LinkedIn's own documentation states that the newer Posts API (POST /rest/posts) replaces ugcPosts. New integrations should build against /rest/posts directly.
- What is the LinkedIn-Version header and why is it required?
- A mandatory header in YYYYMM format (e.g. 202609) sent with every API call, since LinkedIn ships a new monthly API version and supports each one for at least a year — a missing or expired version header causes the request to fail.
- Can I read a LinkedIn member's own past posts back through the API?
- Not currently for most apps — the r_member_social permission that would allow this is explicitly documented as closed to new access requests due to resource constraints.
- How often does LinkedIn change its API version?
- Monthly — each version is named for its release month (YYYYMM) and is supported for a minimum of one year afterward, after which requests using it are rejected.