All integrations

LinkedIn

MESSAGING · MESSAGING

The connected member’s profile, and posts shared on their behalf.

Connecting LinkedIn in practice

LinkedIn does not publish its rate limits at all: they are per-application and per-member daily quotas that reset at midnight UTC, and the only way to read one is your app’s Analytics tab in the Developer Portal — which shows an endpoint only after you have already called it at least once that day. Access tokens last 60 days and programmatic refresh tokens are "available for a limited set of partners", so most integrations have to send the member back through consent instead.

Scopes that draw scrutiny

  • w_member_social "Post, comment, and like posts on your behalf" — the scope that lets an agent publish as the human, which is the one a security reviewer stops on.
  • r_basicprofile Name, photo, headline and public profile URL. Available only to apps approved for a Product that includes it, so it cannot simply be requested.
  • r_1st_connections_size The size of the member’s first-degree network — network data rather than profile data, and gated behind Advertising or Community Management API approval.
  • r_organization_admin Organisation pages plus follower, visitor and content analytics. It reaches company-level data through one person’s token, so it depends on that member’s Page role.
  • rw_organization_admin Manages organisation Pages, restricted to members holding the ADMINISTRATOR role on that organisation. A member without the role gets nothing even with the scope granted.

Rate limits

  • Two ceilings per endpoint: Application (all calls your app makes in a day) and Member (all calls one member’s token makes in a day).
  • Both reset at midnight UTC and both vary by endpoint. "Standard rate limits are not published in documentation."
  • Over the limit returns 429; LinkedIn also returns 429 occasionally as infrastructure protection, and recovery is automatic.
  • Developer Admins are emailed at 75% of the application quota, with a 1–2 hour delay, and only for application-level breaches — never member-level.

Who has to approve

Not a workspace admin, but a LinkedIn-side product gate: "The scopes available to your app depend on which Products or Partner Programs your app has access to", and you apply for Products in the Developer Portal. Until a Product is approved the scope simply cannot be requested, and an invalid scope is a 401 at the authorization step.

Worth knowing

  • An authorization code has a 30-minute lifespan and must be used immediately, so a queued or retried exchange fails and the member has to start over.
  • Requesting a different scope than was previously granted invalidates all of that member’s existing access tokens, so adding one permission logs out every other session you held.
  • Changing an app’s scopes forces every existing user to re-authenticate — there is no incremental consent that upgrades installed grants.
  • Social login and passkey sign-in work only on desktop and Android web unless you pass `enable_extended_login=true` on /oauth/v2/authorization.

Checked against LinkedIn API rate limiting (2026-09-29), 3-legged OAuth flow (2026-09-29), Increasing access (2026-09-29)

Acts as the person, not as itself

Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.

Credentials never touch the agent

Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.

Every call on the record

Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.

What an agent can do

Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.

linkedin_delete_chats_by_chat_idWRITE

Delete a chat. DELETE /api/v1/chats/{chat_id}. Delete a chat. Supported for WhatsApp and LinkedIn only.

delete
linkedin_delete_messages_by_message_idWRITE

Delete a message. DELETE /api/v1/messages/{message_id}. Delete a message. Supported for WhatsApp and LinkedIn only. For LinkedIn, it is only possible within the first 60 minutes after the message is sent.

delete
linkedin_delete_users_invite_sent_by_invitation_idWRITE

Cancel an invitation. DELETE /api/v1/users/invite/sent/{invitation_id}. Cancel a pending invitation sent to someone. Instagram: You can also use this route to unfollow users you have previously followed.

delete
linkedin_get_chat_attendeesREAD

List all attendees. GET /api/v1/chat_attendees. Returns a list of messaging attendees. Some optional parameters are available to filter the results.

read
linkedin_get_chat_attendees_by_attendee_id_chatsREAD

List all 1to1 chats for a given attendee. GET /api/v1/chat_attendees/{attendee_id}/chats. Returns a list of chats where a given attendee is involved.

read
linkedin_get_chat_attendees_by_attendee_id_syncREAD

Resynchronize chats for a given attendee. GET /api/v1/chat_attendees/{attendee_id}/sync. Starts or monitors the synchronization of all chats for a given attendee.

read
linkedin_get_chat_attendees_by_idREAD

Retrieve an attendee. GET /api/v1/chat_attendees/{id}. The id of the wanted attendee.

read
linkedin_get_chat_attendees_by_id_pictureREAD

Download a chat attendee picture. GET /api/v1/chat_attendees/{id}/picture. Download the profile picture of an attendee or picture of a group chat.

