> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# LinkedIn Integration for AI Agents & Workflows

> LinkedIn social networking platform for professional connections, posts, and organization management

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/df8MOr-hXotYLTh5/logos/linkedin.svg?fit=max&auto=format&n=df8MOr-hXotYLTh5&q=85&s=6173bebbc2d7d47837f115c9c58e6f42" alt="LinkedIn logo" width="72" height="72" data-path="logos/linkedin.svg" />

## Overview

Add **LinkedIn** to any ModuleX agent or workflow. Professional social networking platform for managing posts, comments, likes, profiles, organizations, and ad accounts via the LinkedIn REST API (`api.linkedin.com/rest`).

<Info>
  **Categories**: Social Media · Marketing · Communication · **Auth**: OAuth2 · **Actions**: 18
</Info>

## Authentication

### OAuth2 Authentication

Connect using LinkedIn OAuth (recommended)

#### Required Credentials

| Field         | Description                      | Required | Format |
| ------------- | -------------------------------- | -------- | ------ |
| Client ID     | LinkedIn OAuth App Client ID     | Yes      | `-`    |
| Client Secret | LinkedIn OAuth App Client Secret | Yes      | `-`    |

#### OAuth Configuration

* **Authorization URL**: `https://www.linkedin.com/oauth/v2/authorization`
* **Token URL**: `https://www.linkedin.com/oauth/v2/accessToken`
* **Scopes**: `openid`, `profile`, `email`, `w_member_social`

## Available Actions

