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.

terminal
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}.

terminal
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.

terminal
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

The commentary 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.

Limit
Value
File types
PDF, PPT, PPTX, DOC, DOCX
Maximum file size
100 MB
Maximum pages
300
Upload mode
Asynchronous only. SYNCHRONOUS_UPLOAD is not supported for documents.
Document owner
A person URN (your profile) or an organization URN. For a person, the caller must be that person.
Asset status values
WAITING_UPLOAD, PROCESSING, AVAILABLE, PROCESSING_FAILED
Post id returned
urn:li:ugcPost in our test, in the x-restli-id header

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 and w_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:

Step
Call
Counts toward the limit?
1. Register the upload
POST /rest/documents?action=initializeUpload
Yes, an API request
2. Send the file
PUT to the returned uploadUrl
Not documented either way
3. Publish the post
POST /rest/posts
Yes, an API 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.

terminal
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.

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.