One versioned source, three unversioned ones

Does LinkedIn have an API?

Does LinkedIn have an API? Yes. For publishing a video to a member's feed the relevant one is the Videos API, reached with an access token a member granted through LinkedIn's 3-legged OAuth flow. The harder question is what that API actually pins down: LinkedIn versions the API itself but not the pages carrying its video specifications, and the two are easy to mistake for one another.

Does LinkedIn have an API for publishing video?

Yes, and the one that matters for a feed video is the Videos API. It uploads the asset and returns a video URN that a post then references. Access is not something an application holds on its own: it is an access token a member granted, through the flow LinkedIn titles 3-legged OAuth.

The permissions LinkedIn lists for the Videos API, in LinkedIn’s own words
PermissionLinkedIn’s descriptionWhat that means in practice
w_member_socialPost, comment, and like posts on behalf of authenticated memberThe member-feed case. LinkedIn additionally requires that the caller matches the video owner for videos with member URN owners.
w_organization_socialPost, comment, and like posts on behalf of an organization. Restricted to the company admin, DSC poster, or content adminThe Page case, and a different authorization story: LinkedIn checks for ADMIN or DSC permissions on the company page.
rw_adsCreate ads and creatives for a sponsored accountAdvertising, not organic posting. It is listed on the same page, which is part of why the page's specification block is easy to misread.
r_adsRead an authenticated member's Ad AccountAlso advertising. Restricted to members holding a named role on the ad account.

Two consent details are worth knowing before you design around this. A member cannot grant part of a request — LinkedIn states that where several scopes are asked for, the member must consent to all of them and may not select individual ones — and asking for a different scope later invalidates the tokens already issued. LinkedIn also says plainly that it does not generate long-lived access tokens, and that tokens are currently issued with a sixty-day lifespan; programmatic refresh is limited to a set of partners rather than generally available.

What publishing a video through the API involves

LinkedIn documents a four-step multipart upload. It is worth reading before choosing a path, because the failure modes are spread across the steps rather than concentrated at the end.

  1. 1

    Initialize the upload

    POST to /rest/videos?action=initializeUpload declaring the owner URN and fileSizeBytes. LinkedIn returns a video URN, one or more upload URLs and an upload token. fileSizeBytes is required, and its documentation is where LinkedIn states the maximum allowed video size.

  2. 2

    Split the file into parts

    LinkedIn's own instruction is to split the file into 4 MB pieces. The response's uploadInstructions carry a byte range per part, beginning at 0–4194303, so the parts and the ranges have to line up.

  3. 3

    Upload each part and keep its ETag

    PUT each part to its upload URL. LinkedIn returns an ETag header per part, and those become the uploadedPartIds in the next step, in the same order as the instructions. Upload URLs expire, and uploading to an expired URL returns 401.

  4. 4

    Finalize, then read the asset back

    POST to /rest/videos?action=finalizeUpload with the upload token and the ordered part IDs. Afterwards a GET on the video URN reports status as WAITING_UPLOAD, PROCESSING, AVAILABLE or PROCESSING_FAILED, with processingFailureReason present only in the failure case. Finalizing is not the same as the asset being servable.

Every request carries a Linkedin-Version header in YYYYMM form alongside X-Restli-Protocol-Version: 2.0.0, and LinkedIn retires versions on a published schedule. A working integration is therefore a dated one: the version you pin is a fact about when you built it.

Read the asset back rather than trusting the finalize call. LinkedIn returns duration, aspectRatioWidth and aspectRatioHeight on the video, and describes each as empty when the asset is unavailable or processing failed. Those fields describe a processed asset; they are not input constraints, and reading them as a permitted range is the most inviting mistake on the page.

What LinkedIn actually pins down, and what it only prints

This is the part that decides how much of the rest can be trusted. LinkedIn versions its API and does not version the pages carrying its video numbers, and the two sit close enough together to be mistaken for one another.

