Share via


Verification Report API (/verificationReport)

The Verification Report API allows you to retrieve verification information for LinkedIn members, including verification categories (e.g., IDENTITY, WORKPLACE), detailed metadata, and verification URLs for eligible members.

Note

Tier Availability: Development ✅ | Lite ✅ | Plus ✅

All tiers can access this API. Plus tier receives additional detailed metadata (verified names, timestamps, methods, organization info).

Overview

Key Features:

  • Check member's verification status (identity and workplace)
  • Get detailed verification metadata (Plus tier only)
  • Generate verification URLs for unverified members
  • OAuth: 3-legged (member consent required)
  • Version: 202510 (Plus tier) / Check Release Notes (Dev/Lite tier)

Verification Categories

Category Description Available In
IDENTITY Government ID-based verification All tiers
WORKPLACE Work affiliation verification (email or Microsoft Entra) All tiers

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/verificationReport

Required Headers

Header Value Description
Authorization Bearer {ACCESS_TOKEN} OAuth 2.0 access token authorized by the member
LinkedIn-Version {LATEST_VERSION} API version (see Release Notes)

Required OAuth Scope

Scope Development Lite Plus Purpose
r_verify_details ✅ Required ✅ Required ✅ Required Access to verification data

Note

Some older implementations may use r_verify scope. Both are accepted, but r_verify_details is the current standard.

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.

Query Parameters

Parameter Type Required Description
verificationCriteria string Optional Specifies verification categories for URL generation. Can be repeated for multiple values: IDENTITY, WORKPLACE

Important

How verificationCriteria works:

  • Does NOT filter response – Always returns ALL completed verifications
  • Controls URL generation – Only generates URL for requested criteria
  • Multiple values – Repeat parameter: ?verificationCriteria=IDENTITY&verificationCriteria=WORKPLACE
  • DO NOT use comma-separated – Will return 400 Bad Request error

Examples:

# Request both verifications
GET /verificationReport?verificationCriteria=IDENTITY&verificationCriteria=WORKPLACE

# Request only identity
GET /verificationReport?verificationCriteria=IDENTITY

# No criteria (returns URL for any eligible verification)
GET /verificationReport

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 Unique identifier for member scoped to your application
verifications array of strings Completed verification categories (e.g., ["IDENTITY", "WORKPLACE"]). Empty array if no verifications.
verificationUrl string ⚠️ Optional URL to LinkedIn verification flow. Present only if member is eligible for additional verifications.

Development & Lite Tier Response

Development and Lite tiers receive only the basic verification categories without detailed metadata.

Plus Tier Additional Fields

Important

Plus tier only: The following fields provide detailed verification metadata and require Plus tier access.

Field Type Description
userId string Legacy identifier format (being deprecated - use id instead)
lastRefreshedAt timestamp When verification data was last refreshed (milliseconds since epoch)
verifiedDetails array of objects Detailed verification metadata for each completed verification

verifiedDetails Array (Plus Only)

Each object represents a completed verification with detailed metadata.

Common Fields:

Field Type Description
category string Verification category: IDENTITY or WORKPLACE
lastVerifiedAt timestamp When verification was completed (milliseconds since epoch)

IDENTITY Verification Fields:

Field Type Description
verifiedName object Legal name from government ID
verifiedName.firstName string Verified first name (uppercase)
verifiedName.middleName string Verified middle name (optional, uppercase)
verifiedName.lastName string Verified last name (uppercase)

WORKPLACE Verification Fields:

Field Type Description
verificationMethod string EMAIL_ADDRESS or MICROSOFT_ENTRA
organizationInfo object Company information
organizationInfo.name string Company name
organizationInfo.url string LinkedIn company page URL

Example Requests and Responses

Example 1: Development/Lite Tier - Fully Verified Member

Member has completed both verifications. No verificationUrl in response.

Request:

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

Response (Development/Lite Tier):

{
  "verifications": ["IDENTITY", "WORKPLACE"],
  "id": "Yw-zU_kyua"
}

Try the /verificationReport API in Postman to explore verification states and metadata.

Try with Postman


Example 2: Development/Lite Tier - Unverified Member

Member has no verifications but is eligible. Response includes verificationUrl.

Request:

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

Response (Development/Lite Tier):

{
  "verifications": [],
  "id": "Yw-zU_kyua",
  "verificationUrl": "https://www.linkedin.com/trust/verification?isDeeplinkToCCT=true&verificationUrl=..."
}

Example 3: Plus Tier - Fully Verified Member with Metadata

Member has completed both verifications. Plus tier includes detailed metadata.

Request:

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

Response (Plus Tier with Detailed Metadata):

{
  "id": "zy5ubopzH4",
  "userId": "UfBk1351j0zQTGeF9TT3JCeztYB8CTz6INgveqjzg8g=",
  "lastRefreshedAt": 1761504023786,
  "verifications": ["IDENTITY", "WORKPLACE"],
  "verifiedDetails": [
    {
      "category": "IDENTITY",
      "verifiedName": {
        "firstName": "MICHAEL",
        "middleName": "GARY",
        "lastName": "SCOTT"
      },
      "lastVerifiedAt": 1744141828585
    },
    {
      "category": "WORKPLACE",
      "verificationMethod": "EMAIL_ADDRESS",
      "organizationInfo": {
        "name": "LinkedIn",
        "url": "https://www.linkedin.com/company/1337"
      },
      "lastVerifiedAt": 1744139009883
    }
  ]
}

Example 4: Plus Tier - Partially Verified Member

Member has identity verification, eligible for workplace. URL provided for workplace verification.

Request:

curl -X GET 'https://api.linkedin.com/rest/verificationReport?verificationCriteria=WORKPLACE' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}' \
  -H 'LinkedIn-Version: 202510'

Response (Plus Tier):

{
  "id": "zy5ubopzH4",
  "userId": "UfBk1351j0zQTGeF9TT3JCeztYB8CTz6INgveqjzg8g=",
  "lastRefreshedAt": 1761504023786,
  "verifications": ["IDENTITY"],
  "verifiedDetails": [
    {
      "category": "IDENTITY",
      "verifiedName": {
        "firstName": "MICHAEL",
        "middleName": "GARY",
        "lastName": "SCOTT"
      },
      "lastVerifiedAt": 1744141828585
    }
  ],
  "verificationUrl": "https://www.linkedin.com/trust/verification?isDeeplinkToCCT=true&verificationUrl=...WORKPLACE..."
}

Understanding Verification States

State verifications verificationUrl Action Required
Fully Verified Contains all categories Not present Display verification badges
Partially Verified Contains some categories Present Show completed badges + "Complete Verification" button
Not Verified Empty array [] Present Show "Verify with LinkedIn" button
Not Eligible Empty array [] Not present Member cannot verify (region/eligibility restrictions)

Verification URL Usage

What is verificationUrl?

The verificationUrl field is a LinkedIn URL that directs members to complete verification on LinkedIn.

When it's present:

  • Member is eligible for additional verifications
  • If verificationCriteria specified: eligible for those specific verifications
  • If no criteria: eligible for any verification type

When it's absent:

  • Member has completed all requested verifications, OR
  • Member is not eligible for any additional verifications

Note

Member eligibility depends on factors like region, account status, and verification availability. See LinkedIn Help Center for eligibility details.

Using Redirect URI (Optional)

A redirect URI (callback URL) allows LinkedIn to return the member to your application after verification.

Flow:

  1. Your app redirects member to the verification URL
  2. Member completes verification on LinkedIn
  3. LinkedIn redirects member back to your redirect URI
  4. Your app resumes the member's session

Configuration Requirements:

Important

The redirectUri must exactly match a URL registered in your LinkedIn Developer App's Auth tab.

Registration Steps:

  1. Go to LinkedIn Developer Portal
  2. Select your application → Auth tab
  3. Under Authorized redirect URLs, add your redirect URI
  4. Save changes

Implementation:

// Get verification URL from API response
const verificationUrl = apiResponse.verificationUrl;

// Add your redirect URI (must be URL-encoded)
const redirectUri = encodeURIComponent('https://yourapp.com/verification/callback');
const fullUrl = `${verificationUrl}&redirectUri=${redirectUri}`;

