Skip to main content
GET
Get profile information

Endpoint

Authentication

Include your API key in the request header:

Parameters

string
required
The professional profile to fetch. Accepts any of:
  • Profile URN, recommended for consistency: a profile’s public identifier (slug) can change over time, the URN does not. Example: urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc
  • Public identifier (slug), also fine. Example: williamhgates
  • Profile URL. Example: https://www.linkedin.com/in/williamhgates (a trailing slash makes no difference)
The slug is the last path segment of a profile URL (linkedin.com/in/<slug>). Pass just the slug, not the /in/ prefix.
boolean
default:"false"
Also read two further pages of the member’s profile, which add three things the standard call does not return:
  • experiences[].workplaceType — where each role was performed ("On-site", "Hybrid" or "Remote"), on the roles where the member stated it
  • relatedProfiles — the profiles the source suggests alongside this one
  • verifications — what the member has verified (identity, workplace, educational institution)
Costs 2 credits instead of 1. See Full profile for exactly when the second credit is charged.Accepts true / 1 and false / 0, in any letter case. Omitted or empty means false. Any other value, or the parameter sent twice, is rejected with 400 INVALID_PARAMETER, which costs nothing.

Full profile

fullProfile=true reads two more pages of the member’s profile:
  • the detailed experience list — the only page that shows where each role was performed, and which also carries the profiles the source suggests alongside this one;
  • the profile-details panel — which lists what the member has verified.
Everything else in the response is the same as in a standard call.
A fullProfile=true call costs 2 credits and 1 rate-limit unit. The second credit pays for the extra pages, and is charged when at least one of them was read:
  • At least one extra page read — 2 credits. That holds even when the member states no workplace type on any role, the source suggests no profiles, and the member has verified nothing: the pages were read, and “nothing to show” is an answer.
  • Neither extra page could be read — 1 credit. The rest of the profile is unaffected, the extra fields are absent, and partial.sections names each one. A later call may fill them.
  • An organization URL — 1 credit. Organizations have neither page, so the option has no effect.
When one of the two pages is read and the other is not, the call costs 2 credits and partial.sections names only what is missing — so a 2-credit response always carries at least one of the extras, and always says which, if any, it could not get.Your balance is checked against 2 credits before the call runs: with 1 credit left, a fullProfile=true call returns 402 QUOTA_EXHAUSTED, while a standard call would still go through.
Members with long careers. The experience list is read 10 top-level entries at a time, up to 50 entries. Several successive roles at one employer, which the profile shows grouped, count as one entry. For a member with more than 50 entries, the roles past that point come back without workplaceType (the roles themselves are still in experiences) and partial.sections names workplaceType; requesting again will not change that. The same happens when one of the later pages cannot be read, and then a later call may fill it. The call costs 2 credits in both cases, since the extra page was read. Latency. The extra page is fetched at the same time as the rest of the profile, not after it. Beyond the first 10 entries, each further page of the list is read after the previous one, so a long career takes longer to return.
What it adds to the response:

Response

object
Professional profile information

Contributor object

Shared by publications[].authors, projects[].contributors and patents[].inventors.
string
The contributor’s name. Omitted in the rare case the credited member’s profile could not be resolved — never returned as an empty string.
string
Their public identifier (slug), when they are a member
string
Their profile URN, usable directly as profileUrlOrUrn on this endpoint
string
Their public profile URL
string
Their headline at the time of the fetch

Rate limit and credit headers

Every response on this endpoint — success or error — carries your current usage state, so you can pace a batch without a second call: Two caveats worth knowing. The rate-limit window slides rather than resetting on a fixed boundary, so X-RateLimit-Reset is the soonest moment a unit frees, not the start of a new quota period. It is also wider than one second and holds a burst above your per-second limit, which is why X-RateLimit-Remaining is capped at that limit and why a 429 here carries a Retry-After that can exceed one second — honor the header rather than assuming (see Rate Limits). And credit balances are measured at admission and settle asynchronously, so treat them as accurate to within a few seconds rather than exact — GET /api/v1/subscription is the authoritative view. Requests rejected for a bad or missing API key (401) carry no headers, because the account is not yet known at that point.