read
linkedin_get_chat_attendees_by_sender_id_messagesREAD

List all messages for a given attendee. GET /api/v1/chat_attendees/{sender_id}/messages. Returns a list of messages where a given attendee is involved.

read
linkedin_get_chatsREAD

List all chats. GET /api/v1/chats. Returns a list of chats. Some optional parameters are available to filter the results.

read
linkedin_get_chats_by_chat_idREAD

Retrieve a chat. GET /api/v1/chats/{chat_id}. Retrieve the details of a chat.

read
linkedin_get_chats_by_chat_id_attendeesREAD

List all attendees from a chat. GET /api/v1/chats/{chat_id}/attendees. Returns a list of messaging attendees related to a given chat. Some optional parameters are available to filter the results.

read
linkedin_get_chats_by_chat_id_messagesREAD

List all messages from a chat. GET /api/v1/chats/{chat_id}/messages. Returns a list of messages related to the given chat. Some parameters are available to filter the results.

read
linkedin_get_chats_by_chat_id_syncREAD

Synchronize a conversation from its beginning. GET /api/v1/chats/{chat_id}/sync. This route can be used both to initiate a synchronization process and to monitor its status via regular polling.

read
linkedin_get_linkedin_company_by_identifierREAD

Retrieve a company profile. GET /api/v1/linkedin/company/{identifier}. Get a company profile from its name or ID.

read
linkedin_get_linkedin_contractsREAD

Retrieve contracts. GET /api/v1/linkedin/contracts. Returns a list of your LinkedIn available contracts

read
linkedin_get_linkedin_inmail_balanceREAD

Get inmail credit balance. GET /api/v1/linkedin/inmail_balance. Get balance for subscribed premium features.

read
linkedin_get_linkedin_jobsREAD

List all job postings. GET /api/v1/linkedin/jobs. Retrieve the job offers you have posted on LinkedIn whether they are open, closed or still drafts.

read
linkedin_get_linkedin_jobs_applicants_by_applicant_idREAD

Get a specific applicant to a job posting. GET /api/v1/linkedin/jobs/applicants/{applicant_id}. Retrieve the details of a user that has applied to a given offer. Applies to Classic job posting only.

read
linkedin_get_linkedin_jobs_applicants_by_applicant_id_resumeREAD

Download the resume of a job applicant. GET /api/v1/linkedin/jobs/applicants/{applicant_id}/resume. This route can be used to download the resume of a job applicant. The provider answers this route with the file's raw bytes. This connection has no artifact transport, so the tool returns the file's content type and byte length instead of its contents.

read
linkedin_get_linkedin_jobs_by_id_applicantsREAD

List all applicants to a job posting. GET /api/v1/linkedin/jobs/{id}/applicants. Retrieve all the users that have applied to a given offer.

read
linkedin_get_linkedin_jobs_by_job_idREAD

Get job offer. GET /api/v1/linkedin/jobs/{job_id}. Retrieve a job offer.

read
linkedin_get_linkedin_projectsREAD

Retrieve Recruiter hiring projects. GET /api/v1/linkedin/projects. Retrieve list of LinkedIn Recruiter hiring projects.

read
linkedin_get_linkedin_projects_by_idREAD

Retrieve Recruiter hiring project from ID. GET /api/v1/linkedin/projects/{id}. Retrieve a particular hiring project.

read
linkedin_get_linkedin_search_parametersREAD

Retrieve LinkedIn search parameters. GET /api/v1/linkedin/search/parameters. LinkedIn doesn't accept raw text as search parameters, but IDs. This route will help you get the right IDs for your inputs. Check out our Guide with examples to master LinkedIn search: https://developer.the messaging provider.com/docs/linkedin-search

read
linkedin_get_messagesREAD

List all messages. GET /api/v1/messages. Returns a list of messages. Some optional parameters are available to filter the results.

read
linkedin_get_messages_by_message_idREAD

Retrieve a message. GET /api/v1/messages/{message_id}. Retrieve the details of a message.

read
linkedin_get_messages_by_message_id_attachments_by_attachment_idREAD

Retrieve an attachment from a message. GET /api/v1/messages/{message_id}/attachments/{attachment_id}. Retrieve one of the attachment linked to a message. The provider answers this route with the file's raw bytes. This connection has no artifact transport, so the tool returns the file's content type and byte length instead of its contents.

read
linkedin_get_posts_by_post_idREAD

Retrieve a post. GET /api/v1/posts/{post_id}. Retrieve the details of a post.

read
linkedin_get_posts_by_post_id_commentsREAD

