curl --request GET \
--url https://api.fetchin.io/api/v1/profile \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.fetchin.io/api/v1/profile"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.fetchin.io/api/v1/profile', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fetchin.io/api/v1/profile",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fetchin.io/api/v1/profile"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fetchin.io/api/v1/profile")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fetchin.io/api/v1/profile")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"firstName": "Bill",
"lastName": "Gates",
"title": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"description": "Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft. Voracious reader. Avid traveler. Active blogger.",
"location": "Seattle, Washington, United States",
"profilePictureUrl": "https://media.licdn.com/dms/image/...",
"profilePictureUrls": [
{ "url": "https://media.licdn.com/dms/image/...", "width": 100, "height": 100 },
{ "url": "https://media.licdn.com/dms/image/...", "width": 200, "height": 200 },
{ "url": "https://media.licdn.com/dms/image/...", "width": 400, "height": 400 },
{ "url": "https://media.licdn.com/dms/image/...", "width": 800, "height": 800 }
],
"coverImageUrl": "https://media.licdn.com/dms/image/...",
"publicIdentifier": "williamhgates",
"profileId": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"countryCode": "US",
"geoLocationName": "Seattle, Washington, United States",
"geoCountryName": "United States",
"geoUrn": "urn:li:fsd_geo:104116203",
"connectionType": "OUT_OF_NETWORK",
"creatorInfo": {
"hashTags": ["#books", "#climatechange", "#healthcare", "#innovation", "#sustainability"],
"website": "https://gatesnot.es/tgn"
},
"jobTitle": "Co-chair",
"companyName": "Gates Foundation",
"companyPublicId": "gates-foundation",
"companyLinkedinUrl": "https://www.linkedin.com/company/gates-foundation/",
"currentPosition": {
"positionUrn": "urn:li:fsd_profilePosition:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,392598211)",
"title": "Co-chair",
"name": "Gates Foundation",
"companyId": "8736",
"companyUrn": "urn:li:fsd_company:8736",
"publicIdentifier": "gates-foundation",
"url": "https://www.linkedin.com/company/gates-foundation/"
},
"currentSchool": null,
"followerCount": 40076104,
"connectionsCount": 8,
"creator": true,
"influencer": true,
"premium": true,
"isVerified": false,
"memberId": "251749025",
"openToWork": false,
"hiring": false,
"inRemembrance": false,
"openProfile": false,
"joinDate": { "month": 5, "year": 2013 },
"url": "https://www.linkedin.com/in/williamhgates/",
"pronoun": "he/him",
"experiences": [
{
"name": "Gates Foundation",
"jobTitle": "Co-chair",
"description": "",
"dateRange": "2000 - Present",
"current": true,
"positionUrn": "urn:li:fsd_profilePosition:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,392598211)",
"timePeriod": {
"startDate": { "year": 2000 },
"endDate": null
},
"company": {
"url": "https://www.linkedin.com/company/gates-foundation/",
"name": "Gates Foundation",
"logo": "https://media.licdn.com/dms/image/...",
"companyId": "8736",
"urn": "urn:li:fsd_company:8736"
}
},
{
"name": "Microsoft",
"jobTitle": "Co-founder",
"description": "",
"dateRange": "1975 - Present",
"current": false,
"positionUrn": "urn:li:fsd_profilePosition:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,392599749)",
"timePeriod": {
"startDate": { "year": 1975 },
"endDate": null
},
"company": {
"url": "https://www.linkedin.com/company/microsoft/",
"name": "Microsoft",
"logo": "https://media.licdn.com/dms/image/...",
"companyId": "1035",
"urn": "urn:li:fsd_company:1035"
}
}
],
"educations": [
{
"name": "Harvard University",
"description": "",
"dateRange": "1973 - 1975",
"current": false,
"educationUrn": "urn:li:fsd_profileEducation:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,157656829)",
"grade": "3.9/4.0",
"details": "Studied mathematics and computer science before leaving to co-found Microsoft.",
"schoolLogo": "https://media.licdn.com/dms/image/...",
"schoolUrl": "https://www.linkedin.com/school/harvard-university/",
"timePeriod": {
"startDate": { "year": 1973 },
"endDate": { "year": 1975 }
}
}
],
"skills": [],
"languages": [],
"certifications": [],
"recommendations": [
{
"caption": "Chairman and CEO at Microsoft",
"description": "Bill's clarity of thought and depth of curiosity are unmatched. Every conversation with him leaves you thinking bigger.",
"authorFullname": "Satya Nadella",
"authorUrl": "https://www.linkedin.com/in/satyanadella/",
"createdAt": "2014-03-03T12:27:23.403Z",
"lastModifiedAt": "2014-03-03T14:13:56.101Z"
}
],
"testScores": [
{
"name": "TOEIC",
"score": "990",
"date": "Jun 2018"
}
],
"volunteerCauses": ["EDUCATION", "SCIENCE_AND_TECHNOLOGY"]
}
{
"error": "Missing profileUrlOrUrn parameter",
"code": "MISSING_PARAMETER"
}
{
"error": "Invalid API key",
"code": "INVALID_API_KEY"
}
{
"error": "LinkedIn profile not found",
"code": "PROFILE_NOT_FOUND"
}
{
"error": "Quota exceeded. Upgrade your plan or wait for renewal.",
"code": "QUOTA_EXHAUSTED",
"details": {
"creditsRemaining": 0,
"subscriptionCreditsRemaining": 0,
"paygCreditsRemaining": 0,
"buyCreditsUrl": "https://fetchin.io/credits"
}
}
{
"error": "Internal server error",
"code": "INTERNAL_ERROR"
}
{
"error": "Service temporarily unable to serve this request. Please retry.",
"code": "SERVICE_UNAVAILABLE"
}
Get Profile
Get detailed information about a professional profile
curl --request GET \
--url https://api.fetchin.io/api/v1/profile \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.fetchin.io/api/v1/profile"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.fetchin.io/api/v1/profile', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fetchin.io/api/v1/profile",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fetchin.io/api/v1/profile"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fetchin.io/api/v1/profile")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fetchin.io/api/v1/profile")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"firstName": "Bill",
"lastName": "Gates",
"title": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"description": "Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft. Voracious reader. Avid traveler. Active blogger.",
"location": "Seattle, Washington, United States",
"profilePictureUrl": "https://media.licdn.com/dms/image/...",
"profilePictureUrls": [
{ "url": "https://media.licdn.com/dms/image/...", "width": 100, "height": 100 },
{ "url": "https://media.licdn.com/dms/image/...", "width": 200, "height": 200 },
{ "url": "https://media.licdn.com/dms/image/...", "width": 400, "height": 400 },
{ "url": "https://media.licdn.com/dms/image/...", "width": 800, "height": 800 }
],
"coverImageUrl": "https://media.licdn.com/dms/image/...",
"publicIdentifier": "williamhgates",
"profileId": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"countryCode": "US",
"geoLocationName": "Seattle, Washington, United States",
"geoCountryName": "United States",
"geoUrn": "urn:li:fsd_geo:104116203",
"connectionType": "OUT_OF_NETWORK",
"creatorInfo": {
"hashTags": ["#books", "#climatechange", "#healthcare", "#innovation", "#sustainability"],
"website": "https://gatesnot.es/tgn"
},
"jobTitle": "Co-chair",
"companyName": "Gates Foundation",
"companyPublicId": "gates-foundation",
"companyLinkedinUrl": "https://www.linkedin.com/company/gates-foundation/",
"currentPosition": {
"positionUrn": "urn:li:fsd_profilePosition:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,392598211)",
"title": "Co-chair",
"name": "Gates Foundation",
"companyId": "8736",
"companyUrn": "urn:li:fsd_company:8736",
"publicIdentifier": "gates-foundation",
"url": "https://www.linkedin.com/company/gates-foundation/"
},
"currentSchool": null,
"followerCount": 40076104,
"connectionsCount": 8,
"creator": true,
"influencer": true,
"premium": true,
"isVerified": false,
"memberId": "251749025",
"openToWork": false,
"hiring": false,
"inRemembrance": false,
"openProfile": false,
"joinDate": { "month": 5, "year": 2013 },
"url": "https://www.linkedin.com/in/williamhgates/",
"pronoun": "he/him",
"experiences": [
{
"name": "Gates Foundation",
"jobTitle": "Co-chair",
"description": "",
"dateRange": "2000 - Present",
"current": true,
"positionUrn": "urn:li:fsd_profilePosition:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,392598211)",
"timePeriod": {
"startDate": { "year": 2000 },
"endDate": null
},
"company": {
"url": "https://www.linkedin.com/company/gates-foundation/",
"name": "Gates Foundation",
"logo": "https://media.licdn.com/dms/image/...",
"companyId": "8736",
"urn": "urn:li:fsd_company:8736"
}
},
{
"name": "Microsoft",
"jobTitle": "Co-founder",
"description": "",
"dateRange": "1975 - Present",
"current": false,
"positionUrn": "urn:li:fsd_profilePosition:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,392599749)",
"timePeriod": {
"startDate": { "year": 1975 },
"endDate": null
},
"company": {
"url": "https://www.linkedin.com/company/microsoft/",
"name": "Microsoft",
"logo": "https://media.licdn.com/dms/image/...",
"companyId": "1035",
"urn": "urn:li:fsd_company:1035"
}
}
],
"educations": [
{
"name": "Harvard University",
"description": "",
"dateRange": "1973 - 1975",
"current": false,
"educationUrn": "urn:li:fsd_profileEducation:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,157656829)",
"grade": "3.9/4.0",
"details": "Studied mathematics and computer science before leaving to co-found Microsoft.",
"schoolLogo": "https://media.licdn.com/dms/image/...",
"schoolUrl": "https://www.linkedin.com/school/harvard-university/",
"timePeriod": {
"startDate": { "year": 1973 },
"endDate": { "year": 1975 }
}
}
],
"skills": [],
"languages": [],
"certifications": [],
"recommendations": [
{
"caption": "Chairman and CEO at Microsoft",
"description": "Bill's clarity of thought and depth of curiosity are unmatched. Every conversation with him leaves you thinking bigger.",
"authorFullname": "Satya Nadella",
"authorUrl": "https://www.linkedin.com/in/satyanadella/",
"createdAt": "2014-03-03T12:27:23.403Z",
"lastModifiedAt": "2014-03-03T14:13:56.101Z"
}
],
"testScores": [
{
"name": "TOEIC",
"score": "990",
"date": "Jun 2018"
}
],
"volunteerCauses": ["EDUCATION", "SCIENCE_AND_TECHNOLOGY"]
}
{
"error": "Missing profileUrlOrUrn parameter",
"code": "MISSING_PARAMETER"
}
{
"error": "Invalid API key",
"code": "INVALID_API_KEY"
}
{
"error": "LinkedIn profile not found",
"code": "PROFILE_NOT_FOUND"
}
{
"error": "Quota exceeded. Upgrade your plan or wait for renewal.",
"code": "QUOTA_EXHAUSTED",
"details": {
"creditsRemaining": 0,
"subscriptionCreditsRemaining": 0,
"paygCreditsRemaining": 0,
"buyCreditsUrl": "https://fetchin.io/credits"
}
}
{
"error": "Internal server error",
"code": "INTERNAL_ERROR"
}
{
"error": "Service temporarily unable to serve this request. Please retry.",
"code": "SERVICE_UNAVAILABLE"
}
Endpoint
GET /api/v1/profile
Authentication
Include your API key in the request header:X-API-Key: your-api-key-here
Parameters
- 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)
linkedin.com/in/<slug>). Pass just the slug, not the /in/ prefix.experiences[].workplaceType— where each role was performed ("On-site","Hybrid"or"Remote"), on the roles where the member stated itrelatedProfiles— the profiles the source suggests alongside this oneverifications— what the member has verified (identity, workplace, educational institution)
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.
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.sectionsnames each one. A later call may fill them. - An organization URL — 1 credit. Organizations have neither page, so the option has no effect.
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.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.
curl -X GET "https://api.fetchin.io/api/v1/profile?profileUrlOrUrn=williamhgates&fullProfile=true" \
-H "X-API-Key: your-api-key-here"
{
"experiences": [
{
"name": "Acme",
"jobTitle": "Head of Data",
"workplaceType": "Hybrid"
},
{
"name": "Acme",
"jobTitle": "Data Engineer"
}
],
"relatedProfiles": [
{
"publicIdentifier": "jane-doe",
"url": "https://www.linkedin.com/in/jane-doe/",
"name": "Jane Doe",
"headline": "VP Engineering at Example Corp",
"profilePictureUrl": "https://media.licdn.com/dms/image/...",
"profilePictureUrls": [
{ "url": "https://media.licdn.com/dms/image/...", "width": 100, "height": 100 },
{ "url": "https://media.licdn.com/dms/image/...", "width": 400, "height": 400 }
]
}
],
"verifications": [
{
"type": "IDENTITY",
"label": "Identity",
"detail": "Verification performed with a government-issued ID in August 2024"
}
]
}
Response
Show Profile object
Show Profile object
"D.") and sets lastNameInitialOnly. The full surname is not available through any request in that case.true only when lastName is an initial because the member restricts it (see above). Absent otherwise — never false.Use it to tell a restricted surname apart from a genuinely one-letter one, instead of guessing from the string.title in each language the member published, keyed by locale ("fr_FR", "en_US"). See Profile languages.title: the English version when the member wrote one, their own language otherwise — see Profile languages.Line breaks are returned exactly as the source stores them. For some profiles the source holds this text with its line breaks already removed; when that happens the API returns it as a single block, because the breaks are absent from the data and are not reconstructed by guesswork.description in each language the member published, keyed by locale. See Profile languages.profilePictureUrls is absent. Check for profilePictureUrls to tell the two apart, rather than comparing URLs.profilePictureUrl points to. When the member displays a photo frame (see openToWork and hiring), these are sizes of the framed picture, like profilePictureUrl.Absent — not empty, not null — when the member has no photo of their own. Not returned for organization records (entityType: "Company").Read the size from width and height, never from the URL: the size written in the URL path is the size that was requested, and it can differ from the file served (a path reading 800_800 can serve a 500×500 image).Image URLs are signed and stop working after an expiry date the source sets, carried in their e= query parameter. We do not control that date. Download an image if you need to keep it, rather than storing its URL.profilePictureUrls, with the same caveats: read width and height rather than the URL, and don’t store the URLs. Banners are not square, so use both.Absent when the member has no banner, in which case coverImageUrl is absent too.current in experiences.It is 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. Use experiences.filter(e => e.ongoing) when you need roles that are actually running today.jobTitle.Note this is 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.null when they don’t. Note that null only means the block is not displayed — the profile may still have an ongoing primary position (see experiences[].current).Show CurrentPosition object
Show CurrentPosition object
urn:li:fsd_profilePosition:(ACoAA…,2839633222). Matches experiences[].positionUrn, so you can join back to the full experience entry.experiences.null when they don’t.Show CurrentSchool object
Show CurrentSchool object
urn:li:fsd_profileEducation:(ACoAA…,363452424). Matches educations[].educationUrn.urn:li:fsd_school:<id>, e.g. “42867”. Distinct from companyId.topVoice: a profile can have one without the
other, so do not treat either as a substitute for the other.true when the profile carries a recognised-voice badge.Absent — not false — when it does not, which is the case for the
large majority of profiles. Treat an absent key as falsy. It also means the
badge was not confirmed either way, so the key is never a guarantee that a
check was performed.The badge’s display label is deliberately not returned: the source serves it
translated into the reading session’s language, so it is not a stable
property of the person.id/profileId, which carry the urn:li:fsd_profile:… form.hiring and openToWork are never both true.true: a regular profile whose headline or summary mentions that the member has passed away returns false. Memorialized accounts are rare, so a typical sample may contain none.openToWork — a member can be open to work without an open profile, and vice versa — and not the same thing as premium: some members without a premium subscription are reachable this way too. Present (true/false) on person profiles in almost every response.An absent openProfile means unknown, never false. On a small share of calls the value cannot be determined; the key is then omitted and partial.sections includes "openProfile", and requesting the profile again normally returns it. A memorialized account (inRemembrance: true) always returns false, since nobody can message it. openProfile is the only status boolean that can be absent on a person profile: creator, influencer, premium, isVerified, openToWork, hiring and inRemembrance are always true or false. None of them are returned for organization records (entityType: "Company").month and a day. The year is included only when the member shares it, which is rare, so don’t rely on getting an age from it. Example: { "month": 7, "day": 4 }.creatorInfo.website, the single link a creator pins to their profile.https://www.linkedin.com/in/williamhgates/partial object naming it. Absence of partial means
the list is complete.Show Experience object
Show Experience object
true across the whole response, and it is false for everyone whose designated role has already ended.This is a designation, not a date test. To find every role that is still running, use ongoing.dateRange ends in "Present". Always present.Independent of current: any number of experiences can be ongoing, and someone holding four concurrent roles has four. An entry the member saved with no dates at all is false rather than assumed ongoing.const currentRoles = profile.experiences.filter((e) => e.ongoing);
urn:li:fsd_profilePosition:(ACoAA…,2839633222). Join key for the top-level currentPosition.positionUrn.positionGroupUrn were held back to back at that employer, and sit next to each other in experiences.A member who leaves an employer and later returns has two stints there: two different positionGroupUrn values carrying the same company.companyId. Group by positionGroupUrn to rebuild the grouping the profile shows; grouping by companyId would merge the two stints and hide the gap between them.Treat it as an opaque identifier. It is consistent within one response, but the same stint is not guaranteed to carry the same value on a later fetch, so don’t use it as a key across fetches. Omitted in the rare case the grouping is not available.positionGroupUrn, in the spirit of companyId and geoId. It is a 40-character hexadecimal string, not a number. Only meaningful together with the profile it came from, so never use it on its own."Barcelona, Cataluña, España"). Its language is not guaranteed and is not necessarily the member’s own: the source localises this caption per request. Use geoId/geoUrn rather than this string whenever you need a stable value, or to normalise or group locations. See Profile languages.locationName, with the same language caveat."urn:li:fsd_geo:107025191". Language-independent — the right key to join or group on.geoUrn, e.g. "107025191".{"es_ES": "Barcelona, Cataluña, España"}. Most members supply only their own.fullProfile=true. Where the role was performed: "On-site", "Hybrid" or "Remote", always one of these three English values.Present only on roles where the member stated it, which is often a minority: roughly a third of the roles on one profile we measured. Absent means unknown, never on-site: the member did not say, or the value could not be read or attributed to this exact role with certainty. It is never guessed.Not the same thing as employmentType (“Full-time”, “Part-time”, “Freelance”…), which says on what terms the role was held, not where."3 yrs 1 mo", "5 mos"). Both endpoints are counted, and an ongoing
role runs to today. Omitted when the entry has no start date.- The employer has a professional page —
companycarriesurl,logo,companyIdandurnalongsidename. - The member typed an employer that has no page —
companyis present withnameonly. The employer is still named; there is simply no page to link to. - The member saved the entry with no employer at all —
nameis""andcompanyis omitted.employmentType(e.g."Self-employed","Freelance") usually carries the meaning in that case. An emptynametherefore means “no employer entered”, never “employer has no page”.
Show Education object
Show Education object
true.dateRange reads "2022", not "2022 - Present"."Nature Club, LTS, Elocution". Omitted when left blank.urn:li:fsd_profileEducation:(ACoAA…,363452424). Join key for the top-level currentSchool.educationUrn.description, which stays the synthesized degree + field string.["EDUCATION", "SCIENCE_AND_TECHNOLOGY"]). Empty when
the member lists none.Show Skill object
Show Skill object
Show Certification object
Show Certification object
Jun 2018). When the credential also expires, this string carries both dates (Jun 2018 - Jun 2026) for backward compatibility — read expirationDate for the expiry on its own.Jun 2026). Omitted when it does not expire.organizationName, kept for backward compatibilityissuedDate, kept for backward compatibilityShow Recommendation object
Show Recommendation object
2014-03-03T12:27:23.403Z). Omitted when the source carries no timestamp.createdAt when it was never edited; a recommendation edited years later keeps its original createdAt.recommendations: an empty array means they wrote none, while an absent key means this section could not be fetched (and partial will name it).Note the named person is the recipient here, whereas in recommendations it is the author. That is why the field names differ rather than being reused.Show RecommendationGiven object
Show RecommendationGiven object
2014-03-03T12:27:23.403Z). Omitted when the source carries no timestamp.createdAt when it was never edited; a recommendation edited years later keeps its original createdAt.Show Publication object
Show Publication object
Sep 2021{ year, month?, day? }, when a finer date than month is availableShow Project object
Show Project object
"Apr 2018 - Mar 2019" or "2014 - 2014". Empty string when the member gave no dates.startDate / endDate, same shape as on experiencesexperiences[].positionUrn.educations[].educationUrn.Show Patent object
Show Patent object
"us"). Free text, not a controlled vocabulary.Jan 2017. Omitted while pending.Dec 2024issuedDate structured as { year, month?, day? }filedDate structured as { year, month?, day? }Show Honor object
Show Honor object
Oct 2018. A single date — an award has no end.experiences[].positionUrn.educations[].educationUrn.Show Organization object
Show Organization object
"2015 - Jun 2016". Empty string when no dates were given.startDate / endDateexperiences[].positionUrn when attached to a roleeducations[].educationUrn when attached to a schoolvolunteerCauses, which is only the list of causes they say they care about.Show VolunteerExperience object
Show VolunteerExperience object
experiences[].name"EDUCATION". Omitted when the member did not set one."Mar 2014 - Present". Empty string when no dates were given.startDate / endDateexperiences[].company, so companyId can be passed straight to the company endpoint.fullProfile=true. What the member has verified.An empty array means the panel was read and the member has verified nothing. An absent key means the option was not requested, or the panel could not be read, in which case partial.sections names verifications — so an absent key is never a silent “nothing verified”.isVerified stays the plain boolean available on every call and is not derived from this array: a member can show the badge while this panel cannot be read.Show Verification object
Show Verification object
"IDENTITY", "WORKPLACE" or "EDUCATIONAL_INSTITUTION".Absent when the category could not be recognized. The panel is rendered in a natural language, and rather than guess a category from unfamiliar wording the field is left out and label still carries the original text. Key your logic on this field and treat its absence as “unknown category”, not as “no verification”."Identity" or "Identité". Useful for display and for the cases where type is absent. The language can vary between calls, so do not key logic on it."Verification performed with a government-issued ID in August 2024". Free text in a natural language, so no date is parsed out of it. Absent when the panel shows no explanation.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, in which case partial.sections names relatedProfiles. The source chooses the list, and two calls are not guaranteed to return the same suggestions.Show RelatedProfile object
Show RelatedProfile object
profileUrlOrUrn on this endpointhttps://www.linkedin.com/in/jane-doe/profilePictureUrls. Omitted when no photo is shown."Information Technology & Services", "Public Relations & Communications". Omitted when they list none.Note this uses the industry vocabulary the profile page itself displays, which is not the same list as the industry field on the company endpoint — don’t join the two.industry, e.g. "urn:li:fsd_industry:96"."es_ES", "en_US".It does not by itself tell you which language the free text beside it is in — see Profile languages. For language-independent values use the identifier fields (geoUrn, industryUrn, companyId).["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.Profile languages
A member can publish the same profile in several languages. The source stores one version per language and does not translate between them.For the free-text fields (title, description, and role titles inside experiences) the API returns:- the English version, when the member published one;
- otherwise the version in their own
primaryLocale.
titleLocalized and descriptionLocalized, so you can select a specific language without a second request:{
"title": "Business Engineer | B2B Development & Strategy",
"primaryLocale": "fr_FR",
"supportedLocales": ["fr_FR", "en_US"],
"titleLocalized": {
"fr_FR": "Ingénieur d'affaires | Relation client & fidélisation",
"en_US": "Business Engineer | B2B Development & Strategy"
}
}
experiences (locationName, geoLocationName) are not covered by this rule — the source renders them per request and its own language labelling for them is unreliable. Use geoId / geoUrn whenever you need to normalise or group locations."Person" for a member profile."Company" when an organization identifier was passed to this endpoint: for backward compatibility a company, school or showcase URL is accepted here and returns a reduced record (organization name in firstName, tagline in title, empty experiences/educations). Prefer GET /api/v1/company for organizations — it returns the full record.Show Partial object
Show Partial object
["experiences"]. The possible values:- An array that came back shorter than the member’s real list:
experiences,educations,skills,certifications,languages,testScores,publications,projects,patents,honors,organizations,courses,volunteerExperiences. - A best-effort field that could not be fetched, or only in part, on this call:
recommendationsandrecommendationsGiven(absent, or shorter than the member’s real list),joinDate,birthDate,websitesandopenProfile(absent).joinDate,birthDateandwebsitescome from the same read, so they are listed together. When"birthDate"is listed, the birthday could not be read on this call; when it is not, the member’s birthday was not visible to us. - With
fullProfile=trueonly:relatedProfiles, when the experience page could not be read;workplaceType, when some or all roles could not be checked for one (it is a field of each experience, not a top-level one); andverifications, when the profile-details panel could not be read.
experienceGroups, which counts stints, because that is the unit the source reports. A stint is one continuous period at one employer, so this is neither a count of roles nor a count of distinct employers: a member who left an employer and came back counts it twice. See experiences[].positionGroupUrn.{
"partial": {
"sections": ["experiences"],
"totals": { "experienceGroups": 132 }
}
}
Contributor object
Shared bypublications[].authors, projects[].contributors and patents[].inventors.
profileUrlOrUrn on this endpointRate 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:| Header | Meaning |
|---|---|
X-RateLimit-Limit | Your plan’s requests per second |
X-RateLimit-Cost | Units this endpoint consumes (1 for /profile, with or without fullProfile=true) |
X-RateLimit-Remaining | Units still free in the current window, capped at your per-second limit |
X-RateLimit-Reset | Unix seconds at which the next unit frees up |
X-Credits-Remaining | Total credits left (subscription + pay as you go) |
X-Credits-Subscription-Remaining | Credits left on your plan allowance |
X-Credits-Payg-Remaining | Pay-as-you-go credits left |
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
curl -X GET "https://api.fetchin.io/api/v1/profile?profileUrlOrUrn=https://www.linkedin.com/in/williamhgates" \
-H "X-API-Key: your-api-key-here"
const response = await fetch(
'https://api.fetchin.io/api/v1/profile?profileUrlOrUrn=https://www.linkedin.com/in/williamhgates',
{
headers: {
'X-API-Key': 'your-api-key-here'
}
}
);
const profile = await response.json();
console.log(profile);
import requests
headers = {
'X-API-Key': 'your-api-key-here'
}
params = {
'profileUrlOrUrn': 'https://www.linkedin.com/in/williamhgates'
}
response = requests.get(
'https://api.fetchin.io/api/v1/profile',
headers=headers,
params=params
)
profile = response.json()
print(profile)
<?php
$apiKey = 'your-api-key-here';
$profileUrl = 'https://www.linkedin.com/in/williamhgates';
$url = "https://api.fetchin.io/api/v1/profile?profileUrlOrUrn=" . urlencode($profileUrl);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-API-Key: ' . $apiKey
]);
$response = curl_exec($ch);
$profile = json_decode($response, true);
curl_close($ch);
print_r($profile);
?>
Example Response
{
"id": "urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"firstName": "Bill",
"lastName": "Gates",
"title": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"description": "Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft. Voracious reader. Avid traveler. Active blogger.",
"location": "Seattle, Washington, United States",
"profilePictureUrl": "https://media.licdn.com/dms/image/...",
"profilePictureUrls": [
{ "url": "https://media.licdn.com/dms/image/...", "width": 100, "height": 100 },
{ "url": "https://media.licdn.com/dms/image/...", "width": 200, "height": 200 },
{ "url": "https://media.licdn.com/dms/image/...", "width": 400, "height": 400 },
{ "url": "https://media.licdn.com/dms/image/...", "width": 800, "height": 800 }
],
"coverImageUrl": "https://media.licdn.com/dms/image/...",
"publicIdentifier": "williamhgates",
"profileId": "ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc",
"countryCode": "US",
"geoLocationName": "Seattle, Washington, United States",
"geoCountryName": "United States",
"geoUrn": "urn:li:fsd_geo:104116203",
"connectionType": "OUT_OF_NETWORK",
"creatorInfo": {
"hashTags": ["#books", "#climatechange", "#healthcare", "#innovation", "#sustainability"],
"website": "https://gatesnot.es/tgn"
},
"jobTitle": "Co-chair",
"companyName": "Gates Foundation",
"companyPublicId": "gates-foundation",
"companyLinkedinUrl": "https://www.linkedin.com/company/gates-foundation/",
"currentPosition": {
"positionUrn": "urn:li:fsd_profilePosition:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,392598211)",
"title": "Co-chair",
"name": "Gates Foundation",
"companyId": "8736",
"companyUrn": "urn:li:fsd_company:8736",
"publicIdentifier": "gates-foundation",
"url": "https://www.linkedin.com/company/gates-foundation/"
},
"currentSchool": null,
"followerCount": 40076104,
"connectionsCount": 8,
"creator": true,
"influencer": true,
"premium": true,
"isVerified": false,
"memberId": "251749025",
"openToWork": false,
"hiring": false,
"inRemembrance": false,
"openProfile": false,
"joinDate": { "month": 5, "year": 2013 },
"url": "https://www.linkedin.com/in/williamhgates/",
"pronoun": "he/him",
"experiences": [
{
"name": "Gates Foundation",
"jobTitle": "Co-chair",
"description": "",
"dateRange": "2000 - Present",
"current": true,
"positionUrn": "urn:li:fsd_profilePosition:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,392598211)",
"timePeriod": {
"startDate": { "year": 2000 },
"endDate": null
},
"company": {
"url": "https://www.linkedin.com/company/gates-foundation/",
"name": "Gates Foundation",
"logo": "https://media.licdn.com/dms/image/...",
"companyId": "8736",
"urn": "urn:li:fsd_company:8736"
}
},
{
"name": "Microsoft",
"jobTitle": "Co-founder",
"description": "",
"dateRange": "1975 - Present",
"current": false,
"positionUrn": "urn:li:fsd_profilePosition:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,392599749)",
"timePeriod": {
"startDate": { "year": 1975 },
"endDate": null
},
"company": {
"url": "https://www.linkedin.com/company/microsoft/",
"name": "Microsoft",
"logo": "https://media.licdn.com/dms/image/...",
"companyId": "1035",
"urn": "urn:li:fsd_company:1035"
}
}
],
"educations": [
{
"name": "Harvard University",
"description": "",
"dateRange": "1973 - 1975",
"current": false,
"educationUrn": "urn:li:fsd_profileEducation:(ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc,157656829)",
"grade": "3.9/4.0",
"details": "Studied mathematics and computer science before leaving to co-found Microsoft.",
"schoolLogo": "https://media.licdn.com/dms/image/...",
"schoolUrl": "https://www.linkedin.com/school/harvard-university/",
"timePeriod": {
"startDate": { "year": 1973 },
"endDate": { "year": 1975 }
}
}
],
"skills": [],
"languages": [],
"certifications": [],
"recommendations": [
{
"caption": "Chairman and CEO at Microsoft",
"description": "Bill's clarity of thought and depth of curiosity are unmatched. Every conversation with him leaves you thinking bigger.",
"authorFullname": "Satya Nadella",
"authorUrl": "https://www.linkedin.com/in/satyanadella/",
"createdAt": "2014-03-03T12:27:23.403Z",
"lastModifiedAt": "2014-03-03T14:13:56.101Z"
}
],
"testScores": [
{
"name": "TOEIC",
"score": "990",
"date": "Jun 2018"
}
],
"volunteerCauses": ["EDUCATION", "SCIENCE_AND_TECHNOLOGY"]
}
firstName holds the organization name, title its tagline, and
experiences/educations are empty./api/v1/company instead for the full
organization record.fullProfile=true has no effect on an organization, which has no experience
page, and the call costs 1 credit.{
"error": "Missing profileUrlOrUrn parameter",
"code": "MISSING_PARAMETER"
}
{
"error": "Invalid API key",
"code": "INVALID_API_KEY"
}
{
"error": "LinkedIn profile not found",
"code": "PROFILE_NOT_FOUND"
}
{
"error": "Quota exceeded. Upgrade your plan or wait for renewal.",
"code": "QUOTA_EXHAUSTED",
"details": {
"creditsRemaining": 0,
"subscriptionCreditsRemaining": 0,
"paygCreditsRemaining": 0,
"buyCreditsUrl": "https://fetchin.io/credits"
}
}
{
"error": "Internal server error",
"code": "INTERNAL_ERROR"
}
{
"error": "Service temporarily unable to serve this request. Please retry.",
"code": "SERVICE_UNAVAILABLE"
}
Errors
See Error Handling for the full list of error codes and recommended handling.400MISSING_PARAMETER/INVALID_PARAMETER/INVALID_URN401INVALID_API_KEY404PROFILE_NOT_FOUND402QUOTA_EXHAUSTED429RATE_LIMITED500INTERNAL_ERROR503SERVICE_UNAVAILABLE
Notes
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.Use Cases
Lead enrichment
Recruitment
Research
Verification
Authorizations
Query Parameters
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.
"urn:li:fsd_profile:ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc"
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
Profile URN (unique identifier)
"urn:li:fsd_profile:ACoAAABCDEF"
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.
Present and true only when lastName is an initial because the member restricts it. Absent otherwise, never false.
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.
title in each language the member published, keyed by locale ("fr_FR", "en_US").
Show child attributes
Show child attributes
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.
description in each language the member published, keyed by locale.
Show child attributes
Show child attributes
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.
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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Volunteer causes listed on the profile
Professional skills listed on the profile. Complete list, returned in the same single call as the rest of the profile.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Profile banner/background image URL
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.
Show child attributes
Show child attributes
Public identifier (slug)
Member identifier
ISO country code
Full geographic location string
Country name
Geo URN
Relationship to the authenticated account
Creator mode information
Show child attributes
Show child attributes
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.
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.
Current company public identifier slug
Current company profile URL
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).
Show child attributes
Show child attributes
Explicit "education" block from the top of the profile page. Object when the member displays it, null when they don't.
Show child attributes
Show child attributes
Number of followers
Number of connections
Whether Creator mode is enabled
Whether the profile carries the platform's long-standing editorial recognition. Distinct from topVoice: a profile can have one without the other.
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.
Whether the profile has Premium
Whether the profile has a verification badge
Numeric internal member id (e.g. "251749025"). Distinct from id/profileId, which carry the urn:li:fsd_profile:… form.
"251749025"
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.
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.
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.
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.
Approximate account creation date (month + year).
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
{ "month": 7, "day": 4 }
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.
Show child attributes
Show child attributes
Canonical public URL of the professional profile page
"https://www.linkedin.com/in/williamhgates/"
Publicly displayed pronouns (e.g. "she/her"). Omitted when the member doesn't display pronouns.
"she/her"
Recommendations received by the member. Best-effort: omitted when this section could not be fetched, empty array when the member has none.
Show child attributes
Show child attributes
Test scores listed on the profile
Show child attributes
Show child attributes
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.
Stable identifier for industry, e.g. "urn:li:fsd_industry:96".
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.
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.
"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.
Person, Company Publications listed on the profile, in display order.
Show child attributes
Show child attributes
Projects listed on the profile, in display order.
Show child attributes
Show child attributes
Patents listed on the profile, in display order.
Show child attributes
Show child attributes
Honors and awards listed on the profile, in display order.
Show child attributes
Show child attributes
Organizations the member belongs to, in display order.
Show child attributes
Show child attributes
Courses listed on the profile, in display order.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes