LinkedIn API

Use the Crosspostify API to publish videos, images and multi-image posts to LinkedIn personal profiles and Company Pages.

Post Types
Video · Image · Multi-image
Account Types
Personal · Company Page
Title
Media title (optional)
Hashtags
In the caption

LinkedIn is the world's leading professional network. The Crosspostify LinkedIn API integration supports publishing to both personal profiles and Company Pages — with native video, single images and multi-image posts. Text-only posts are not available for LinkedIn.

This page covers everything specific to LinkedIn when using the Crosspostify API. For general authentication, rate limits, and error handling, see the full API Reference.

LinkedIn-Specific Parameters

LinkedIn uses a clean, minimal parameter set. There are no LinkedIn-only parameters — LinkedIn uses the shared accountId, caption and title fields. Platform-specific parameters from other networks are ignored. LinkedIn posts are always published as public posts.

accountId✓ AppliesRequired. The id of the connected LinkedIn account from GET /social-accounts (Crosspostify's account ID, not the LinkedIn profile or Page ID).
caption✓ AppliesOptional. The post text; also sent as the description of attached media. Hashtags in it are indexed by LinkedIn. Max 2,200 characters (longer text is cut).
title✓ AppliesOptional. Title of the attached image/video (multi-image: "title 1", "title 2"…). Max 90 characters (longer text is cut).
is_aigc✗ IgnoredTikTok, Instagram and Facebook only — ignored for LinkedIn.
link✗ IgnoredPinterest and Tumblr only — ignored for LinkedIn. Put URLs in the caption.
thumbnailTimestamp✗ IgnoredTikTok only — ignored for LinkedIn.
facebookFirstComment✗ IgnoredFacebook only — ignored for LinkedIn.
textFormatPresetId✗ IgnoredFacebook only — ignored for LinkedIn.
boardId✗ IgnoredPinterest only — ignored for LinkedIn.
tiktok / instagram / facebook✗ IgnoredSettings for those platforms — ignored for LinkedIn.
Hashtags go in the caption

LinkedIn discoverability is driven by hashtags in the caption; there is no separate tags field. A common tip is 3–5 relevant hashtags per post.

Supported Endpoints

LinkedIn supports video, single-image and multi-image posts. Text-only posts are not available for LinkedIn.

No text-only posts

/post/text accepts Facebook and Threads only. A LinkedIn account in a /post/text request gets 400 {"error": "Unsupported platforms", "invalid_accounts": ["<id>:linkedin"], "message": "Text-only posts are only supported for: Facebook, Threads"}. Every LinkedIn post needs a video or at least one image.

POST/post/video

Publish a native video to a LinkedIn personal profile or Company Page.

LinkedIn Video Notes

  • Upload your video first via POST /media and pass the returned id as mediaId
  • title becomes the title of the video; caption is the post text and the video description
  • Recommended aspect ratio: 1:1 (square) or 4:5 for mobile feed; 16:9 for desktop
  • scheduledDate takes any ISO 8601 date-time in the future: Z or an offset such as +01:00 (converted to UTC). Without an offset it is read as UTC.
  • Omit scheduledDate to post immediately
  • Once published, GET /posts shows the postUrl https://www.linkedin.com/feed/update/<id>

Request Body

mediaIdstringrequired

The id of the uploaded video file, returned by POST /media.

scheduledDatestringoptional

Optional. Any ISO 8601 date-time in the future, e.g. 2030-01-15T10:00:00Z (Z or an offset like +01:00; without a zone it is read as UTC). Omit it (or send null) to post immediately.

postsarrayrequired

Array of post objects, one per LinkedIn account (personal profile or Company Page).

posts[].accountIdstringrequired

The id of the connected LinkedIn account from GET /social-accounts (Crosspostify's account ID, not the LinkedIn profile or Page ID).

posts[].captionstringoptional

Optional (default empty). The video post text, also sent as the video description. Include 3–5 hashtags for discoverability. Max 2,200 characters (longer text is cut).

posts[].titlestringoptional

Title of the attached video. Max 90 characters (longer text is cut).

Response

202 Accepted. status is SCHEDULED because the request has a scheduledDate (without one it is QUEUED). Publishing happens afterwards: check the result with GET /posts?id=<id> (PROCESSING, then PUBLISHED or FAILED with error).

{ "mediaId": "vid_12345", "message": "Video post created successfully", "posts": [ { "id": "7f3c9a2e-1b4d-4c8e-9f60-2a5b7d1e3c48", "platform": "linkedin", "socialAccountId": "acc_linkedin_321", "status": "SCHEDULED" } ] }

Code Example

curl -X POST "https://v1.api.crosspostify.com/post/video" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "mediaId": "vid_12345",
    "scheduledDate": "2030-01-15T10:00:00Z",
    "posts": [
      {
        "accountId": "acc_linkedin_321",
        "title": "Product Demo",
        "caption": "Excited to share our latest product demo! 🚀\n\nWe have been working on this for months and cannot wait to hear your thoughts.\n\n#ProductLaunch #SaaS #Innovation"
      }
    ]
  }'
POST/post/image

Publish a single image post to a LinkedIn profile or Company Page. Great for infographics, quote cards, event announcements, and product visuals.

LinkedIn Image Notes

  • Recommended dimensions: 1200×627px (1.91:1) for landscape, or 1080×1080px for square
  • LinkedIn crops images to 1.91:1 in the feed preview — design with safe zones in mind
  • Images are sent to LinkedIn as uploaded (already JPEG from POST /media); Crosspostify does not resize or pad them
  • title becomes the title of the image; caption is the post text and the image description
  • scheduledDate takes any ISO 8601 date-time in the future: Z or an offset such as +01:00 (converted to UTC). Without an offset it is read as UTC.

Request Body

mediaIdstringrequired

The id of the uploaded image file, returned by POST /media.

scheduledDatestringoptional

Optional. Any ISO 8601 date-time in the future, e.g. 2030-01-15T10:00:00Z (Z or an offset like +01:00; without a zone it is read as UTC). Omit it (or send null) to post immediately.

postsarrayrequired

Array of post objects, one per LinkedIn account (personal profile or Company Page).

posts[].accountIdstringrequired

The id of the connected LinkedIn account from GET /social-accounts (Crosspostify's account ID, not the LinkedIn profile or Page ID).

posts[].captionstringoptional

Optional (default empty). The image post text, also sent as the image description. Include 3–5 hashtags for discoverability. Max 2,200 characters (longer text is cut).

posts[].titlestringoptional

Title of the attached image. Max 90 characters (longer text is cut).

Response

{ "mediaId": "img_12345", "message": "Image post created successfully", "posts": [ { "id": "c41d7e09-8f2a-4b3c-a6d5-9e8f7a6b5c4d", "platform": "linkedin", "socialAccountId": "acc_linkedin_321", "status": "SCHEDULED" } ] }

Code Example

curl -X POST "https://v1.api.crosspostify.com/post/image" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "mediaId": "img_12345",
    "scheduledDate": "2030-01-15T10:00:00Z",
    "posts": [
      {
        "accountId": "acc_linkedin_321",
        "caption": "Our team at the conference this year 🎤\n\nSo grateful for the connections made this week.\n\n#Networking #Conference #TeamWork"
      }
    ]
  }'
POST/post/images

Publish one LinkedIn post with up to 10 images. LinkedIn shows the images as a multi-image post (grid; tap to browse). This is not a document (PDF) carousel.

LinkedIn Multi-Image Notes

  • Images are displayed in the order provided in mediaIds
  • 1 to 10 images; a single image is posted as a normal image post
  • With a title, each image gets the title "<title> 1", "<title> 2" and so on
  • Use consistent dimensions across all images for a polished look (1080×1080px recommended)
  • scheduledDate takes any ISO 8601 date-time in the future: Z or an offset such as +01:00 (converted to UTC). Without an offset it is read as UTC.

Request Body

mediaIdsarrayrequired

Ordered array of 1 to 10 image media IDs. Images appear in this order. More than 10 gives 400 "Too many images" ("Linkedin supports a maximum of 10 images per post").

scheduledDatestringoptional

Optional. Any ISO 8601 date-time in the future, e.g. 2030-01-15T10:00:00Z (Z or an offset like +01:00; without a zone it is read as UTC). Omit it (or send null) to post immediately.

postsarrayrequired

Array of post objects, one per LinkedIn account (personal profile or Company Page).

posts[].accountIdstringrequired

The id of the connected LinkedIn account from GET /social-accounts (Crosspostify's account ID, not the LinkedIn profile or Page ID).

posts[].captionstringoptional

Optional (default empty). The post text, also sent as the description of each image. A hook in the first line helps. Max 2,200 characters (longer text is cut).

posts[].titlestringoptional

Base title for the images ("title 1", "title 2"…). Max 90 characters (longer text is cut).

Response

{ "mediaIds": ["img_001", "img_002", "img_003"], "message": "Multiple images post created successfully", "posts": [ { "id": "5b9e2c1a-7d3f-4e8b-b0a9-6c5d4e3f2a1b", "platform": "linkedin", "socialAccountId": "acc_linkedin_321", "status": "SCHEDULED" } ] }

Code Example

curl -X POST "https://v1.api.crosspostify.com/post/images" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "mediaIds": ["img_001", "img_002", "img_003"],
    "scheduledDate": "2030-01-15T10:00:00Z",
    "posts": [
      {
        "accountId": "acc_linkedin_321",
        "caption": "5 lessons we learned scaling from 0 to 10k users 👇\n\nClick through the images for the full breakdown.\n\n#StartupLessons #Growth #SaaS"
      }
    ]
  }'

Account Types

Crosspostify supports publishing to both LinkedIn personal profiles and Company Pages. Both are retrieved via GET /social-accounts and used identically in API requests.

Personal Profile

  • Posts appear on your personal LinkedIn feed
  • Best for thought leadership and personal brand
  • Followers see posts in their feed organically
  • Supports video, image and multi-image posts

Company Page

  • Posts appear on your LinkedIn Company Page
  • Best for brand content, product updates, hiring
  • Followers must follow the Page to see posts
  • Supports video, image and multi-image posts
Post to both simultaneously

You can include both a personal profile and a Company Page in the same posts array to publish to both in a single API call. Each entry in the array is published as an independent post. If any entry is invalid (a 4xx answer), the whole request is rejected and nothing is posted.

Content Guidelines

LinkedIn's audience expects professional, value-driven content. These technical specs and best practices will help your posts perform well on the platform.

Video Requirements

  • Format: MP4 or MOV (other formats are rejected at upload)
  • Max file size: 100 MB via Crosspostify
  • LinkedIn sets the minimum and maximum video length; the 100 MB upload cap usually applies first
  • Recommended ratio: 1:1, 4:5, or 16:9
  • Recommended resolution: 1080p

Image Requirements

  • Format: JPG, PNG or WEBP (converted to JPEG on upload)
  • Max file size: 20 MB via Crosspostify
  • Recommended: 1200×627px (landscape)
  • Square: 1080×1080px also works well
  • LinkedIn crops to 1.91:1 in feed preview
  • Min width: 552px

Caption Best Practices

  • Max 2,200 characters via Crosspostify (longer text is cut)
  • First 2–3 lines shown before "see more" cutoff
  • Lead with a strong hook or question
  • Use line breaks for readability
  • 3–5 hashtags recommended (end of post)
  • Emojis are supported

Scheduling

  • Any future time works: no minimum lead time
  • ISO 8601 with Z or an offset (e.g. +01:00); no offset = UTC
  • Omit scheduledDate to post immediately
  • Published within about a minute of the scheduled time
  • No maximum scheduling window