Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The Profile Details API endpoint (/identityMe) retrieves LinkedIn member profile information including name, email, profile photo, and profile URL. Plus tier also provides access to current job and education details.
Note
Tier Availability: Development ✅ | Lite ✅ | Plus ✅
All tiers can access this API. Plus tier receives additional fields (education and current position).
Overview
Key Features:
- Retrieve member's basic profile (name, email, photo, profile URL)
- Access most recent education details (Plus tier only)
- Get current workplace information (Plus tier only)
- OAuth: 3-legged (member consent required)
- Version: 202510.03 (Plus tier) / Check Release Notes (Dev/Lite tier)
Important
Education data comes from this API using the r_most_recent_education OAuth scope (Plus tier only). Education is not included in the /verificationReport API.
Rate Limits
| Limit Type | Development | Lite | Plus | Description |
|---|---|---|---|---|
| Application-level | 5,000/day | 5,000/day | Custom | Maximum API calls per day across all users |
| Member-level | 500/day | 500/day | Custom | Maximum calls per individual member per day |
Note
Plus tier rate limits are customized based on partnership agreement.
Endpoint Details
GET https://api.linkedin.com/rest/identityMe
Required Headers
| Header | Value | Description |
|---|---|---|
LinkedIn-Version |
{LATEST_VERSION} |
API version (see Release Notes) |
Required OAuth Scopes
| Scope | Development | Lite | Plus | Purpose |
|---|---|---|---|---|
r_profile_basicinfo |
✅ Available | ✅ Available | ✅ Available | Basic profile info (name, email, photo, profile URL) |
r_most_recent_education |
❌ Not available | ❌ Not available | ✅ Available | Most recent education details |
r_primary_current_experience |
❌ Not available | ❌ Not available | ✅ Available | Current workplace information |
Warning
Development Tier Limitation: You can only access data for LinkedIn accounts that are administrators of your developer application. This tier is for testing only.
For production use, upgrade to Lite tier.
Response Fields by Tier
Common Fields (All Tiers)
These fields are available in Development, Lite, and Plus tiers:
| Field | Type | Always Returned | Description |
|---|---|---|---|
id |
string | ✅ Yes | Unique identifier for the member scoped to your application |
lastRefreshedAt |
timestamp | ✅ Yes | When profile data was pulled (current timestamp in milliseconds since epoch), useful to ignore older updates when subscribed to push notifications |
basicInfo |
object | ✅ Yes | Contains name, email, profile URL, and profile picture |
basicInfo.firstName |
MultiLocaleString | ✅ Yes | Member's first name (localized) |
basicInfo.lastName |
MultiLocaleString | ✅ Yes | Member's last name (localized) |
basicInfo.primaryEmailAddress |
string | If present | Member's primary email address |
basicInfo.profileUrl |
string | ✅ Yes | Public LinkedIn profile URL |
basicInfo.profilePicture |
object | If present | Profile picture with cropped image URL and expiry |
Plus Tier Only Fields
Important
Plus tier only: The following fields require Plus tier access and appropriate OAuth scopes.
Education Fields (requires r_most_recent_education scope)
| Field | Type | Always Returned | Description |
|---|---|---|---|
mostRecentEducation |
object | If present | Most recent education details |
mostRecentEducation.schoolName |
MultiLocaleString | If present | Name of school or university |
mostRecentEducation.degreeName |
MultiLocaleString | If present | Degree name (e.g., "Bachelor of Science") |
mostRecentEducation.schoolLogo |
object | If present | School/university logo image |
Experience Fields (requires r_primary_current_experience scope)
| Field | Type | Always Returned | Description |
|---|---|---|---|
primaryCurrentPosition |
object | If present | Current job information |
primaryCurrentPosition.title |
MultiLocaleString | If present | Member's current job title |
primaryCurrentPosition.companyName |
MultiLocaleString | If present | Company name |
primaryCurrentPosition.companyPageUrl |
string | If present | LinkedIn company page URL |
primaryCurrentPosition.companyLogo |
object | If present | Company logo image |
primaryCurrentPosition.startedOn |
object | If present | Start date (month and year) |
Note
Plus tier fields may be absent if:
- Member hasn't added education/experience to their LinkedIn profile
- Required OAuth scopes were not requested during authorization
- Member denied consent for specific scopes
Example Requests and Responses
Example 1: Development & Lite Tier Response
Request:
curl -X GET 'https://api.linkedin.com/rest/identityMe' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'LinkedIn-Version: {LATEST_VERSION}'
Response (Development/Lite Tier):
{
"lastRefreshedAt": 1760631246905,
"id": "1n23dEFSmS",
"basicInfo": {
"firstName": {
"localized": {
"en_US": "John"
},
"preferredLocale": {
"country": "US",
"language": "en"
}
},
"lastName": {
"localized": {
"en_US": "Doe"
},
"preferredLocale": {
"country": "US",
"language": "en"
}
},
"primaryEmailAddress": "john.doe@example.com",
"profileUrl": "https://www.linkedin.com/profile-thirdparty-redirect/example-profile-url",
"profilePicture": {
"croppedImage": {
"downloadUrl": "https://media.licdn.com/dms/image/v2/example/profile-pic",
"downloadUrlExpiresAt": 1763596800000
}
}
}
}
Example 2: Plus Tier Response (Basic Profile)
Request:
curl -X GET 'https://api.linkedin.com/rest/identityMe' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'LinkedIn-Version: 202510.03'
Response (Plus Tier with Education & Current Position):
{
"lastRefreshedAt": 1761512274175,
"id": "abc123xyz",
"basicInfo": {
"firstName": {
"localized": {
"en_US": "John"
},
"preferredLocale": {
"country": "US",
"language": "en"
}
},
"lastName": {
"localized": {
"en_US": "Doe"
},
"preferredLocale": {
"country": "US",
"language": "en"
}
},
"primaryEmailAddress": "john.doe@example.com",
"profileUrl": "https://www.linkedin.com/profile-thirdparty-redirect/example-profile-url",
"profilePicture": {
"croppedImage": {
"downloadUrl": "https://media.licdn.com/dms/image/v2/example/profile-pic",
"downloadUrlExpiresAt": 1762992000000
}
}
},
"mostRecentEducation": {
"schoolName": {
"localized": {
"en_US": "Stanford University"
},
"preferredLocale": {
"country": "US",
"language": "en"
}
},
"schoolLogo": {
"originalImage": {
"downloadUrl": "https://media.licdn.com/dms/image/v2/example/company-logo",
"downloadUrlExpiresAt": 1762992000000
}
},
"degreeName": {
"localized": {
"en_US": "Master of Science in Computer Science"
},
"preferredLocale": {
"country": "US",
"language": "en"
}
}
},
"primaryCurrentPosition": {
"title": {
"localized": {
"en_US": "Senior Software Engineer"
},
"preferredLocale": {
"country": "US",
"language": "en"
}
},
"companyName": {
"localized": {
"en_US": "LinkedIn"
},
"preferredLocale": {
"country": "US",
"language": "en"
}
},
"companyPageUrl": "https://www.linkedin.com/company/1234",
"companyLogo": {
"originalImage": {
"downloadUrl": "https://media.licdn.com/dms/image/v2/example/company-logo",
"downloadUrlExpiresAt": 1762992000000
}
},
"startedOn": {
"month": 1,
"year": 2022
}
}
}
Use our Postman collection to test /identityMe response fields.
Detailed Field Schemas
MultiLocaleString Format
Used for fields like firstName, lastName, schoolName, degreeName, title, and companyName:
{
"localized": {
"en_US": "Example Text"
},
"preferredLocale": {
"country": "US",
"language": "en"
}
}
Image Objects (Profile Picture, School Logo, Company Logo)
Profile Picture:
{
"croppedImage": {
"downloadUrl": "https://media.licdn.com/dms/image/v2/...",
"downloadUrlExpiresAt": 1762992000000
}
}
School/Company Logo:
{
"originalImage": {
"downloadUrl": "https://media.licdn.com/dms/image/v2/...",
"downloadUrlExpiresAt": 1762992000000
}
}
Warning
Image URLs expire. Always check downloadUrlExpiresAt and re-fetch the API response if the URL has expired.
Start Date Object
{
"month": 1,
"year": 2022
}
month: Integer from 1-12year: Four-digit year
Error Handling
Common API Errors
| HTTP Status | Error | Cause | Solution |
|---|---|---|---|
| 400 | Bad Request | Invalid parameters or malformed request | Verify request URL, parameters, and headers |
| 401 | Unauthorized | Invalid or expired access token | Refresh the access token and retry |
| 401 | Failed to get member ID | Invalid member information in token | Re-authenticate member to get new access token |
| 401 | Failed to get developer application urn | Invalid developer application info in token | Verify access token; re-authenticate if needed |
| 403 | Forbidden | Missing required OAuth scope | Ensure r_profile_basicinfo scope is authorized |
| 403 | No valid API product assigned | Product not enabled in Developer Portal | Add "Verified on LinkedIn" product to your app |
| 403 | Insufficient permissions (admin required) | Development tier: Non-admin member | Use admin member token or upgrade to Lite tier |
| 403 | Insufficient permissions | Missing required OAuth scopes | Request required scopes during authorization |
| 404 | Not Found | Member not found or deleted | Verify the member's LinkedIn account status |
| 426 | Upgrade Required | Deprecated API version | Update LinkedIn-Version header to latest version |
| 429 | Too Many Requests | Rate limit exceeded | Retry after delay specified in Retry-After header |
| 500 | Internal Server Error | Temporary LinkedIn service issue or unexpected error | Retry with exponential backoff; contact support if persists |
For additional error handling guidance, see the LinkedIn API Error Handling Guide.
Best Practices
For All Tiers
✅ Always use LinkedIn-Version header to ensure API compatibility
✅ Cache responses temporarily to minimize redundant API calls
✅ Validate member ID uniqueness in your system (critical for data integrity)
✅ Handle missing optional fields gracefully (email, profile picture may be absent)
✅ Check image URL expiration before displaying cached images
✅ Combine with /verificationReport for complete verification context
For Development Tier
⚠️ Remember: Only admin accounts can be accessed
💡 Test thoroughly before requesting Lite tier upgrade
💡 Use for prototyping OAuth flow and UI integration
For Plus Tier
✅ Request only needed scopes - Don't request education/experience if not required
✅ Implement data freshness strategies - Use /validationStatus API to check if data needs refresh
✅ Handle missing Plus fields - Members may not have education/experience on profile
Use Cases
All Tiers
- Display member's name and profile picture in your application
- Associate LinkedIn identity with your platform's user account
- Show "Verified on LinkedIn" badges with member context
- Personalize onboarding flows
Plus Tier Additional Use Cases
- Display current job title and company in member profiles
- Show education credentials for professional verification
- Build trust scores based on professional background
- Pre-fill job application forms with LinkedIn data
Related Resources
APIs
- Verification Report API – Get verification details (identity & workplace)
- Validation Status API – Bulk validation checks (Plus tier only)
Guides
- Quickstart Guide – Get started with the API
- Upgrade to Lite Tier – Move to production
- Implementation Guide – Best practices
- Data Freshness Strategies – Keep data current (Plus tier)
- Certification Requirements – Production readiness (Plus tier)
Authentication
- Authorization Code Flow – OAuth 2.0 3-legged authentication
Other Resources
- FAQ – Troubleshooting and answers
- Release Notes – API updates and current versions
- Overview – Product overview and tier comparison
