← All platforms

LinkedIn publishing API

Live

Publish text, image, video or a PDF document to a LinkedIn profile through the versioned REST API.

Connect an account and publish today.

What this channel accepts

MediaOptional, exactly one item
DocumentsPDF, rendered as a carousel
Option blocklinkedin
APIVersioned /rest/posts
Account reflinkedin:person:<id>

Publish to LinkedIn

One request shape, the same across every channel. Register media first with POST /v1/media, then pass the handles it returns.

POST /v1/posts returns 202 with a post id; the publish itself is asynchronous.

const res = await fetch("https://creasionapp.com/v1/posts", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.CREASION_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "accounts": [
      "linkedin:person:Fyv8xK2mQ1"
    ],
    "content": "Five things we learned shipping an API-first product.",
    "media": [
      "media_01JQ8ZR4X7"
    ],
    "linkedin": {
      "document_title": "Five lessons, one page each"
    }
  }),
});

// 202 Accepted: the post is queued. Poll GET /v1/posts/{id}
// or wait for the post.completed webhook.
const { id } = await res.json();

Before you integrate

One media item, not more

A post with two or more media handles is rejected at the edge rather than silently truncated, because a carousel of the wrong assets is worse than an honest error.

document_title names a PDF carousel

When the media is a PDF, LinkedIn shows it as the swipeable format most people call a carousel, and document_title is the label readers see.

Knowing what happened

Publishing is asynchronous, so the create call returns before the post exists on LinkedIn. Poll GET /v1/posts/{id} or register a webhook and receive post.completed instead. When a post targets several accounts, each destination reports its own result, so a partial success names exactly which one failed and why.

Read the API docsGet an API key