<!-- https://cutedyno.com/docs/platforms/linkedin -->

# LinkedIn

Text, article shares, multi-image posts, video, and what visibility does.

LinkedIn accepts everything: text, text with a link, one image, several images, and video.

## Personal profiles and Company Pages

Both work. A personal profile posts as the connected person; a Company Page posts as the organisation, and the connecting user must administer it.

Company Page **analytics** need LinkedIn's Community Management API access, which is a separate application to LinkedIn. Publishing to a Page does not — only reading its metrics does. Until that access is granted, page analytics return an error rather than pretending to have data.

## Text and articles

```typescript
await cutedyno.posts.create({
  content: 'We wrote up what we learned migrating 40 customers in a week.',
  accountIds: [linkedinAccountId],
  platforms: { linkedin: { visibility: 'PUBLIC' } },
});
```

A URL in the text turns the post into an article share, with LinkedIn rendering its own preview card. There is no separate parameter for it.

## Images

```typescript
await cutedyno.posts.create({
  content: 'The team at the conference.',
  media: images.map((url) => ({ type: 'image', url })),
  accountIds: [linkedinAccountId],
  platforms: { linkedin: { title: 'Conference recap' } },
});
```

`platforms.linkedin.title` is used for a single image or document share, where LinkedIn shows a headline above the media.

CuteDyno downloads each file and uploads the bytes to LinkedIn directly, rather than giving LinkedIn a URL to fetch. That means media on a slow origin makes publishing slower, but a private origin is not a problem as long as CuteDyno can reach it.

## Video

```typescript
await cutedyno.posts.create({
  content: 'A two minute tour of the new office.',
  media: [{ type: 'video', url: videoUrl }],
  accountIds: [linkedinAccountId],
});
```

LinkedIn accepts video between 3 seconds and 30 minutes. Video posts publish as `PUBLIC`; the `visibility` option applies to text, article, and image posts.

## Options

| Option | Effect |
| --- | --- |
| `visibility` | `PUBLIC`, `CONNECTIONS`, or `LOGGED_IN`. Defaults to `PUBLIC`. |
| `title` | Headline for a single image or document share. |

`CONNECTIONS` restricts a personal post to first-degree connections. `LOGGED_IN` requires a LinkedIn account to view — useful for internal announcements that should not appear in search results.

## Writing for LinkedIn

The one platform where a cross-posted caption reads worst. LinkedIn's audience expects a few sentences with a point, and the first two lines are all that shows before "see more", so put the substance there. Hashtag stacks that work on Instagram look like spam here.

If you are fanning one post out to five networks, this is the account to give its own text.

## Failures worth handling

| Message | Meaning |
| --- | --- |
| LinkedIn author URN is required | The account is missing its author identity. Reconnect it. |
| Access denied. Please check your permissions. | The user lost their admin role on the Page. |
| LinkedIn company page analytics require Community Management API access | Publishing works; metrics need the extra access. |

## Analytics

Publishing history is always available. Impressions, reactions, comments, reshares, and members reached require Community Management API access from LinkedIn.

## Comments

Not supported. LinkedIn does not expose the comment webhooks or moderation endpoints this integration would need, so LinkedIn comments do not appear in [`GET /v1/comments`](/docs/api/list-comments).
