Why Your LinkedIn API Returns 'Not Enough Permissions' Error
Oct 22, 2025
You've spent hours setting up your LinkedIn application, carefully following the documentation, and writing what looks like perfectly valid code. You hit run, eager to start pulling profile data or sending messages, only to be greeted by that dreaded response:
"But I followed every step in the documentation!" you think, scrolling frantically through your code. "I have a valid access token. Why can't I access this endpoint?"
If this sounds familiar, you're not alone. As one frustrated developer on Reddit expressed, "I am getting 'Not enough permissions to access: GET /me' and I understand why, but where do I get permission to use my app API to get my own data?" This is one of the most common roadblocks developers face when working with LinkedIn's API.
The Root of the Problem: LinkedIn's Gated Garden API
To understand why you're hitting this permissions wall, you first need to understand a fundamental reality: LinkedIn's API is intentionally restrictive by design. Unlike some other social platforms that offer relatively open access to their APIs, LinkedIn tightly controls what data third-party developers can access and what actions they can perform.
This approach serves LinkedIn's business model and protects user data, but it creates significant challenges for developers. Here's what you need to know:
OAuth 2.0 is Non-Negotiable
All LinkedIn API interactions require authorization via OAuth 2.0. There's no way around this - it's the authentication protocol LinkedIn has chosen, and it's your first line of defense against permission errors.
LinkedIn supports two main authentication flows:
Member Authentication Flow (3-legged OAuth): This is used when your application acts on behalf of a LinkedIn user. The user must explicitly consent to your app's requested permissions.
Application Authentication Flow (2-legged OAuth): Used for server-to-server interactions that don't involve a specific user, such as accessing company analytics.
Open vs. Restricted Permissions
Here's the critical concept most developers miss: LinkedIn divides its API permissions into two categories:
Open Permissions: A very small set of permissions available through self-service in the LinkedIn Developer Portal. By default, your new LinkedIn app only gets these basic permissions, which include:
profile: Access to the authenticated member's basic profile (name, headline, photo)email: Ability to retrieve the member's primary email addressw_member_social: Permission to post, comment, and like on behalf of a member
Restricted Permissions: Almost everything else requires explicit approval from LinkedIn, typically by joining a partner program. These include accessing connection data, sending messages, or accessing company page data.
If you request a scope that hasn't been approved for your app, you'll get that frustrating "Not enough permissions" error, even if your OAuth flow is technically correct.
Top 4 Reasons for the 'Not Enough Permissions' Error
After analyzing countless developer forums, Stack Overflow posts, and Reddit discussions, we've identified the four most common causes of this error:
1. Incorrect or Missing Scopes
This is the most frequent culprit. LinkedIn's API has undergone significant changes over the years, and many tutorials reference outdated scopes. For example:
Old (V1 API):
r_basicprofileandr_fullprofileNew (V2 API):
r_liteprofileand partner-only permissions
When requesting authorization, you must specify only scopes that have been approved for your application. A common mistake is trying to use a scope like rw_organization_admin without being approved for it.
Here's what a correct authorization URL should look like, as discussed in this Stack Overflow thread:
Note that scopes must be space-delimited and URL-encoded.
2. The V1 to V2 API Shift
LinkedIn's migration from V1 to V2 API caused significant disruption in the developer community. As noted in community forums, it's entirely possible for an access token to work with a V1 endpoint but fail on a V2 endpoint.
The V2 API uses different permission models, different endpoints, and requires the inclusion of the header X-Restli-Protocol-Version: 2.0.0 in your requests.
3. The Partner Program Requirement
This is the roadblock that stops most developers in their tracks. The truth is that access to most useful LinkedIn APIs isn't freely available. As one developer lamented, "Documentation states I should have access, but I'm still getting denied."
The reality is that endpoints for accessing:
Company page data
Marketing campaign information
Messaging capabilities
Recruiting features
Sales navigator data
All require joining a specific LinkedIn partner program. These programs often involve an application process, review of your use case, and potentially significant fees.
4. Flaws in Your OAuth 2.0 Flow
Even with the right scopes, technical errors in your OAuth implementation can cause permission issues. Common mistakes include:
Mismatched
redirect_uri: The redirect URI in your authorization request must exactly match one of the URIs configured in your LinkedIn Developer Portal settings.Using an expired authorization code: The code you receive is short-lived and can only be used once to exchange for an access token.
Not refreshing access tokens: LinkedIn access tokens expire, and your application needs to handle token refresh flows properly.
A Developer's Step-by-Step Troubleshooting Guide
If you're stuck with the "Not enough permissions" error, follow this systematic approach to diagnose and resolve the issue:
Step 1: Audit Your Application's Scopes in the Developer Portal
Go to the LinkedIn Developer Portal
Select your application
Navigate to the "Products" tab
Verify which products (e.g., "Sign In with LinkedIn", "Share on LinkedIn") are active for your app
Confirm the authorized scopes under the "Auth" tab
If the scope you need isn't listed, you likely need to apply for a different product or partner program.
Step 2: Validate Your OAuth 2.0 Authorization Flow
Follow the official 3-legged OAuth 2.0 flow precisely:
Request an Authorization Code
Exchange Code for Access Token
Remember to keep your client_secret secure and never expose it on the client-side.
Step 3: Use the Correct V2 API Endpoints and Scopes
Once you have a valid access token, make sure you're using the correct V2 endpoints:
For basic profile data (requires r_liteprofile scope):
For email address (requires r_emailaddress scope):
Step 4: Understand When and How to Apply for a Partner Program
If the basic scopes (r_liteprofile, r_emailaddress, w_member_social) aren't sufficient for your needs, you'll need to apply for a partner program. Review the available partner programs to find the right fit for your use case.
Be prepared for a thorough application process that may include:
Detailed description of your application
Explanation of how you'll use LinkedIn data
Privacy and security assessments
Potential business relationship discussions
Navigating LinkedIn's API Successfully
The "Not Enough Permissions" error almost always comes down to one of four issues:
Requesting unapproved scopes
Using outdated scopes from the V1 API
Needing to join a Partner Program for the desired endpoint
Errors in your OAuth 2.0 implementation
The LinkedIn API landscape continues to evolve, so always treat the official LinkedIn Developer Documentation as your source of truth. Start with the most minimal scopes and build up from there, carefully checking documentation at each step.
If you continue to face issues after checking all these points, consider reaching out to LinkedIn Developer Support for guidance specific to your use case.
Remember that LinkedIn's restrictive API approach is a feature, not a bug - it's designed to protect user data and support LinkedIn's business model. By understanding these constraints and working within them, you can build successful integrations with the professional network that millions rely on daily.
Frequently Asked Questions
Why am I getting the "Not enough permissions" error from the LinkedIn API?
You are likely receiving this error because your application is requesting an API scope or permission that has not been approved for it. LinkedIn's API access is tiered. By default, new apps only have a few basic permissions (like r_liteprofile and r_emailaddress). Accessing more advanced data, such as connection details or messaging, requires applying for and being accepted into a specific LinkedIn Partner Program. The error can also be caused by mistakes in your OAuth 2.0 implementation or using outdated V1 API scopes.
What are the default permissions for a new LinkedIn application?
By default, a new LinkedIn application is granted a small set of "Open Permissions" through self-service in the Developer Portal. These permissions typically include r_liteprofile (for accessing a user's basic profile information like name and photo), r_emailaddress (for retrieving the primary email), and w_member_social (for posting or commenting on behalf of the user). Any permissions beyond this set are considered "Restricted" and require special approval.
How can I get more permissions to access advanced LinkedIn API features?
To access most advanced LinkedIn API features, you must apply for and be approved for a LinkedIn Partner Program. Access to company page data, marketing APIs, messaging, and sales navigator features is not available through self-service. You need to identify the partner program that aligns with your application's use case (e.g., Marketing Developer Program) and submit a detailed application. This process often involves a review of your business case and technical implementation.
Do I need to use OAuth 2.0 for all LinkedIn API calls?
Yes, all interactions with the LinkedIn API require authorization using the OAuth 2.0 protocol. There is no way around this requirement. LinkedIn uses OAuth 2.0 to ensure that all API requests are properly authenticated and authorized. You must correctly implement either the 3-legged Member Authentication Flow (for acting on behalf of a user) or the 2-legged Application Authentication Flow (for server-to-server calls) to get a valid access token.
What is the difference between LinkedIn V1 and V2 API permissions?
The LinkedIn V2 API uses a more granular and restrictive permission model compared to the deprecated V1 API. Many older tutorials reference V1 scopes like r_basicprofile, which are no longer valid. The V2 API uses scopes like r_liteprofile for basic access. It's crucial to use only V2 endpoints, headers (X-Restli-Protocol-Version: 2.0.0), and scopes listed in the current official documentation to avoid permission errors.


