Platforms / LinkedIn
LivePlatform integration
Ship Your Integration
In Minutes, Not Weeks.
LinkedIn sunset five API versions in six months from 2024–25, breaking n8n, Zapier, Make, and every Postiz install. letmepost pins the version header, tracks deprecations, upgrades internally — your code keeps working when LinkedIn ships a breaking change at 2 a.m.
Live · personal posting · read the docs →
{
"targets": [{ "platform": "linkedin" }],
"accountId": "acc_li_xyz",
"text": "Shipped via letmepost. Version-pinned.",
"options": { "visibility": "PUBLIC" }
}Why letmepost vs LinkedIn REST direct?
LinkedIn Direct
- You track version sunsets weekly (5 in 6 months in 2024–25)
- You implement URN encoding for every share (
urn:li:share:...) - You apply for Marketing Developer Platform (12-week review)
- You hand-roll the audit-state error parser
- You manage org-vs-personal posting branches
- You handle MDP-gated permissions on every endpoint
letmepost API
- Version header pinned in one config value; we own deprecations
version.deprecatedwebhook fires before sunset- URN encoding handled, error envelope normalized
- Personal posting live through our reviewed app; nothing to file
- Personal posts live now; org posting is the next slice
- Audit-state errors mapped to stable preflight rules
⚠ Five API versions sunset in six months
LinkedIn shipped breaking version changes 5 times in 6 months from late 2024 through mid 2025. Every existing integration (Postiz, n8n, Zapier, Make, Pabbly) broke. letmepost users got version.deprecated webhooks days ahead and zero downtime.
Playground
Connect, configure, post.
OAuth on linkedin.com. Personal posts publish today through our reviewed app. Company-Page posting needs w_organization_social and is not supported yet — preflight rejects org URNs with a named rule rather than a vague 403.
Content types
Every LinkedIn surface, one shape.
How it works
Three steps, under two minutes.
Get your API key
Sign up at dashboard.letmepost.dev.
Connect a LinkedIn account
OAuth on linkedin.com. We request the minimum scope set. Token + refresh stored encrypted.
Publish a share
One POST /v1/posts with platform: "linkedin". Personal commentary publishes immediately.
Features
What we built so you don't.
Version pin + sunset tracking
We pin the version header in a single config. The version.deprecated webhook fires when LinkedIn announces a sunset, days before it lands.
URN encoding handled
urn:li:share:... formatting is one of LinkedIn's silent failure modes. We percent-encode correctly, fail loudly on malformed URNs.
MDP-aware error surface
If a token is missing an MDP permission, the error envelope says so — not a generic 403. Remediation hint points at the exact scope.
Personal now, org next
Personal commentary publishes today. Org posts hit the same endpoint but need w_organization_social; until that ships, preflight rejects an org URN with linkedin.author.org_not_supported instead of letting LinkedIn 403 you.
Code example
publish a share · typescript
import { Letmepost } from '@letmepost/sdk'; const lmp = new Letmepost({ apiKey: process.env.LMP_API_KEY }); const result = await lmp.posts.create({ targets: [{ platform: 'linkedin', accountId: 'acc_li_xyz' }], text: 'Just published a 3,000-grapheme deep-dive on API versioning.', options: { linkedin: { visibility: 'PUBLIC', // For org posts, add: organizationUrn: 'urn:li:organization:12345' }, }, });
Common questions
about linkedin posting
Is LinkedIn live?
Yes, for personal posting — connect an account and publish today through our reviewed app. Company-Page posting needs the w_organization_social grant and is not supported yet.
What about the version churn?
We pin the version header in one config value. GET /v1/platform-versions shows the current pin. The version.deprecated webhook fires before sunset, with the next pin in the payload.
Can I post to a Company Page?
Not yet. organizationUrn is reserved in the schema, but preflight rejects org URNs with linkedin.author.org_not_supported today — on self-hosted instances too, since the gate is in our code rather than in the credentials.
What's URN encoding?
LinkedIn IDs look like urn:li:share:7234567890. The colons need percent-encoding in URLs (urn%3Ali%3Ashare%3A...). We handle this; the docs page has a counter tool.
Does my company need its own MDP grant?
Not for personal posting — that runs on our reviewed app and works today. Org-level publishing will need one.
One API · 8 platforms
LinkedIn is just one of them.
Learn more
Good to know
Notes from the integration.
Live for personal posting through our reviewed app. Company-Page posting needs w_organization_social and is not supported yet.
Single config value. Sunset notifications via version.deprecated webhook before deprecation lands.
3,000-grapheme commentary. Image + video share posts. Org-level reactions/comments out of v1.
LinkedIn IDs require percent-encoded URNs. We handle this; handled server-side.
Self-host users register their own MDP entry. Note that Company-Page posting is gated in our code, not just by credentials — preflight rejects org URNs either way until the org slice ships.
READY FOR LINKEDIN PUBLISHING?
Personal commentary publishes today, version-pinned, through our reviewed app. One POST, and we own the sunsets.