Enrich profile

8 min read

Get a person's professional profile from any details you have.

POST

Introduction

The Enrich Profile endpoint returns a person’s professional profile from any combination of identifying details. Every input is optional and independent; you only need to provide at least one, and the more fields you include, the more accurate the match.

This endpoint costs 2 credits, charged only when a person is found. Add +1 credit when fullProfile: true and a match is found. A not-found response (404) is always free, even with fullProfile: no credits are consumed.

Authorization

apikey string required
Your API key from the developer dashboard. Pass it via Authorization: Bearer YOUR_API_KEY header.

Request body

All fields are optional and independent. Provide at least one of email, firstName, lastName, companyDomain, or companyName. Any combination works, and the more identifying fields you provide, the more accurate the match.

email string
Professional email address to look up (e.g. [email protected]).
firstName string
First name of the person to look up.
lastName string
Last name of the person to look up.
companyDomain string
Company domain to help disambiguate (e.g. acme.com or https://acme.com).
companyName string
Company name to help disambiguate (e.g. Acme Corp).
fullProfile boolean
Optional, defaults to false. When true and a match is found, returns the full profile (same fields as the corresponding fetch endpoint) for 1 extra credit.

Best practices

Every field you add narrows the search. That is a trade-off, not a free win.

Fewer fields mean a higher match rate, but lower confidence. Sending only firstName: "Pierre" and lastName: "Dupont" will almost always return someone, because there are hundreds of Pierre Dupont. Nothing in that response guarantees it is your Pierre Dupont. In any case, whenever more than one person matches your request, the extra candidates are returned in the response as alternate persons.

More fields mean a lower match rate, but higher confidence. Add companyDomain: "acme.com" and the request only matches if a Pierre Dupont is actually known at Acme. You will get more 404s, and the matches you do get are the right person.

Which side to lean on depends on what a wrong match costs you. For outbound or CRM writes, prefer precision: a wrong profile is worse than no profile. For coverage-oriented work where a human reviews the output, a looser query is fine.

Response structure

The person is returned nested under data.person.

Full profile

Set fullProfile to true to return the same person shape as /v2/fetch/persons when a match is found. The primary data.person then includes full-profile fields such as summary, photoUrl, experience, education, skills, languages, certifications, and more. data.alternativePersons always stays in the light enrich shape.

{
  "email": "[email protected]",
  "fullProfile": true
}

The complete full-profile field reference is documented on the Person Profile endpoint.

If the full profile cannot be assembled for the matched person, the response falls back to the light shape and only the base 2 credits are charged: the extra credit applies only when the full profile is actually delivered. To know which shape you received, check quotas.creditsConsumed (3 for full, 2 for light) or the presence of a full-profile field such as experience.

success boolean
true if the request was processed successfully
error null
Always null on success
dataobject
The response payload (null on error responses)
Show child attributesHide child attributes
personobject
The person profile
Show child attributesHide child attributes
id string
Internal identifier for the person
publicId string
Public profile slug (the /in/xxx part of the URL)
linkedinUrl string
Full profile URL
firstName string
First name
lastName string
Last name
headline string
Profile headline
currentPositionTitle string
Current job title (how it is chosen)
currentCompanyId string
Internal identifier of the current company
currentCompanyName string
Current company name
currentCompanyLinkedinId string
Social identifier of the current company (useful to chain into a company fetch)
updateDate string
When the record was last refreshed (ISO 8601)
locationobject
Geographic location (null if unknown)
Show child attributesHide child attributes
city string
City
state string
State or region
country string
Country name
countryCode string
ISO country code (e.g. "US")
rawLocation string
Raw location string as displayed on the profile (null if unavailable)
alternativePersonsobject[]
Other candidates that matched your input but scored lower than person, ordered best first (up to 9). Empty when the match is unique, which is the typical case when enriching by LinkedIn URL. Alternatives mostly show up when resolving by email or by name and company, where several people can match.
Show child attributesHide child attributes
id string
Internal identifier for the person
publicId string
Public profile slug (the /in/xxx part of the URL)
linkedinUrl string
Full profile URL
firstName string
First name
lastName string
Last name
headline string
Profile headline
currentPositionTitle string
Current job title (how it is chosen)
currentCompanyId string
Always null on alternative candidates
currentCompanyName string
Current company name
currentCompanyLinkedinId string
Social identifier of the current company (useful to chain into a company fetch)
updateDate string
When the record was last refreshed (ISO 8601)
locationobject
Geographic location (null if unknown)
Show child attributesHide child attributes
city string
City
state string
State or region
country string
Country name
countryCode string
ISO country code (e.g. "US")
rawLocation string
Raw location string as displayed on the profile (null if unavailable)
quotasobject
Credits and rate limit usage after this request
Show child attributesHide child attributes
creditsConsumed number
Credits consumed by this request
workspaceobject
Workspace-level limits
Show child attributesHide child attributes
id string
Your workspace identifier
hasUnlimitedCredits boolean
Whether workspace credits are unlimited
allowDailyOvercost boolean
Whether the workspace may exceed its daily cap
creditsobject
Credit balance
Show child attributesHide child attributes
total number
Total credits in your plan
used number
Credits consumed so far
left number
Remaining credits
dailyLimitobject
Daily request limit (null if not configured)
Show child attributesHide child attributes
limit number
Maximum requests per day
used number
Requests made today
left number
Remaining requests today
nextReset string
When the daily window resets (ISO 8601)
minuteRateLimitobject
Per-minute rate limit
Show child attributesHide child attributes
limit number
Maximum requests per minute
used number
Requests made in the current minute
left number
Remaining requests in the current minute
nextReset string
When the minute window resets (ISO 8601)
keyobject
API key-level limits (null when request is from dashboard)
Show child attributesHide child attributes
id string
API key identifier
dailyLimitobject
Daily limit for this key (null if not configured)
Show child attributesHide child attributes
limit number
Maximum requests per day
used number
Requests made today
left number
Remaining requests today
nextReset string
When the daily window resets (ISO 8601)
minuteRateLimitobject
Minute rate limit for this key
Show child attributesHide child attributes
limit number
Maximum requests per minute
used number
Requests made in the current minute
left number
Remaining requests in the current minute
nextReset string
When the minute window resets (ISO 8601)
metadataobject
Request tracking information
Show child attributesHide child attributes
requestId string
Unique identifier for this request
executionTimeMs number
Total execution time in milliseconds

Previous

Migrating from V1 to V2

Next

Enrich company