LinkedIn Upload API
This section details how to upload text posts, photos, multi-image posts, videos, and document carousels to LinkedIn personal profiles and company pages.
Base URL
https://api.multi-upload-tool.com/api/v1
Authentication
All requests require an API Token in the header:
x-api-key: YOUR_API_TOKEN
Personal Profiles & Company Pages
LinkedIn personal profiles and company pages are both connected as separate accounts. When you connect a LinkedIn company page, it appears as its own account with its own accountId. You simply post to that account directly — there is no need for a separate targetPageId parameter.
Important: Title vs Description
On LinkedIn, the description field is what appears as the body text of the post. This is the main content your audience sees.
The title field is not published to LinkedIn. It is only used internally within the Multi Upload Tool UI (e.g. in the upload history, pools, and scheduling views) to help you identify your posts. If you want text to appear on LinkedIn, put it in description.
| Field | Where it appears |
|---|---|
description | Published as the LinkedIn post body text (commentary) |
title | Internal label only (visible in Multi Upload Tool UI, pools, history) |
Text Formatting
The API automatically converts Markdown-style formatting to Unicode characters that render as bold and italic on LinkedIn.
| Syntax | Result | Example |
|---|---|---|
**text** | Bold | **Hello** renders as bold on LinkedIn |
*text* | Italic | *Hello* renders as italic on LinkedIn |
***text*** | Bold Italic | ***Hello*** renders as bold italic on LinkedIn |
This conversion happens automatically. You simply write your description using standard Markdown bold/italic syntax.
Example
**Big News!** We're launching *something amazing* this week.
Check out our ***brand new product*** now.Notes
- Accented characters (e, a, etc.) are not converted as there are no Unicode bold/italic equivalents for diacritics.
- Emojis, punctuation, and special characters pass through unchanged.
- Bullet points (
* item) are not mistakenly converted to italic. - Hashtags (
#topic) and mentions work normally alongside formatting.
Requirements
LinkedIn Photo Requirements
- File Format: JPEG, PNG, GIF, WebP
- Max File Size: 10 MB
LinkedIn Multi-Image Requirements
- Image Count: 2 to 20 images per post
- File Format / Size: same as single photo (JPEG, PNG, GIF, WebP; 10 MB each)
LinkedIn Video Requirements
- File Format: MP4 (recommended), MOV, AVI, MKV
- Max File Size: 500 MB
- Duration: 3 seconds to 15 minutes (recommended)
LinkedIn Document (Carousel) Requirements
- File Format: PDF, DOC, DOCX, PPT, PPTX
- Max File Size: 100 MB
Validation & Limits
This table documents all validation limits enforced by the Multi Upload Tool API for LinkedIn uploads. These limits are based on our code implementation and LinkedIn’s official API documentation.
| Constraint | Limit | Notes |
|---|---|---|
| Post Text (description) | 3,000 characters | Maximum length of the post body text. |
| Title (internal label) | 400 characters | For internal tracking only; not published to LinkedIn. |
| Image File Size | 10 MB | Per image in single or multi-image posts. |
| Video File Size | 500 MB | Maximum video file size for single video posts. |
| Document File Size | 100 MB | Maximum document file size for carousel posts. |
| Multi-Image Count | 2–20 images | A multi-image post requires at least 2 and no more than 20 images. |
| Visibility | PUBLIC, CONNECTIONS | Controls who can see your post. Organization pages cannot use CONNECTIONS. |
| Image Formats | JPEG, PNG, GIF, WebP | Supported formats for photo uploads. |
| Video Formats | MP4, MOV, AVI, MKV | Supported formats for video uploads. |
| Document Formats | PDF, DOC, DOCX, PPT, PPTX | Supported formats for document carousel uploads. |
Source: LinkedIn Content Consumption API
Upload Text Post
Create a text-only post on LinkedIn.
Endpoint
POST /upload
Content-Type
multipart/form-data
Parameters
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
async | string | No | Default "true". If "false", the API waits for upload completion. |
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
accountId | string | Yes | The ID of the connected LinkedIn account (personal profile or company page). |
description | string | Yes | The text content of the post. Supports **bold**, *italic*, ***bold italic***. |
title | string | No | Internal label (not published to LinkedIn). |
visibility | string | No | PUBLIC (default) or CONNECTIONS. |
Example Request
curl --location 'https://api.multi-upload-tool.com/api/v1/upload' \
--header 'x-api-key: YOUR_API_KEY' \
--form 'accountId="12345"' \
--form 'description="**Exciting news!** We just launched *something new*."' \
--form 'visibility="PUBLIC"'Upload Photo
Upload a single photo to LinkedIn.
Endpoint
POST /upload
Content-Type
multipart/form-data
Parameters
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
async | string | No | Default "true". If "false", the API waits for upload completion. |
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
accountId | string | Yes | The ID of the connected LinkedIn account (personal profile or company page). |
photo | File | Yes | The image file to upload. |
description | string | No | The text content of the post. Supports **bold**, *italic*. |
title | string | No | Internal label (not published to LinkedIn). |
visibility | string | No | PUBLIC (default) or CONNECTIONS. |
Example Request
curl --location 'https://api.multi-upload-tool.com/api/v1/upload' \
--header 'x-api-key: YOUR_API_KEY' \
--form 'accountId="12345"' \
--form 'photo=@"/path/to/image.jpg"' \
--form 'description="Check out our new office! **We are hiring.**"' \
--form 'visibility="PUBLIC"'Upload Multi-Image Post
Publish a multi-image post by sending the photo field multiple times. The images appear as a swipeable gallery on LinkedIn.
Endpoint
POST /upload
Content-Type
multipart/form-data
Parameters
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
async | string | No | Default "true". If "false", the API waits for upload completion. |
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
accountId | string | Yes | The ID of the connected LinkedIn account (personal profile or company page). |
photo | File[] | Yes | Two to 20 image files. Repeat the photo field once per image. |
description | string | No | The text content of the post. Supports **bold**, *italic*. |
title | string | No | Internal label (not published to LinkedIn). |
visibility | string | No | PUBLIC (default) or CONNECTIONS. |
Example Request
curl --location 'https://api.multi-upload-tool.com/api/v1/upload' \
--header 'x-api-key: YOUR_API_KEY' \
--form 'accountId="12345"' \
--form 'photo=@"/path/to/image1.jpg"' \
--form 'photo=@"/path/to/image2.jpg"' \
--form 'photo=@"/path/to/image3.jpg"' \
--form 'description="Highlights from our team offsite"' \
--form 'visibility="PUBLIC"'Notes
- A multi-image post requires 2 to 20 images. A single
photois published as a normal single-image post. - Each image must meet the LinkedIn photo requirements (JPEG, PNG, GIF, WebP; max 10 MB each).
Upload Video
Upload a video to LinkedIn.
Endpoint
POST /upload
Content-Type
multipart/form-data
Parameters
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
async | string | No | Default "true". If "false", the API waits for upload completion. |
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
accountId | string | Yes | The ID of the connected LinkedIn account (personal profile or company page). |
video | File | Yes | The video file to upload (max 500 MB). |
description | string | No | The text content of the post. Supports **bold**, *italic*. |
title | string | No | Internal label (not published to LinkedIn). |
visibility | string | No | PUBLIC (default) or CONNECTIONS. |
Example Request
curl --location 'https://api.multi-upload-tool.com/api/v1/upload' \
--header 'x-api-key: YOUR_API_KEY' \
--form 'accountId="12345"' \
--form 'video=@"/path/to/video.mp4"' \
--form 'description="Watch our latest product demo"' \
--form 'visibility="PUBLIC"'Upload Document (Carousel)
Upload a PDF or document to LinkedIn as a carousel post.
Endpoint
POST /upload
Content-Type
multipart/form-data
Parameters
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
async | string | No | Default "true". If "false", the API waits for upload completion. |
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
accountId | string | Yes | The ID of the connected LinkedIn account (personal profile or company page). |
photo | File | Yes | The document file (PDF, DOC, DOCX, PPT, PPTX). |
description | string | Yes | The text content displayed above the carousel. Supports **bold**, *italic*. |
title | string | No | Internal label (not published to LinkedIn). |
media_type | string | No | Set to DOCUMENT for carousel uploads. Auto-detected from file extension if omitted. |
visibility | string | No | PUBLIC (default) or CONNECTIONS. |
Example Request
curl --location 'https://api.multi-upload-tool.com/api/v1/upload' \
--header 'x-api-key: YOUR_API_KEY' \
--form 'accountId="12345"' \
--form 'photo=@"/path/to/slides.pdf"' \
--form 'description="**5 tips** to *boost your productivity* this quarter"' \
--form 'media_type="DOCUMENT"' \
--form 'visibility="PUBLIC"'