Profile Details API (/identityMe)

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.

Try with Postman


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"
  }
}

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-12
  • year: 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

APIs

Guides

Authentication

Other Resources

  • FAQ – Troubleshooting and answers
  • Release Notes – API updates and current versions
  • Overview – Product overview and tier comparison