---
title: LinkedIn Personal API Integration on Truto
slug: linkedinpersonal
category: Marketing Automation
canonical: "https://truto.one/integrations/detail/linkedinpersonal/"
---

# LinkedIn Personal API Integration on Truto



**Category:** Marketing Automation  
**Status:** Generally available

## MCP-ready AI tools

Truto exposes 9 tools for LinkedIn Personal that AI agents can call directly.

- **list_all_linked_in_personal_me** — Get the connected member's OpenID Connect profile from LinkedIn's userinfo endpoint. Takes no input. LinkedIn returns one object, so the result is a list with one item.

Use `sub` to build the member's person URN, `urn:li:person:{sub}`. `email` and `email_verified` are optional claims and can be missing.
- **create_a_linked_in_personal_post** — Publish a post to the connected member's own LinkedIn feed.

The author is set for you to `urn:li:person:{sub}`; do not send `author`. Send `commentary` and a `visibility` of PUBLIC (default) or CONNECTIONS. For media, upload first with images.create, videos.create then videos.complete, or documents.create, and pass the URN in `content.media.id`. For a link preview send `content.article`.

Returns `id`, the new post URN, copied from LinkedIn's `x-restli-id` response header. Pass it unchanged to posts.update and posts.delete.
- **update_a_linked_in_personal_post_by_id** — Edit one of the connected member's posts by its URN.

Send only the fields to change, as flat fields. Truto builds LinkedIn's partial-update request from them (a POST with `X-RestLi-Method: PARTIAL_UPDATE` and a `{"patch": {"$set": {...}}}` body). LinkedIn lets these fields change: commentary, contentCallToActionLabel, contentLandingPage and lifecycleState. Sponsored-content fields are not exposed.

Pass `id` as the plain post URN, such as urn:li:share:6844785523593134080. Truto URL-encodes it. Send at least one field. Returns an empty 204 on success.
- **delete_a_linked_in_personal_post_by_id** — Delete one of the connected member's posts by its URN.

