How to post on LinkedIn via its API using Python?

LinkedIn has become a powerful platform for professionals to network, share insights, and showcase their expertise. With the rise of automation and programming, leveraging LinkedIn's API to post content programmatically has become increasingly popular. In this comprehensive guide, we'll delve into how to post on LinkedIn via its API using Python.

Understanding LinkedIn API

Before we dive into posting on LinkedIn via its API, let's understand what an API is and how LinkedIn's API works.

What is an API?

An API, or Application Programming Interface, allows different software applications to communicate with each other. In the case of LinkedIn, its API provides a set of rules and protocols for building software applications that can interact with LinkedIn's platform.

LinkedIn API

LinkedIn's API offers a wide range of functionalities, including posting content, retrieving user data, and managing company pages. To access LinkedIn's API, you'll need to create a LinkedIn Developer account and register your application to obtain API credentials.

Setting Up Your Environment

To begin posting on LinkedIn via its API using Python, you'll need to set up your development environment. Here are the steps to get started:

1. Create a LinkedIn Developer Account: Go to the LinkedIn Developer Portal and sign up for an account if you haven't already.

2. Register Your Application: Once logged in, register a new application to obtain API credentials. Note down your Client ID and Client Secret, as you'll need them to authenticate your requests.

3. Install Necessary Libraries: Install the `requests` library in Python, which will be used to make HTTP requests to LinkedIn's API.

pip install requests

Authenticating Your Application

Before making any requests to LinkedIn's API, you'll need to authenticate your application using OAuth 2.0. Here's how you can authenticate your application:

import requests

# LinkedIn API credentials
client_id = 'your_client_id'
client_secret = 'your_client_secret'
redirect_uri = ''
authorization_url = ''

# Generate authorization URL
auth_url = f'{authorization_url}?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}&scope=w_member_social%20rw_organization_admin'

# Print authorization URL and authorize your application
print("Authorization URL:", auth_url)
authorization_code = input("Enter authorization code: ")

# Exchange authorization code for access token
token_url = ''
data = {
    'grant_type': 'authorization_code',
    'code': authorization_code,
    'redirect_uri': redirect_uri,
    'client_id': client_id,
    'client_secret': client_secret
response =, data=data)
access_token = response.json()['access_token']
print("Access Token:", access_token)

Posting on LinkedIn

Now that you've obtained an access token, you can start posting content on LinkedIn via its API. Here's how you can do it:

# LinkedIn API endpoints
post_url = ''
media_upload_url = ''
share_url = ''

# Function to upload media
def upload_media(media_url):
    headers = {
        'Authorization': f'Bearer {access_token}',
        'Content-Type': 'application/json',
    data = {
        'registerUploadRequest': {
            'recipes': [
            'owner': 'urn:li:person:your_user_id',
            'serviceRelationships': [
                    'relationshipType': 'OWNER',
                    'identifier': 'urn:li:userGeneratedContent'
    response =, headers=headers, json=data)
    upload_url = response.json()['value']['uploadMechanism']['com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest']['uploadUrl']
    upload_response = requests.put(upload_url, data=open(media_url, 'rb'))
    return response.json()['value']['asset']

# Function to create a post
def create_post(text, media_asset=None):
    headers = {
        'Authorization': f'Bearer {access_token}',
        'Content-Type': 'application/json',
    data = {
        'author': 'urn:li:person:your_user_id',
        'lifecycleState': 'PUBLISHED',
        'specificContent': {
            'com.linkedin.ugc.ShareContent': {
                'shareCommentary': {
                    'text': text
                'shareMediaCategory': 'NONE'
        'visibility': {
            'com.linkedin.ugc.MemberNetworkVisibility': 'PUBLIC'
    if media_asset:
        data['specificContent']['com.linkedin.ugc.ShareContent']['media'] = [
                'status': 'READY',
                'description': {
                    'text': 'Sample Image'
                'media': media_asset
    response =, headers=headers, json=data)
    return response.json()

# Example usage
text = "Check out this amazing post!"
media_asset = upload_media('sample_image.jpg') # Replace with your image file path
response = create_post(text, media_asset)
print("Post ID:", response['id'])


In this guide, we've explored how to post on LinkedIn via its API using Python. By following the steps outlined above, you can automate your LinkedIn posting process and streamline your content distribution efforts. Remember to adhere to LinkedIn's API usage policies and guidelines to ensure a smooth experience. Happy posting!