Last updated: October 2026
Can you post a LinkedIn PDF carousel via the API?
Yes. A self-serve LinkedIn app with only the Share on LinkedIn product (w_member_social) can upload a PDF through /rest/documents and publish it as a document post on a personal profile. We verified this live on September 15, 2026 with API version 202608.
The LinkedIn API PDF carousel is a document post: you upload a PDF, LinkedIn renders each page as a slide, and readers swipe through it in the feed. Many answers online, including AI summaries, say the LinkedIn API cannot post documents. That is not what we saw when we called it, and it is not what LinkedIn's own Documents API page says.
Below: the three calls, the limits, the daily request budget, and where the "carousels are not supported" claim comes from.
The 3-step flow
Every call carries LinkedIn-Version in YYYYMM form and X-Restli-Protocol-Version: 2.0.0. The owner and the author are your member URN, urn:li:person: plus the sub value Sign In with OpenID Connect returns.
Step 1. Register the upload
Call initializeUpload on the Documents API. LinkedIn answers with a one-time uploadUrl, its expiry time, and the urn:li:document: id the post will reference.
curl -X POST 'https://api.linkedin.com/rest/documents?action=initializeUpload' \
-H "Authorization: Bearer $LINKEDIN_TOKEN" \
-H "LinkedIn-Version: 202608" \
-H "X-Restli-Protocol-Version: 2.0.0" \
-H "Content-Type: application/json" \
-d '{
"initializeUploadRequest": {
"owner": "urn:li:person:YOUR_MEMBER_ID"
}
}'
# Response
# {
# "value": {
# "uploadUrlExpiresAt": 1650567510704,
# "uploadUrl": "https://www.linkedin.com/dms-uploads/...",
# "document": "urn:li:document:C5F10AQGKQg_6y2a4sQ"
# }
# }Step 2. Upload the file
Send the PDF bytes to the uploadUrl with your bearer token. A 201 means LinkedIn has the file. Documents only support this asynchronous upload, so the asset moves from WAITING_UPLOAD to PROCESSING to AVAILABLE. You can check it with GET /rest/documents/{urn}.
curl -i --upload-file ./carousel.pdf \
-H "Authorization: Bearer $LINKEDIN_TOKEN" \
"UPLOAD_URL_FROM_STEP_1"Step 3. Create the post
Reference the document in content.media. The title names the document, and LinkedIn's own example uses the file name.
curl -X POST https://api.linkedin.com/rest/posts \
-H "Authorization: Bearer $LINKEDIN_TOKEN" \
-H "LinkedIn-Version: 202608" \
-H "X-Restli-Protocol-Version: 2.0.0" \
-H "Content-Type: application/json" \
-d '{
"author": "urn:li:person:YOUR_MEMBER_ID",
"commentary": "Five lessons from shipping our API. Swipe through.",
"visibility": "PUBLIC",
"distribution": {
"feedDistribution": "MAIN_FEED",
"targetEntities": [],
"thirdPartyDistributionChannels": []
},
"content": {
"media": {
"title": "Five lessons from shipping our API",
"id": "urn:li:document:C5F10AQGKQg_6y2a4sQ"
}
},
"lifecycleState": "PUBLISHED",
"isReshareDisabledByAuthor": false
}'A 201 response carries the new post id in the x-restli-id header. In our test the document post came back as urn:li:ugcPost:..., not urn:li:share:.... Store whichever prefix you get, both are post ids.
Characters in the caption
Thecommentary field uses LinkedIn's little text format, where characters like parentheses, brackets, @ and # are reserved. Escape them with a backslash or the caption can be cut off. Why LinkedIn API posts get truncated at parentheses.LinkedIn Documents API limits
From LinkedIn's Documents API page (version 202609) and our own test.
Common slide sizes for carousels, like 1080 by 1350, are a design convention, not a LinkedIn requirement. LinkedIn only documents the file type, the size and the page count.
Why other pages say it is impossible
LinkedIn's Posts API page has a table of content types. Documents are marked as supported for organic posts. A separate row, the carousel, is marked sponsored only, with the note "Organic carousel is currently not supported." That carousel is a sponsored ad format, and it is the row people quote when they say the API cannot post carousels.
What most people call a LinkedIn carousel is a PDF uploaded as a document. That is the document content type, it is organic, and it works with w_member_social. The other source of confusion is that the Documents API page sits under Community Management and talks about document ads, so it reads like a partner-only feature. Its permission table lists w_member_social, and a person URN owner is allowed.
Our test app had two self-serve products, Share on LinkedIn and Sign In with LinkedIn using OpenID Connect, and the scopes email, openid, profile and w_member_social. No Community Management API, no review. Text, single image, multi-image and PDF document posts all published to the member's profile with version 202608. More on what does need review in can I post to LinkedIn without partner approval.
Company Pages are different
Posting a document as a Company Page needs an organization URN owner andw_organization_social, which only comes with the vetted Community Management API. Everything on this page is about a personal profile.LinkedIn API rate limit: how many document posts per day
LinkedIn limits requests, not posts. The Share on LinkedIn page lists 150 requests per member per day and 100,000 per application per day, reset at midnight UTC. A document post is more than one request:
So budget at least two, and to be safe three, requests per document post. Status checks with GET /rest/documents are extra calls too. LinkedIn's rate limits page also says standard limits are not published in general: open your app in the Developer Portal and go to the Analytics tab to see the limit and usage for each endpoint you have called that UTC day. Over the limit, calls return HTTP 429 until the reset, and app admins get an email at 75% of an application-level limit.
For context on what the API costs and the other daily limits, see is the LinkedIn API free. If a call fails, paste the response into the LinkedIn API error decoder.
Where OpenTweet fits, honestly
OpenTweet's LinkedIn integration uses the same self-serve setup and the same version, 202608. Today it publishes text posts and image posts to your personal profile: one image, or a multi-image post. Each image is one initializeUpload call on /rest/images and one upload, then a single /rest/posts call.
The composer does not offer PDF upload yet, so OpenTweet does not post document carousels. If you need a PDF carousel today, use the three calls above or upload it in the LinkedIn app. For text and image posts, OpenTweet handles the OAuth flow and the scheduling, and the same post can go to X and Bluesky in one request.
curl -X POST https://opentweet.io/api/v1/posts \
-H "Authorization: Bearer ot_your_key" \
-H "Content-Type: application/json" \
-d '{
"text": "Five lessons from shipping our API.",
"platforms": ["linkedin", "x", "bluesky"],
"scheduled_date": "2026-10-20T09:00:00Z"
}'7-day free trial. Cancel anytime.
Frequently asked questions
Can you post a LinkedIn PDF carousel via the API?
Yes. A self-serve LinkedIn app with only the Share on LinkedIn product (w_member_social) can upload a PDF through /rest/documents and publish it as a document post on a personal profile. We verified this live on September 15, 2026 with API version 202608. LinkedIn shows the document as a swipeable carousel in the feed.
Do I need the Community Management API or partner approval to post a document?
Not for a personal profile. Our test app had only Share on LinkedIn and Sign In with LinkedIn using OpenID Connect, with the scopes email, openid, profile and w_member_social. The Community Management API is only needed to post as a Company Page, which requires w_organization_social.
Why do some guides say the LinkedIn API does not support carousels?
They are reading the Posts API content table, which lists the carousel content type as sponsored only: "Organic carousel is currently not supported." That carousel is a sponsored ad format. A PDF document post is a different content type, listed as supported for organic posts, and it is what people mean by a LinkedIn PDF carousel.
What file types and sizes does the LinkedIn Documents API accept?
PDF, PPT, PPTX, DOC and DOCX. LinkedIn's Documents API page states the file size cannot exceed 100 MB and 300 pages. LinkedIn's help center gives the same 100 MB and 300 page limit for documents shared in the app.
What URN does a document post return?
The post id comes back in the x-restli-id response header of the 201 response. In our September 2026 test, document posts and multi-image posts came back as urn:li:ugcPost URNs, while some other posts came back as urn:li:share. Treat both prefixes as valid post ids.
How many LinkedIn API posts can I make per day?
LinkedIn counts requests, not posts. The Share on LinkedIn page lists 150 requests per member per day and 100,000 per application, reset at midnight UTC. A document post takes at least two API calls (initializeUpload and the post itself) plus the file upload to LinkedIn's upload URL. Going over returns HTTP 429.
Can OpenTweet post a PDF carousel to LinkedIn?
Not yet. OpenTweet's LinkedIn integration publishes text posts and image posts (one image or a multi-image post) to your personal profile, and the composer has no PDF upload today. Document posts are proven to work on the API, but they are not wired into OpenTweet. Plans start at $11.99 a month with a 7-day free trial.
Sources: OpenTweet live test on 15 September 2026 (self-serve app, LinkedIn-Version 202608), and the Microsoft Learn LinkedIn docs for the Documents API, Posts API, Share on LinkedIn and Rate Limits. LinkedIn Help on supported media types. Checked 10 October 2026.
Keep exploring
LinkedIn API access, limits and errors.
LinkedIn carousel generator
Turn text or an X thread into a PDF carousel ready to upload.
Do I need LinkedIn partner approval?
Not for your own profile. Where LinkedIn review does apply.
Is the LinkedIn API free?
Every API product, the daily limits and the costs that are not on a price list.
LinkedIn API error decoder
Paste a LinkedIn API error and get the cause and the fix.
Post to LinkedIn from Python
The OAuth flow and a working /rest/posts call, step by step.
LinkedIn API 426 NONEXISTENT_VERSION
Why the LinkedIn-Version header breaks calls, and which version to send.
LinkedIn scheduler
Schedule LinkedIn text and image posts next to X and Bluesky.
Post to LinkedIn without building the integration
Text and image posts to LinkedIn, X and Bluesky from one composer or one API call, from $11.99 a month.
7-day free trial. Cancel anytime.