Pass `id` as the plain post URN, such as urn:li:ugcPost:12345 or urn:li:share:12345. Truto URL-encodes it. Deletion is idempotent: deleting a post that is already gone still returns an empty 204. Required: id.
- **create_a_linked_in_personal_image** — Start an image upload for the connected member (LinkedIn's initializeUpload action). Step 1 of 2.

Send no body: the owner is set for you to `urn:li:person:{sub}`. Returns `value.uploadUrl`, `value.uploadUrlExpiresAt` and `value.image`, the image URN to use in posts.create as `content.media.id`.

This call only registers the image. Step 2: send the file with uploads.create, passing `value.uploadUrl` unchanged as `path`. JPG, GIF and PNG, under 36,152,320 pixels; GIFs up to 250 frames.
- **create_a_linked_in_personal_video** — Start a multipart video upload for the connected member (LinkedIn's initializeUpload action).

Send `initializeUploadRequest` with `owner` (`urn:li:person:{sub}` from me.list) and `fileSizeBytes`. Returns the video URN, `uploadInstructions` (one `uploadUrl`, `firstByte` and `lastByte` per 4 MB part) and `uploadToken`.

Upload each part with a direct PUT of its bytes to its `uploadUrl` and keep the `ETag` response header of each part: uploads.create does not return response headers, so it cannot be used for video parts. Then call videos.complete. MP4 only, 3 seconds to 30 minutes, 75 KB to 500 MB.
- **linked_in_personal_videos_complete** — Finish a multipart video upload (LinkedIn's finalizeUpload action) after every part has been uploaded.

Send `finalizeUploadRequest` with `video` (the URN from videos.create), `uploadToken`, and `uploadedPartIds` (the ETag of each part, in part order). Returns an empty 200 on success. The video then processes asynchronously before it can be used in a post.
- **create_a_linked_in_personal_document** — Start a document upload for the connected member (LinkedIn's initializeUpload action). Step 1 of 2.

Send no body: the owner is set for you to `urn:li:person:{sub}`. Returns `value.uploadUrl`, `value.uploadUrlExpiresAt` and `value.document`, the document URN to use in posts.create as `content.media.id` (with a `title`).

This call only registers the document. Step 2: send the file with uploads.create, passing `value.uploadUrl` unchanged as `path`. PPT, PPTX, DOC, DOCX or PDF, up to 100 MB and 300 pages.
- **create_a_linked_in_personal_upload** — Upload a file to LinkedIn, step 2 of 2 for image and document posts.

First call images.create (JPG, PNG or GIF) or documents.create (PDF, PPT, PPTX, DOC or DOCX). Pass its `value.uploadUrl` unchanged as `path` and the file as `file`. The URL is pre-signed by LinkedIn, so no LinkedIn token is sent with this call. LinkedIn answers 201 with an empty body. Then use the `value.image` or `value.document` URN from step 1 in posts.create (`content.media.id`).

## How it works

1. **Link your customer's LinkedIn Personal account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach LinkedIn Personal.** The Proxy API is a 1-to-1 mapping of the LinkedIn Personal API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **Power employee advocacy at scale** — Let enterprise customers mobilize hundreds of employees to share corporate content natively on their personal LinkedIn feeds, driving organic reach far beyond what a single company page can achieve.
- **Enable AI-driven personal branding** — Give founders, executives, and creators a way to publish AI-generated posts, carousels, and videos directly to their LinkedIn feed on a schedule, without ever leaving your platform.
- **Automate social selling for sales teams** — Help SDRs and AEs publish native video pitches, prospecting content, and thought leadership to their personal feeds from inside your sales engagement product to generate inbound pipeline.
- **Auto-distribute blog and newsletter content** — Let CMS, newsletter, and content platforms automatically notify a writer's LinkedIn network whenever new content goes live, attributed directly to the author's personal profile.
- **Offer rich-media scheduling in social tools** — Social media management SaaS can expand beyond text posts to orchestrate native PDF carousels, images, and multipart video uploads — the formats that actually win on LinkedIn's algorithm.

## What you can build

- **Native post composer with publish, edit, and delete** — Ship a full post lifecycle UI where users draft, publish, patch typos, and retract posts on their LinkedIn feed using create, update, and delete post operations.
- **PDF carousel publisher** — Let users upload a PDF, push it to LinkedIn via the document upload flow, and publish it as a high-engagement native carousel post.
- **Native video upload pipeline** — Handle multipart video chunking, upload, and completion so users can post native MP4 videos directly to their feed instead of linking out to YouTube or Vimeo.
- **AI image-to-post workflow** — Pair AI-generated or user-uploaded images with post copy, run the image upload flow, and publish the finished visual post in one click.
- **LinkedIn identity verification at onboarding** — Use the authenticated member endpoint to fetch the user's Person URN and bind their LinkedIn identity to their profile in your product during signup.
- **Scheduled publishing queue** — Let users queue posts, images, documents, and videos for future publish times, with your backend triggering the appropriate upload and create-post calls at send time.

## FAQs

### How do end users authenticate their LinkedIn Personal account?

Truto handles the OAuth 2.0 / OIDC flow for LinkedIn Personal. Your users connect their account through a Truto-hosted link or embedded flow, and Truto manages token storage, refresh, and the Person URN needed for publishing.

### What publishing operations are supported today?

You can create, update, and delete posts on a user's personal feed. For rich media, there are dedicated operations to create image, video, and document assets, perform the upload, and complete multipart video uploads before attaching the media to a post.

### How does the multi-step media upload workflow work?

Rich media posts follow an upload-then-post pattern: call the create image, video, or document endpoint to get an upload URL and asset URN, stream the file via the upload endpoint (and call videos complete for multipart videos), then pass the URN into create post.

### Can I fetch information about the authenticated LinkedIn user?

Yes. The list me endpoint returns the authenticated member's profile data, including the Person URN (sub) that you need as the author for all publishing calls.

### Does Truto offer a Unified API for LinkedIn Personal?

Not yet — LinkedIn Personal is currently exposed through its native tools in Truto, giving you direct one-to-one access to the underlying API. If you need a unified marketing or social schema, reach out and we can scope it.

### How are LinkedIn's rate limits and quirks handled?

Truto normalizes auth, token refresh, pagination, and error handling for LinkedIn Personal so you don't have to build around API-specific behavior. Rate limits are enforced by LinkedIn per app and per member, and Truto surfaces rate-limit errors transparently so you can retry or back off.