Example Request

Example Response

Errors

See Error Handling for the full list of error codes and recommended handling.
  • 400 MISSING_PARAMETER / INVALID_PARAMETER / INVALID_URN
  • 401 INVALID_API_KEY
  • 404 PROFILE_NOT_FOUND
  • 402 QUOTA_EXHAUSTED
  • 429 RATE_LIMITED
  • 500 INTERNAL_ERROR
  • 503 SERVICE_UNAVAILABLE

Notes

This endpoint consumes 1 credit, or 2 with fullProfile=true, from your credit balance (plan allowance first, then any pay-as-you-go credits, soonest expiry first). Errors are free — with one exception: a 404 not found costs 1 credit. See Quotas.
Profile data is fetched in real-time from professional data sources. Response times may vary.
Cache profile data for frequently accessed profiles to optimize quota usage.

Use Cases

Lead enrichment

Enhance your CRM with up-to-date professional profile data

Recruitment

Build candidate profiles from professional data

Research

Analyze professional backgrounds and career paths

Verification

Verify professional credentials and work history

Authorizations

X-API-Key
string
header
required

Query Parameters

profileUrlOrUrn
string
required

The professional profile to fetch. Accepts a profile URN (recommended for consistency, since a profile's public identifier can change over time while the URN does not; example urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc), a public identifier/slug (also fine; example williamhgates), or a full profile URL (example https://www.linkedin.com/in/williamhgates; a trailing slash is ignored). The slug is the last path segment of a profile URL, so pass just the slug, not the /in/ prefix.

Example:

"urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc"

fullProfile
boolean
default:false

Also read two further pages of the member's profile. The detailed experience page adds experiences[].workplaceType (where each role was performed, on the roles where the member stated it) and relatedProfiles (the profiles the source suggests alongside this one); the profile-details panel adds verifications (what the member has verified). Costs 2 credits instead of 1 and still 1 rate-limit unit. The second credit is charged when at least one of the two extra pages was read, and partial.sections then names whichever fields are missing; it costs 1 only when neither page could be read, and the rest of the profile is unaffected either way. An organization URL costs 1 (it has neither page). The balance is checked against 2 before the call runs, so with 1 credit left the call returns 402. The experience list is read up to 50 top-level entries (successive roles at one employer count as one); past that, partial.sections names workplaceType and retrying will not change it. Accepts true/1 and false/0 in any letter case; omitted or empty means false; any other value, or the parameter sent twice, returns 400 INVALID_PARAMETER at no cost.

Response

Successfully fetched profile

id
string

Profile URN (unique identifier)

Example:

"urn:li:fsd_profile:ACoAAABCDEF"

firstName
string
lastName
string

Profile last name. Some members restrict their full surname to their own contacts; for those profiles this is the publicly displayed initial (e.g. "D.") and lastNameInitialOnly is true. The full surname is not available through any request in that case.

lastNameInitialOnly
boolean

Present and true only when lastName is an initial because the member restricts it. Absent otherwise, never false.

title
string

Professional headline. A member can publish their profile in several languages and the source does not translate between them. This is the English version when the member published one, otherwise the version in their primaryLocale. Deterministic: two calls return the same language. Every version they did publish is in titleLocalized / descriptionLocalized.

titleLocalized
object

title in each language the member published, keyed by locale ("fr_FR", "en_US").

description
string

About/summary section. A member can publish their profile in several languages and the source does not translate between them. This is the English version when the member published one, otherwise the version in their primaryLocale. Deterministic: two calls return the same language. Every version they did publish is in titleLocalized / descriptionLocalized. Line breaks are returned exactly as the source stores them: for some profiles the source holds this text with its line breaks already removed, and they are not reconstructed by guesswork.

descriptionLocalized
object

description in each language the member published, keyed by locale.

location
string
profilePictureUrl
string

Profile picture URL, largest size available. Always a string: when the member has no photo of their own it holds a generic placeholder image and profilePictureUrls is absent.

profilePictureUrls
object[]

Every size of the profile picture, smallest first, one entry per distinct size (how many varies: a small original comes in fewer sizes); the last entry is the image profilePictureUrl points to (the framed picture when the member displays a photo frame). ABSENT, not empty and not null, when the member has no photo of their own, which is how to tell a real photo from the placeholder in profilePictureUrl. Not returned for organization records.

experiences
object[]

Complete work experience history, ordered most recent first. Every position is returned in a single call - there is no pagination to follow, including for members with dozens of past employers and for members holding many successive roles at the same one. If a section could not be completed, the top-level partial object names it.

educations
object[]
volunteerCauses
string[]

Volunteer causes listed on the profile

skills
object[]

Professional skills listed on the profile. Complete list, returned in the same single call as the rest of the profile.

languages
object[]
certifications
object[]
coverImageUrl
string

Profile banner/background image URL

coverImageUrls
object[]

Every size of the banner image, smallest first. Banners are not square, so use both width and height. Absent when the member has no banner, in which case coverImageUrl is absent too.

publicIdentifier
string

Public identifier (slug)

profileId
string

Member identifier

countryCode
string

ISO country code

geoLocationName
string

Full geographic location string

geoCountryName
string

Country name

geoUrn
string

Geo URN

connectionType
string

Relationship to the authenticated account

creatorInfo
object

Creator mode information

jobTitle
string

Title of the member DESIGNATED PRIMARY role (the same entry flagged current in experiences). A designation, not a date test: if the member has not updated their profile since that role ended, jobTitle still reflects it while the matching experience shows ongoing:false.

companyName
string

Employer of that same designated role. Same caveat as jobTitle. Derived from the position itself, whereas currentPosition reflects the block the member chooses to DISPLAY at the top of their profile - so currentPosition can be null while jobTitle/companyName are set.

companyPublicId
string

Current company public identifier slug

companyLinkedinUrl
string

Current company profile URL

currentPosition
object | null

Explicit "current company" block from the top of the profile page. Object when the member displays it, null when they don't (an ongoing primary position may still exist in experiences).

currentSchool
object | null

Explicit "education" block from the top of the profile page. Object when the member displays it, null when they don't.

followerCount
number

Number of followers

connectionsCount
number

Number of connections

creator
boolean

Whether Creator mode is enabled

influencer
boolean

Whether the profile carries the platform's long-standing editorial recognition. Distinct from topVoice: a profile can have one without the other.

topVoice
boolean

Present and true when the profile carries a recognised-voice badge. ABSENT (not false) when it does not, which is the case for most profiles — treat an absent key as falsy. The badge's display label is not returned because the source translates it per reading session.

premium
boolean

Whether the profile has Premium

isVerified
boolean

Whether the profile has a verification badge

memberId
string

Numeric internal member id (e.g. "251749025"). Distinct from id/profileId, which carry the urn:li:fsd_profile:… form.

Example:

"251749025"

openToWork
boolean

Whether the profile shows the public #OPEN_TO_WORK photo frame. Reflects the publicly visible badge only; recruiter-only 'open to work' is not exposed.

hiring
boolean

Whether the profile shows the public #HIRING photo frame. A profile picture carries one frame at most, so hiring and openToWork are never both true.

inRemembrance
boolean

Whether the account has been officially memorialized ('In Remembrance'). Only a memorialized account returns true: a regular profile whose headline mentions the member has passed away returns false.

openProfile
boolean

Whether the member runs an open profile: anyone can message them directly without being one of their connections, and without spending a paid message credit. Unrelated to openToWork, and not the same as premium (some non-premium members are reachable this way). An ABSENT openProfile means unknown, never false: on a small share of calls it cannot be determined, the key is omitted and partial.sections includes openProfile; requesting the profile again normally returns it. A memorialized account (inRemembrance true) always returns false, since nobody can message it. It is the only status boolean that can be absent on a person profile.

joinDate
object

Approximate account creation date (month + year).

birthDate
object

The member's birthday, only when their privacy settings make it visible to us; absent when they hide it or never entered it. Members choose who can see it, so one who limits it to a narrower audience may appear on some calls and not on others. Included in every call at no extra cost. Always a month and a day; the year only when the member shares it, which is rare.

Example:
websites
object[]

The websites listed in the member's contact info, only when their privacy settings make them visible to us, in the order the member listed them. Absent (never an empty array) when there are none to show. Included in every call at no extra cost. Not the same as creatorInfo.website, the single link a creator pins to their profile.

url
string

Canonical public URL of the professional profile page

Example:

"https://www.linkedin.com/in/williamhgates/"

pronoun
string

Publicly displayed pronouns (e.g. "she/her"). Omitted when the member doesn't display pronouns.

Example:

"she/her"

recommendations
object[]

Recommendations received by the member. Best-effort: omitted when this section could not be fetched, empty array when the member has none.

testScores
object[]

Test scores listed on the profile

industry
string

The member self-declared industry, e.g. "Information Technology & Services". Uses the industry vocabulary the profile page itself displays, which is NOT the same list as the industry field on the company endpoint - do not join the two. Omitted when the member lists none.

industryUrn
string

Stable identifier for industry, e.g. "urn:li:fsd_industry:96".

primaryLocale
string

The language the member AUTHORED their profile in, e.g. "es_ES". It does not by itself say which language the free text beside it is in - see title and description. For language-independent values use geoUrn, industryUrn or companyId.

supportedLocales
string[]

Every language the member published their profile in, e.g. ["fr_FR","en_US"]. A member who wrote their profile once gets a single-entry array, so more than one entry is the signal that titleLocalized / descriptionLocalized have something to choose from.

entityType
enum<string>

"Person" for a member profile. "Company" when an organization identifier was supplied: a company, school or showcase URL is accepted here for backward compatibility and returns a REDUCED record (organization name in firstName, tagline in title, empty experiences/educations). Prefer GET /api/v1/company for organizations.

Available options:
Person,
Company
publications
object[]

Publications listed on the profile, in display order.

projects
object[]

Projects listed on the profile, in display order.

patents
object[]

Patents listed on the profile, in display order.

honors
object[]

Honors and awards listed on the profile, in display order.

organizations
object[]

Organizations the member belongs to, in display order.

courses
object[]

Courses listed on the profile, in display order.

volunteerExperiences
object[]

Volunteering ROLES: what the member did and for whom, in display order. Distinct from volunteerCauses, which is only the list of causes they say they care about.

verifications
object[]

Only with fullProfile=true. What the member has verified. An empty array means the panel was read and nothing is verified; an ABSENT key means the option was not requested or the panel could not be read, and then partial.sections names 'verifications'. Not the same as isVerified, which is a plain boolean on every call and is not derived from this.

Only with fullProfile=true. The profiles the source suggests alongside this one, typically up to 10. An empty array means the source suggested none; an absent key means the option was not requested or the extra page could not be read (then partial.sections names relatedProfiles). Two calls are not guaranteed to return the same suggestions.

partial
object

Present ONLY when part of the response is knowingly incomplete; its absence means nothing was dropped. A profile is assembled from several upstream reads, and when one cannot be completed the affected array is shorter than the member real data - previously indistinguishable from a genuinely short list.

recommendationsGiven
object[]

Recommendations the member WROTE for other people. Best-effort, exactly like recommendations: an empty array means they wrote none, while an ABSENT key means the fetch failed and partial will say so. Note the named person here is the RECIPIENT, whereas in recommendations it is the author.