// Optionally add state parameter for CSRF protection
const state = generateRandomState(); // Store this in your database
const finalUrl = `${fullUrl}&state=${state}`;

// Redirect member to LinkedIn
window.location.href = finalUrl;

Handling Member's Return:

// In your callback handler at /verification/callback
app.get('/verification/callback', async (req, res) => {
  const { state, error } = req.query;
  
  // Validate state parameter
  if (state && !validateState(state)) {
    return res.status(400).send('Invalid state');
  }
  
  // Check for errors
  if (error) {
    return res.redirect('/dashboard?message=verification_cancelled');
  }
  
  // Fetch updated verification data
  const verificationData = await callVerificationReportAPI(accessToken);
  
  // Update your database
  await updateMemberVerification(memberId, verificationData);
  
  // Redirect to success page
  res.redirect('/dashboard?message=verification_complete');
});

Warning

  • Do NOT cache or persist verificationUrl. Always get a fresh URL from the API.
  • URLs are single-use and may expire.
  • If redirectUri is omitted, member stays on LinkedIn after verification.

Common Issues:

Issue Cause Resolution
Member not redirected redirectUri not URL-encoded URL-encode the parameter
Redirect fails Mismatch with registered URL Use exact URL from Developer Portal
Member stays on LinkedIn Missing redirectUri parameter Add parameter if redirect desired

Important Concepts

Verified Name vs LinkedIn Profile Name (Plus Tier)

  • The verifiedName in identity verification is the legal name from government ID
  • LinkedIn Profile Name comes from /identityMe API (e.g., "John Doe")
  • Verified Name comes from /verificationReport API (e.g., "JOHN M DOE")
  • These names may differ intentionally

Data Freshness

All Tiers:

  • Check verification status before critical actions (payments, access grants)
  • Consider caching responses temporarily to reduce API calls

Plus Tier:

  • Use lastRefreshedAt timestamp to determine when to refresh
  • Recommended refresh frequency: once per day for most use cases
  • Use /validationStatus API for bulk data freshness checks
  • See Data Freshness Guide for comprehensive strategies

Error Handling

Common API Errors

HTTP Status Error Cause Solution
400 Bad Request Invalid verificationCriteria or comma-separated values Use only IDENTITY or WORKPLACE; repeat parameter for multiple values
400 API version not available Missing or invalid LinkedIn-Version header Include LinkedIn-Version: {LATEST_VERSION} header
401 Unauthorized Invalid or expired access token Refresh the access token and retry
403 Forbidden Missing required OAuth scope Ensure r_verify_details scope is authorized
403 Insufficient permissions (admin required) Development tier: Non-admin member Use admin member token or upgrade to Lite tier
403 No valid API product assigned Product not enabled in Developer Portal Add "Verified on LinkedIn" product to your app
404 Not Found Invalid endpoint or member not found Verify request URL and member 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 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 for API compatibility
Handle all verification states (fully verified, partially verified, not verified, not eligible)
Use verificationUrl only for redirection – Don't expose or store it
URL-encode your redirectUri before appending
Validate id field uniqueness in your system
Combine with /identityMe for complete member context
Cache responses temporarily to reduce API calls

For Development Tier

⚠️ Remember: Only admin accounts can be accessed
💡 Test verification flows thoroughly before requesting Lite tier
💡 Verify badge display in your UI

For Plus Tier

Use id field (not deprecated userId)
Display verified names when showing identity verification
Show organization info for workplace verifications
Implement data freshness checks using lastVerifiedAt timestamps
Use /validationStatus API for bulk freshness validation


Use Cases

All Tiers

  • Display "Verified on LinkedIn" badges
  • Confirm member trust and authenticity
  • Trigger verification flows for unverified members
  • Build trust scores based on verification status

Plus Tier Additional Use Cases

  • Display verified legal name for identity confirmation
  • Show verified company affiliation with logo
  • Build detailed audit trails with verification timestamps
  • Implement data freshness validation workflows
  • Display verification methods for transparency

APIs

Guides

Authentication

Other Resources