<AccordionGroup>
  <Accordion title="create_comment — Create a comment on a share or user generated content post">
    ### Parameters

    <ResponseField name="urn_to_comment" type="string" required>
      The share or user generated content post URN where the comment will be made
    </ResponseField>

    <ResponseField name="actor" type="string" required>
      Entity authoring the comment, must be a person or organization URN (e.g. urn:li:person:ABC123)
    </ResponseField>

    <ResponseField name="message" type="string" required>
      Text of the comment
    </ResponseField>

    <ResponseField name="content" type="object">
      Optional media content entities as a JSON object
    </ResponseField>

    <ResponseField name="parent_comment" type="string">
      URN of the parent comment for nested comments (not available for first-level comments)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "data": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Data"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateCommentOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_image_post_organization — Create an image post on LinkedIn as an organization">
    ### Parameters

    <ResponseField name="organization_id" type="string" required>
      ID of the organization that will author the post
    </ResponseField>

    <ResponseField name="image_url" type="string" required>
      URL of the image to upload and post
    </ResponseField>

    <ResponseField name="text" type="string" required>
      Text to be posted on the LinkedIn timeline
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "post_urn": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Post Urn"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateImagePostOrganizationOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_image_post_user — Create an image post on LinkedIn as the authenticated user">
    ### Parameters

    <ResponseField name="image_url" type="string" required>
      URL of the image to upload and post
    </ResponseField>

    <ResponseField name="text" type="string" required>
      Text to be posted on the LinkedIn timeline
    </ResponseField>

    <ResponseField name="visibility" type="string" required>
      Visibility restrictions on content. Valid values: CONNECTIONS, PUBLIC, LOGGED\_IN
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "post_urn": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Post Urn"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateImagePostUserOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_like_on_share — Create a like on a share or user generated content post">
    ### Parameters

    <ResponseField name="parent_urn" type="string" required>
      The top-level share URN or user generated content URN where the like will be performed
    </ResponseField>

    <ResponseField name="actor" type="string" required>
      Entity performing the like, must be a person or organization URN
    </ResponseField>

    <ResponseField name="object" type="string" required>
      URN of the entity to which the like belongs, should be a sub-entity of the top-level share
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateLikeOnShareOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_text_post_organization — Create a text post on LinkedIn as an organization, optionally with an article URL">
    ### Parameters

    <ResponseField name="organization_id" type="string" required>
      ID of the organization that will author the post
    </ResponseField>

    <ResponseField name="text" type="string" required>
      Text to be posted on the LinkedIn timeline
    </ResponseField>

    <ResponseField name="article" type="string">
      URL of an article to share with the post
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "data": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Data"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateTextPostOrganizationOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="create_text_post_user — Create a text post on LinkedIn as the authenticated user, optionally with an article URL">
    ### Parameters

    <ResponseField name="visibility" type="string" required>
      Visibility restrictions on content. Valid values: CONNECTIONS, PUBLIC, LOGGED\_IN
    </ResponseField>

    <ResponseField name="text" type="string" required>
      Text to be posted on the LinkedIn timeline
    </ResponseField>

    <ResponseField name="article" type="string">
      URL of an article to share with the post
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "data": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Data"
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateTextPostUserOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="delete_post — Delete a post from LinkedIn">
    ### Parameters

    <ResponseField name="post_id" type="string" required>
      URN of the post to delete (e.g. urn:li:ugcPost:123 or urn:li:share:123)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        }
      },
      "required": [
        "success"
      ],
      "title": "DeletePostOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="fetch_ad_account — Fetch an individual ad account given its ID">
    ### Parameters

    <ResponseField name="ad_account_id" type="string" required>
      ID of the ad account to fetch
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "data": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Data"
        }
      },
      "required": [
        "success"
      ],
      "title": "FetchAdAccountOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_current_member_profile — Get the profile of the current authenticated member">
    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "data": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Data"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetCurrentMemberProfileOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_member_profile — Get another member's profile given their person ID">
    ### Parameters

    <ResponseField name="person_id" type="string" required>
      Identifier of the person to retrieve
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "data": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Data"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetMemberProfileOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_multiple_member_profiles — Get multiple member profiles at once given their person IDs">
    ### Parameters

    <ResponseField name="people_ids" type="array" required>
      List of person ID strings to retrieve
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "results": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Results",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetMultipleMemberProfilesOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_org_member_access — Get the organization access control information of the current authenticated member">
    ### Parameters

    <ResponseField name="role" type="string">
      Limit results to a specific role. Valid values: ADMINISTRATOR, DIRECT\_SPONSORED\_CONTENT\_POSTER, RECRUITING\_POSTER, LEAD\_CAPTURE\_ADMINISTRATOR, LEAD\_GEN\_FORMS\_MANAGER, ANALYST, CURATOR, CONTENT\_ADMINISTRATOR
    </ResponseField>

    <ResponseField name="state" type="string">
      Limit results to a specific role state. Valid values: APPROVED, REJECTED, REQUESTED, REVOKED
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "data": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Data"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetOrgMemberAccessOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_organization_access_control — Get a selected organization's access control information">
    ### Parameters

    <ResponseField name="organization_id" type="string" required>
      ID of the organization for which the access control information is being retrieved
    </ResponseField>

    <ResponseField name="max" type="integer">
      Maximum number of results to return (Default: `50`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "elements": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Elements",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetOrganizationAccessControlOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_organization_administrators — Get the administrator members of a selected organization">
    ### Parameters

    <ResponseField name="organization_id" type="string" required>
      ID of the organization for which administrators are being retrieved
    </ResponseField>

    <ResponseField name="max_pages" type="integer">
      Maximum number of pages to fetch (1-500) (Default: `50`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "elements": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Elements",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetOrganizationAdministratorsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_profile_picture_fields — Get the authenticated user's profile picture data including display image and metadata">
    ### Parameters

    <ResponseField name="include_original_image" type="boolean">
      Whether to include the original image data in the response (requires special permissions) (Default: `false`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "data": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Data"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetProfilePictureFieldsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="retrieve_comments_on_comments — Retrieve comments on a comment given the parent comment URN">
    ### Parameters

    <ResponseField name="comment_urn" type="string" required>
      Parent comment URN to retrieve nested comments for. A composite URN using comment ID and activity URN
    </ResponseField>

    <ResponseField name="max" type="integer">
      Maximum number of results to return (Default: `50`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "elements": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Elements",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "RetrieveCommentsOnCommentsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="retrieve_comments_shares — Retrieve comments on a share given the share URN">
    ### Parameters

    <ResponseField name="entity_urn" type="string" required>
      URN of the entity to retrieve comments on
    </ResponseField>

    <ResponseField name="max" type="integer">
      Maximum number of results to return (Default: `50`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "elements": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Elements",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "RetrieveCommentsSharesOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="search_organization — Search for an organization by vanity name or email domain">
    ### Parameters

    <ResponseField name="search_by" type="string" required>
      Field to search by. Valid values: vanityName, emailDomain
    </ResponseField>

    <ResponseField name="search_term" type="string" required>
      Keyword to search for
    </ResponseField>

    <ResponseField name="max" type="integer">
      Maximum number of results to return (Default: `50`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "elements": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Elements",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "SearchOrganizationOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* LinkedIn API rate limits vary by product and endpoint. Generally 100 requests per day for most marketing/community management endpoints per OAuth app.
* Organization-level posting endpoints are subject to daily limits per organization.
* The `LinkedIn-Version` header is hardcoded to `202509`; LinkedIn periodically deprecates older API versions.
* Non-2xx responses and timeouts are caught and returned as `success=False` + `error` rather than raising.

## Related integrations

<CardGroup cols={3}>
  <Card title="Hootsuite" href="/integrations/tools/hootsuite" />

  <Card title="Product Hunt" href="/integrations/tools/product-hunt" />

  <Card title="AgentMail" href="/integrations/tools/agentmail" />
</CardGroup>

## Links

* [LinkedIn](https://www.linkedin.com)