Four first-party sources, four different scopes
SourceVersioned?Scoped toWhat it is
The Videos API referenceVersionedThe API itselfRequests carry a Linkedin-Version header in YYYYMM form, and the documentation is published per version. This is the one LinkedIn source with a version attached, which is why the file-size maximum on initializeUploadRequest.fileSizeBytes is the strongest video fact available.
“Video File Size Specifications”, on that same pageUnversioned in substanceAdvertisingIt introduces itself as specifications for non-connected-television video file sizing, links to Connected TV Ads specifications for the other case, and closes by referring the reader to Video Ads Advertising Specifications. Its numbers are the ads numbers. A reader following the citation meets this block before reaching the request field.
“Video specifications for your LinkedIn Pages and Career Pages”UndatedPages, not member profilesA help article with no version and no published date. It is also the source that withdraws formats in words, and a withdrawal is safe to act on in a way a maximum is not: honouring it can only narrow what gets sent.
“Video sharing troubleshooting”UndatedSharing, split by desktop and mobileWhere the resolution range and the aspect-ratio bounds come from. It splits its minimum duration by client rather than by surface, which is a further reason not to read a single organic bound off it.

The most repeated LinkedIn video figures on the web — three seconds to thirty minutes, seventy-five kilobytes to five hundred megabytes — come from that second row. They are advertising specifications, printed on the Videos API page, above the request field that states the actual upload maximum. Quoting them as organic publishing rules is not a small error: it is quoting a different product’s specification.

One further limit on the versioned source itself. LinkedIn’s rendered documentation names the repository it is generated from, MicrosoftDocs/linkedin-api-docs, and that repository is not public: both the page and the GitHub API return 404, checked . So even the versioned reference has no readable history — you can see what it says today, not when it changed.

What Postdom does here, and what it will not claim

Postdom publishes finished video you supply to TikTok, Instagram Reels, YouTube Shorts, LinkedIn, Facebook Reels, X, Snapchat Spotlight, Threads and Bluesky. It does not call the LinkedIn API directly. A publishing provider holds the LinkedIn connection and makes the calls; Postdom hands it the file and the post text. That single fact explains most of what follows, because what Postdom can promise is bounded by what it can observe, and it observes the provider rather than LinkedIn.

So the enforced set is deliberately small. Postdom rejects a LinkedIn video that is not video/mp4 before handing it over, because the withdrawal of the other formats is a first-party statement that can only narrow what gets sent. Official source; checked .

Postdom records no maximum duration for LinkedIn, because LinkedIn publishes none for organic posting through the API. The figures that circulate are scoped to Pages, to sharing, and to advertising respectively, and adopting one would turn a scoped number into a general rule. The file-size maximum LinkedIn does state on the upload request is recorded as a recommendation rather than a gate, because Postdom’s own global ceiling sits an order of magnitude below it and would reject first.

Postdom also sends no LinkedIn-specific settings at all — no privacy level, no comment control, no AI-disclosure flag — so nothing in this path narrows who sees a post. The provider does expose optional extras, and one of them is geographic restriction; Postdom does not treat that as a disclosure, because restricting an audience is targeting rather than a statement to that audience about the content.

Questions about the LinkedIn API

Does LinkedIn have an API for posting video?

Yes. The Videos API uploads the asset and returns a video URN, which a post then references. Access is an access token granted by a member through LinkedIn's 3-legged OAuth flow, carrying the w_member_social permission for a member's own feed or w_organization_social for a Page.

What does w_member_social actually allow?

LinkedIn describes it as posting, commenting and liking on behalf of the authenticated member. It is granted by that member, not by the application, and LinkedIn separately requires that the caller matches the owner of a video whose owner is a member URN. Holding a developer application is not access.

Can a member grant only part of what an application asks for?

No. LinkedIn states that where multiple scopes are requested the user must consent to all of them and may not select individual ones, which is why asking for the fewest permissions matters. Requesting a different scope later also invalidates the previously issued access tokens.

How long does LinkedIn access last?

LinkedIn states that access tokens are currently issued with a 60-day lifespan, and says plainly that it does not generate long-lived tokens in order to protect members' data. Programmatic refresh tokens exist but LinkedIn limits them to a set of partners, so re-authorization is the general case rather than the exception.

Why does LinkedIn's page show both 500MB and 5GB?

They are scoped to different things. The 500MB figure sits in a block that refers the reader to Video Ads Advertising Specifications; the 5GB figure is stated on initializeUploadRequest.fileSizeBytes, a required field of the upload request itself. Neither is presented by LinkedIn as the organic feed limit, and a page that quotes one without its scope is quoting an advertising specification as a publishing rule.

Does Postdom call the LinkedIn API directly?

No. Postdom hands a finished video and its post text to a publishing provider, which holds the LinkedIn connection and calls LinkedIn. That is why Postdom enforces so little here and reports no LinkedIn metrics: what Postdom can promise is bounded by what it can observe, and it observes the provider rather than LinkedIn.