List all comments from a post. GET /api/v1/posts/{post_id}/comments. Returns a list of either comments on a given post or replies on a given comment.

read
linkedin_get_posts_by_post_id_reactionsREAD

List all reactions from a post. GET /api/v1/posts/{post_id}/reactions. Returns a list of reactions to either a post or a post comment.

read
linkedin_get_users_by_identifierREAD

Retrieve a profile. GET /api/v1/users/{identifier}. Retrieve the profile of a user. Ensure careful implementation of this action and consult provider limits and restrictions: https://developer.the messaging provider.com/docs/provider-limits-and-restrictions

read
linkedin_get_users_by_identifier_commentsREAD

List all comments. GET /api/v1/users/{identifier}/comments. Returns a list of comments written by a user.

read
linkedin_get_users_by_identifier_postsREAD

List all posts. GET /api/v1/users/{identifier}/posts. Returns a list of posts written by a user or a company.

read
linkedin_get_users_by_identifier_reactionsREAD

List all reactions. GET /api/v1/users/{identifier}/reactions. Returns a list of reactions to posts or comments from a user.

read
linkedin_get_users_followersREAD

List all followers. GET /api/v1/users/followers. Returns a list of all the followers of the current user. Ensure careful implementation of this action and consult provider limits and restrictions: https://developer.the messaging provider.com/docs/provider-limits-and-restrictions

read
linkedin_get_users_followingREAD

List all followed accounts. GET /api/v1/users/following. Returns a list of all the followed accounts of an account. Ensure careful implementation of this action and consult provider limits and restrictions: https://developer.the messaging provider.com/docs/provider-limits-and-restrictions

read
linkedin_get_users_invite_receivedREAD

List all invitations received. GET /api/v1/users/invite/received. Returns a list of all invitations that have been received.

read
linkedin_get_users_invite_sentREAD

List all invitations sent. GET /api/v1/users/invite/sent. Returns a list of all invitations sent that are pending.

read
linkedin_get_users_meREAD

Retrieve own profile. GET /api/v1/users/me. Retrieve informations about account owner.

read
linkedin_get_users_relationsREAD

List all relations. GET /api/v1/users/relations. Returns a list of all the relations of an account. Ensure careful implementation of this action and consult provider limits and restrictions: https://developer.the messaging provider.com/docs/provider-limits-and-restrictions

read
linkedin_patch_chats_by_chat_idWRITE

Perform an action on a given chat. PATCH /api/v1/chats/{chat_id}. Perform an action like changing the read status, muting the chat, retrieving a group invite link, etc.

write
linkedin_patch_linkedin_jobs_by_job_idWRITE

Edit a job posting. PATCH /api/v1/linkedin/jobs/{job_id}. Edit an existing job posting.

write
linkedin_patch_messages_by_message_idWRITE

Edit a message. PATCH /api/v1/messages/{message_id}. Edit a message. Supported for WhatsApp and LinkedIn Classic only. WhatsApp may reject edits after an indicative 15-minute window following the original send time. LinkedIn Classic edits are only possible within the first 60 minutes after the message is sent.

write
linkedin_patch_users_me_editWRITE

Edit own profile. PATCH /api/v1/users/me/edit. Modify informations on account owner profile. For WhatsApp accounts, only headline (profile display name), summary (profile About/status) and picture are available. For Instagram accounts, only summary (profile bio) and picture are available. They should be formatted with brackets like the following examples: location[id]=105015875, picture_settings[filter]=STUDIO or picture_settings[layout][bottomLeft][x]=1.25. When working with arrays, just set one field for each value with the same key, for example: experience[skills]=development \ experience[skills]=management. Attachments are not supported on this connection: the messaging provider accepts this operation only as multipart/form-data, and its file properties (cover_picture, education.attachment.file, education.attachment.thumbnail, experience.attachment.file, experience.attachment.thumbnail, picture) are omitted from this tool's schema because unbounded bytes must not enter a tool argument. Every text field is available and is sent as a multipart text part. An experience or education attachment must be a LINK (type, title, url): the media variant is not available on this connection, because its file is an upload and uploads cannot be tool arguments.

write
linkedin_post_chatsWRITE

Start a new chat. POST /api/v1/chats. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Start a new conversation with one or more attendee. Attachments are not supported on this connection: the messaging provider accepts this operation only as multipart/form-data, and its file properties (attachments, linkedin.follow_up.attachments, video_message, voice_message) are omitted from this tool's schema because unbounded bytes must not enter a tool argument. Every text field is available and is sent as a multipart text part.

