Plus Tier Quickstart

Get from zero to your first successful API call displaying detailed verification data in 15 minutes. Plus tier provides enterprise-grade features including basic profile data, detailed verification metadata, and bulk validation capabilities.

Important

Enterprise Partnership Required

Plus tier access requires approval from LinkedIn Business Development. This tier is designed for enterprise partners with strategic use cases.


Overview

What You'll Get

Basic profile data - Current job, education, and professional details
Detailed verification metadata - Verified names, timestamps, methods, organization info
Bulk validation API - Check freshness for up to 500 members per request
Custom rate limits - Enterprise-scale API access
Priority support - Dedicated partner support team

API Access

Endpoint Available Response Data
/identityMe ✅ Yes Basic profile (name, email, photo, URL, education, job)
/verificationReport ✅ Yes Detailed verification metadata with timestamps
/validationStatus ✅ Yes Bulk member validation (up to 500 members)

OAuth Scopes

Scope Available Purpose
r_profile_basicinfo ✅ Yes Basic profile information
r_verify_details ✅ Yes Detailed verification metadata with timestamps
r_primary_current_experience ✅ Yes Current job title and company
r_most_recent_education ✅ Yes Most recent education information

Rate Limits

  • Custom limits - Negotiated based on partnership agreement
  • Bulk validation - Up to 500 members per /validationStatus request

Prerequisites

Before starting, ensure you have:

  • Approved partner access from LinkedIn Business Development
  • Developer application created in LinkedIn Developer Portal
  • Client ID and Client Secret from your app's Auth tab
  • Verified on LinkedIn Plus product enabled for your application

Tip

To request access, visit Verified on LinkedIn and submit an access request.


Step 1: Set Up OAuth (2 minutes)

Configure Redirect URI

  1. Go to Developer Portal → Your App → Auth tab
  2. Add your redirect URI (e.g., https://yourapp.com/auth/linkedin/callback)
  3. Note your Client ID and Client Secret

Request Authorization

Redirect the member to LinkedIn's authorization page with all required scopes:

GET https://www.linkedin.com/oauth/v2/authorization
  ?response_type=code
  &client_id={YOUR_CLIENT_ID}
  &redirect_uri={YOUR_REDIRECT_URI}
  &state={RANDOM_STRING}
  &scope=r_verify_details%20r_profile_basicinfo%20r_primary_current_experience%20r_most_recent_education

Required OAuth Scopes (Plus Tier):

  • r_verify_details – Detailed verification metadata
  • r_profile_basicinfo – Basic profile info
  • r_primary_current_experience – Current job details
  • r_most_recent_education – Education information

Note

Request all scopes at once for the best user experience. See Implementation Guide for details.

Exchange Code for Access Token

After the member approves, LinkedIn redirects to your URI with an authorization code. Exchange it for an access token:

curl -X POST 'https://www.linkedin.com/oauth/v2/accessToken' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'grant_type=authorization_code' \
  -d 'code={AUTHORIZATION_CODE}' \
  -d 'redirect_uri={YOUR_REDIRECT_URI}' \
  -d 'client_id={YOUR_CLIENT_ID}' \
  -d 'client_secret={YOUR_CLIENT_SECRET}'

Sample Response:

{
  "access_token": "AQWsGriMiJuFpzv7...",
  "expires_in": 5183999,
  "refresh_token": "AQVObXp9RNF9RuuN...",
  "scope": "r_verify_details,r_profile_basicinfo,r_primary_current_experience,r_most_recent_education",
  "token_type": "Bearer"
}

Important

  • Access tokens expire in 60 days
  • Refresh tokens expire in 365 days
  • Store both tokens securely and implement automatic refresh

Step 2: Call /identityMe API (3 minutes)

Get comprehensive member profile data including education and current position:

curl -X GET 'https://api.linkedin.com/rest/identityMe' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}' \
  -H 'LinkedIn-Version: {LATEST_VERSION}'

Sample Response (Plus Tier):

{
  "id": "abc123",
  "lastRefreshedAt": 1760631246905,
  "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/...",
    "profilePicture": {
      "croppedImage": {
        "downloadUrl": "https://media.licdn.com/dms/image/...",
        "downloadUrlExpiresAt": 1763596800000
      }
    }
  },
  "primaryCurrentExperience": {
    "title": {
      "localized": { "en_US": "Software Engineer" },
      "preferredLocale": { "country": "US", "language": "en" }
    },
    "companyName": {
      "localized": { "en_US": "Tech Corp" },
      "preferredLocale": { "country": "US", "language": "en" }
    }
  },
  "mostRecentEducation": {
    "schoolName": {
      "localized": { "en_US": "University of Example" },
      "preferredLocale": { "country": "US", "language": "en" }
    },
    "degreeName": {
      "localized": { "en_US": "Bachelor of Science" },
      "preferredLocale": { "country": "US", "language": "en" }
    },
    "fieldOfStudy": {
      "localized": { "en_US": "Computer Science" },
      "preferredLocale": { "country": "US", "language": "en" }
    }
  }
}

Note

Plus tier returns additional fields: primaryCurrentExperience and mostRecentEducation. See /identityMe API Reference for complete schema.

