PostEverywhere LinkedIn API Guide
PostEverywhere API reference for LinkedIn: request fields, media rules and examples for text, images, video and PDF carousels on profiles and pages.
Publish text posts, image posts, videos, and PDF carousel documents to LinkedIn profiles and company pages. PostEverywhere handles LinkedIn's multi-step media upload and UGC post creation through a single API call. For a general overview of all supported platforms, see the Introduction.
Connect your LinkedIn account to PostEverywhere
Connect LinkedIn from the dashboard with OAuth, or headlessly from code: mint a connect link and hand it to the account owner - no dashboard session needed. Both flows are covered in Connecting Accounts.
What you can post to LinkedIn
| Content Type | Media Required | Description |
|---|---|---|
| Text post | None | Plain text post with no media attachments. |
| Image post | Image(s) | Post with one or more images. Supports JPEG, PNG, WebP, and HEIC. |
| Video post | Video (MP4) | Native video post uploaded directly to LinkedIn. |
| PDF carousel | Document (PDF) | A PDF uploaded as a document post. LinkedIn displays each page as a swipeable carousel slide. |
LinkedIn is one of the most versatile platforms, supporting images, videos, and PDF documents in a single API.
LinkedIn-specific options in the API
Use the platform_content.linkedin object to customise your LinkedIn post:
{
"platform_content": {
"linkedin": {
"content": "LinkedIn-specific text (max 3000 chars)",
"settings": {
"visibility": "PUBLIC"
}
}
}
}
Settings Reference
| Setting | Type | Default | Description |
|---|---|---|---|
content |
string | N/A | Override the default text with a LinkedIn-specific version. Max 3,000 characters. |
settings.visibility |
string | "PUBLIC" |
Who can see the post. See values below. |
First comments are not available on LinkedIn through the API yet. A firstComment (or first_comment) sent for LinkedIn is removed before the post is saved, and the response notes say so. They work on X.
Visibility Options
| Value | Description |
|---|---|
PUBLIC |
Visible to everyone on LinkedIn, including non-connections. |
CONNECTIONS |
Visible only to your 1st-degree connections. Personal profiles only: a company page has no connections, so a company page post goes out as PUBLIC with a linkedin_visibility_public warning on the post. |
LOGGED_IN_MEMBERS |
Visible to any logged-in LinkedIn user, but not in public search. |
Publish to LinkedIn: a working request
Schedule a LinkedIn Post with a PDF Carousel
curl -X POST https://app.posteverywhere.ai/api/v1/posts \
-H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Default caption for other platforms",
"account_ids": [2275],
"media_ids": ["a7b8c9d0-e1f2-3456-7890-abcdef012345"],
"scheduled_for": "2026-04-16T08:30:00Z",
"timezone": "America/New_York",
"platform_content": {
"linkedin": {
"content": "I spent the last 6 months analyzing what makes content go viral on LinkedIn.\n\nHere are the 10 patterns I found (swipe through the carousel):\n\n1. Hook in the first line\n2. Use data, not opinions\n3. One idea per slide\n...\n\nDrop a comment if you want the full PDF.",
"settings": {
"visibility": "PUBLIC"
}
}
}
}'
Schedule a Connections-Only Text Post (personal profile)
curl -X POST https://app.posteverywhere.ai/api/v1/posts \
-H "Authorization: Bearer $POSTEVERYWHERE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Thinking about our next product direction.",
"account_ids": [2275],
"scheduled_for": "2026-04-16T12:00:00Z",
"timezone": "America/Chicago",
"platform_content": {
"linkedin": {
"content": "I have been reflecting on what our customers actually need vs. what we assumed they wanted.\n\nThe gap is bigger than expected.\n\nMore soon. Would love your thoughts in the comments.",
"settings": {
"visibility": "CONNECTIONS"
}
}
}
}'
LinkedIn limits: characters, media and video
| Requirement | Limit |
|---|---|
| Post text length | 3,000 characters (longer is refused with 400 content_too_long) |
| Image formats | JPEG, PNG, WebP, HEIC |
| Image max file size | 100 MB (JPG or PNG, at least 200 x 200) |
| Video format | MP4 (H.264) |
| Video max file size | 4 GB |
| Video duration | 3 seconds - 10 minutes |
| Document format | |
| Document max file size | 100 MB |
| PDF carousel pages | Up to 300 pages (practical limit ~20 for engagement) |
| Recommended image ratio | 1.91:1 (landscape) or 1:1 (square) |
Getting better results on LinkedIn
- Use PDF carousels for high engagement. LinkedIn's algorithm favors carousel documents because they increase dwell time. Upload a multi-page PDF and each page becomes a swipeable slide. Keep it to 8-12 slides for optimal engagement.
- Write longer, value-driven posts. LinkedIn rewards posts between 1,000-2,000 characters. Use the full 3,000-character limit to tell a story or share insights. The first line is your hook, make it count.
Common questions about posting to LinkedIn
How do I create a LinkedIn PDF carousel via the API?
Upload a PDF file using the Upload Media endpoint, then pass the returned UUID in the media_ids array in your Create Post request. LinkedIn automatically displays each page of the PDF as a swipeable carousel slide. Keep carousels to 8-12 slides for best engagement.
Can I post to LinkedIn company pages, not just personal profiles?
Yes. Connect your LinkedIn company page as a social account in PostEverywhere, then use the company page's account_id when creating a post. The API supports both personal profiles and company pages. One difference: CONNECTIONS visibility works only on personal profiles. A company page post with it goes out as PUBLIC, and the post carries a warning saying so (also in the warnings array of GET /v1/posts/:id/results).
Can the API post a first comment on LinkedIn?
Not yet. A firstComment sent for LinkedIn is removed before the post is saved, and the response notes say so. Put the link in the post body; the first URL becomes the link card (see below).
What is the maximum character limit for LinkedIn posts?
LinkedIn posts support up to 3,000 characters; a longer post is refused with 400 content_too_long. Posts between 1,000 and 2,000 characters tend to perform best. The first line of your post is your hook -- it appears before the "see more" fold, so make it count.
Why didn't my LinkedIn post get a rich link card?
A rich card requires four things to land in this order: (1) we extract a URL from your post body, (2) the URL responds with HTML, (3) we find an Open Graph title in that HTML, and (4) we successfully fetch the og:image, convert it to JPEG, and upload it to LinkedIn under 5 MB. If any step fails, we fall back to a plain text post that still contains the URL. Common failures: the page blocks bots (returns 403/empty body to our user-agent), has no og:image, or serves an image that fails to download. Carousels and image posts bypass the card pipeline entirely: LinkedIn shows the attached media instead.
Are bare URLs (without https://) detected for link cards?
Yes. We detect both explicit URLs (https://example.com/blog/foo) and bare URLs (example.com/blog/foo) as long as the host has at least one dot, the TLD is 2-10 alphabetic characters, and at least one path segment follows the host. Only the first URL in the post becomes the card (LinkedIn renders one card per post).
Can I edit a LinkedIn post after it's published?
No. PATCH /v1/posts/:id only accepts posts in scheduled or draft status. Once LinkedIn has accepted the post, it becomes published and the API returns 400 invalid_post_status. LinkedIn's own UGC API does not allow third-party tools to edit a published post's text: you must edit it on LinkedIn directly, or delete and recreate.
Other platforms you can publish to
- X (Twitter) -- professional commentary and thought leadership
- Facebook -- similar post formats with image, video, and link support
- Threads -- short-form text posts for conversation
Related LinkedIn and API reference pages
Related: LinkedIn media requirements · testing posts safely · scheduling LinkedIn posts with an API · social media API for developers · generate captions with AI