write
linkedin_post_chats_by_chat_id_messagesWRITE

Send a message in a chat. POST /api/v1/chats/{chat_id}/messages. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Send a message to the given chat with the possibility to link some attachments. Attachments are not supported on this connection: the messaging provider accepts this operation only as multipart/form-data, and its file properties (attachments, video_message, voice_message) are omitted from this tool's schema because unbounded bytes must not enter a tool argument. Every text field is available and is sent as a multipart text part.

write
linkedin_post_linkedinWRITE

Get raw data from any endpoint. POST /api/v1/linkedin. This magic route is intended for advanced users who wish to use LinkedIn's features beyond our current capabilities. It enables you to create custom functionalities that are not yet supported by our platform, using connected accounts. To utilize this route, you will need to identify the specific endpoint containing the desired data using web developer tools on LinkedIn, and then copy the URL along with its parameters for implementation.

write
linkedin_post_linkedin_contracts_by_id_selectWRITE

Select contract. POST /api/v1/linkedin/contracts/{id}/select. Select a Recruiter or Sales navigator contract to be used on your account

write
linkedin_post_linkedin_jobsWRITE

Create a job posting. POST /api/v1/linkedin/jobs. Create a new job offer draft.

write
linkedin_post_linkedin_jobs_by_draft_id_checkpointWRITE

Solve a job publishing checkpoint. POST /api/v1/linkedin/jobs/{draft_id}/checkpoint. Solve a checkpoint to verify your member privilegies.

write
linkedin_post_linkedin_jobs_by_draft_id_publishWRITE

Publish a job posting. POST /api/v1/linkedin/jobs/{draft_id}/publish. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Publish the job posting draft you have been working on.

write
linkedin_post_linkedin_jobs_by_id_closeWRITE

Close a job posting. POST /api/v1/linkedin/jobs/{id}/close. Close a job offer you have posted.

write
linkedin_post_linkedin_profile_endorseWRITE

Endorse a user profile specific skill. POST /api/v1/linkedin/profile/endorse. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. This route can be used to endorse a skill of a user profile.

write
linkedin_post_linkedin_searchWRITE

Perform Linkedin search. POST /api/v1/linkedin/search. Search people and companies from the Linkedin Classic as well as Sales Navigator APIs. Check out our Guide with examples to master LinkedIn search: https://developer.the messaging provider.com/docs/linkedin-search

write
linkedin_post_linkedin_user_by_user_idWRITE

Perform an action with a user profile. POST /api/v1/linkedin/user/{user_id}. Add a candidate to a Recruiter pipeline, save a Sales Navigator lead, etc.

write
linkedin_post_messages_by_message_id_forwardWRITE

Forward a message. POST /api/v1/messages/{message_id}/forward. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Forward a message to a chat. (Whatsapp only)

write
linkedin_post_messages_by_message_id_reactionWRITE

Add a reaction to a message. POST /api/v1/messages/{message_id}/reaction. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Add a reaction to a message. (Whatsapp, LinkedIn, Telegram, Instagram)

write
linkedin_post_postsWRITE

Create a post. POST /api/v1/posts. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Publish a post. Attachments are not supported on this connection: the messaging provider accepts this operation only as multipart/form-data, and its file properties (attachments, video_thumbnail) are omitted from this tool's schema because unbounded bytes must not enter a tool argument. Every text field is available and is sent as a multipart text part.

write
linkedin_post_posts_by_post_id_commentsWRITE

Comment a post. POST /api/v1/posts/{post_id}/comments. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Comment a post or reply to a post comment. Attachments are not supported on this connection: the messaging provider accepts this operation only as multipart/form-data, and its file properties (attachments) are omitted from this tool's schema because unbounded bytes must not enter a tool argument. Every text field is available and is sent as a multipart text part.

write
linkedin_post_posts_reactionWRITE

Add a reaction to a post. POST /api/v1/posts/reaction. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. React to either a post or a post comment.

write
linkedin_post_users_inviteWRITE

Send an invitation. POST /api/v1/users/invite. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Send an invitation to add someone to your contacts. Ensure careful implementation of this action and consult provider limits and restrictions: https://developer.the messaging provider.com/docs/provider-limits-and-restrictions

write
linkedin_post_users_invite_received_by_invitation_idWRITE

Handle a received invitation. POST /api/v1/users/invite/received/{invitation_id}. IRREVERSIBLE OUTWARD ACTION: this is visible to someone other than the account owner and cannot be undone through this API. Accept or decline a connection invitation.

write

Put LinkedIn behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.