Explore Plus tier capabilities using our Postman collection, including verification metadata and bulk validation examples.

Try with Postman


Step 3: Call /verificationReport API (3 minutes)

Get detailed verification status with metadata:

curl -X GET 'https://api.linkedin.com/rest/verificationReport' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}' \
  -H 'LinkedIn-Version: {LATEST_VERSION}'

Sample Response (Plus Tier):

{
  "id": "abc123",
  "verifications": ["IDENTITY", "WORKPLACE"],
  "identityVerification": {
    "verifiedName": {
      "firstName": {
        "localized": { "en_US": "John" },
        "preferredLocale": { "country": "US", "language": "en" }
      },
      "lastName": {
        "localized": { "en_US": "Doe" },
        "preferredLocale": { "country": "US", "language": "en" }
      }
    },
    "verifiedAt": 1698796800000
  },
  "workplaceVerification": {
    "organizationName": "Tech Corp",
    "organizationLogoUrl": "https://media.licdn.com/dms/image/...",
    "verificationMethod": "WORK_EMAIL",
    "verifiedAt": 1698796800000
  }
}

Note

Plus tier returns detailed metadata including verified names, timestamps, and verification methods. Development/Lite tiers only return verification categories.


Step 4: Call /validationStatus API (3 minutes)

Check data freshness for multiple members in bulk (Plus tier exclusive):

curl -X POST 'https://api.linkedin.com/rest/validationStatus' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}' \
  -H 'LinkedIn-Version: {LATEST_VERSION}' \
  -H 'Content-Type: application/json' \
  -d '{
    "memberIds": ["abc123", "def456", "ghi789"]
  }'

Sample Response:

{
  "results": [
    {
      "memberId": "abc123",
      "status": "FRESH",
      "lastRefreshedAt": 1760631246905
    },
    {
      "memberId": "def456",
      "status": "STALE",
      "lastRefreshedAt": 1698796800000
    },
    {
      "memberId": "ghi789",
      "status": "FRESH",
      "lastRefreshedAt": 1760500000000
    }
  ]
}

Important

  • 2-legged OAuth - Uses client credentials (no member consent required)
  • Batch limit - Up to 500 member IDs per request
  • Use case - Check if cached data needs refreshing

See /validationStatus API Reference for complete documentation.


Step 5: Display Verification Data

Show Verification Badges

Follow branding guidelines to display verification badges:

<!-- Identity Verified -->
<div class="verification-badge">
  <img src="identity-verified-badge.svg" alt="Identity Verified" />
  <span>Identity Verified</span>
</div>

<!-- Workplace Verified -->
<div class="verification-badge">
  <img src="workplace-verified-badge.svg" alt="Workplace Verified" />
  <span>Workplace Verified at Tech Corp</span>
</div>

Display Profile Data

<div class="member-profile">
  <img src="{profilePicture.downloadUrl}" alt="{firstName} {lastName}" />
  <h2>{firstName} {lastName}</h2>
  <p>{primaryCurrentExperience.title} at {primaryCurrentExperience.companyName}</p>
  <p>Education: {mostRecentEducation.degreeName} from {mostRecentEducation.schoolName}</p>
</div>

Best Practices

OAuth & Tokens

  • ✅ Request all scopes at once (better UX)
  • ✅ Store tokens encrypted at rest
  • ✅ Implement automatic token refresh
  • ✅ Use refresh tokens to keep data fresh

Data Freshness

  • ✅ Use /validationStatus to check if data is stale
  • ✅ Refresh stale data proactively
  • ✅ Cache API responses appropriately
  • ✅ See Data Freshness Guide

Security

  • ✅ Enforce unique member ID validation
  • ✅ Use HTTPS only
  • ✅ Implement CSRF protection
  • ✅ See Implementation Guide

Production Readiness


Next Steps

Plus Tier Features

Implementation Guide

API References

Resources


Troubleshooting

"Insufficient scope" Error

Cause: Missing required OAuth scopes

Solution:

  1. Verify all 4 scopes are requested: r_verify_details, r_profile_basicinfo, r_primary_current_experience, r_most_recent_education
  2. Re-authorize the member with correct scopes
  3. Check token scope in OAuth response

"Product not assigned" Error

Cause: Plus tier not enabled for your application

Solution:

  1. Verify Plus tier approval with LinkedIn Business Development
  2. Check Developer Portal → Products tab shows "Plus Tier"
  3. Contact your LinkedIn partner manager

Missing Education or Job Data

Cause: Member hasn't added data to LinkedIn profile, or missing scopes

Solution:

  1. Check member's LinkedIn profile has education/job data
  2. Verify r_primary_current_experience and r_most_recent_education scopes granted
  3. Handle missing fields gracefully in your UI

Rate Limit Exceeded

Cause: Exceeded custom rate limits

Solution:

  1. Review your rate limit agreement
  2. Implement caching and optimize API calls
  3. Contact your LinkedIn partner manager to discuss limits

🎉 Congratulations! You're now using Verified on LinkedIn Plus tier with enterprise features. Complete certification requirements before going to production.