People search by prompt

12 min read

Describe the people you want in plain language and get full profiles back, with the filters we read from your prompt.

POST

Introduction

The People Search by prompt endpoint takes one sentence, such as VP Sales at software companies with 51 to 200 employees in Paris, reads it into People search filters, runs that search and returns the matching full profiles. You do not build the filters yourself: the response tells you which ones were applied, in data.interpretation.

Every result is a complete profile, the same shape People search returns, with the same cursor pagination. Results are drawn from our cache-based search index. This endpoint never triggers a live fetch.

Use it when the request comes from a person typing what they want, or when you prefer not to map criteria to filter names. To control every filter yourself, use People search.

Authorization

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

Request body

prompt string required
Plain-language description of the people to find, in any language. At least 3 characters and at most 1000 tokens
cursor string
Opaque cursor returned as metadata.nextCursor; request the next page with the same prompt
perPage number
Profiles per page (1 to 100, default 25)

Prompt length: the 1000 token limit is about 4000 characters of English text. It is counted conservatively: four plain ASCII characters count as one token, and every other character (an accented letter, a non-Latin script) counts as one token on its own. A longer prompt returns HTTP 422 with error.code INVALID_PROMPT and costs 0 credits.

No filters: the filters come from the prompt, so the request takes no search filter. Any other field, such as location or currentSeniority, returns HTTP 422 with error.code PROMPT_FILTERS_NOT_SUPPORTED and the offending fields in error.details.fields, and costs 0 credits. A filter is refused rather than ignored, because an ignored filter would return results you did not ask for. Describe it in the prompt instead, or send explicit filters to People search.

What a prompt can express

A prompt is read into these People search filters:

What you describe Filters it becomes
A current or past job title, to include or exclude currentPositionTitle, positionTitle and their exclude... counterparts
A current or past company, to include or exclude currentCompanyName, companyName and their exclude... counterparts
An industry currentCompanyIndustry, companyIndustry, excludeCompanyIndustry, from the industry list
A company size currentCompanyEmployeeCountRange
A place location (country, region, city or area)
A career length or an audience size totalExperienceMonths, followersCount
A person’s name or headline keywords firstName, lastName, headline
Open to work, currently employed, Premium, verified isOpenToWork, isCurrentlyEmployed, isPremium, isVerified
How recent the data must be maxDataAgeDate

Job titles and company names are matched as written, with the same token-based matching as People search, so write a title the way it appears on profiles. A seniority word such as VP or Director is matched inside the job title: the position taxonomy filters (currentFunction, currentSubFunction, currentSeniority and experience) are not read from a prompt yet. To filter on them, use People search.

Anything the prompt asks for that no filter covers, such as skills, schools or spoken languages, is left out of the search and reported in data.interpretation.warnings, so you can see what the results do not take into account.

Pagination and credits

People search by prompt uses cursor pagination, like People search. Each response returns up to perPage profiles (1 to 100, default 25) and a metadata.nextCursor value. To get the following page, send the same prompt again with that value as cursor; nextCursor is null on the last page. The cursor is opaque: send it back unchanged, without parsing or altering it. There is no page parameter, and perPage may change from one page to the next.

The cursor does not expire, and a long pause between two pages is fine: the next page picks up where the previous one stopped. If profiles were refreshed in the meantime, one of them can occasionally repeat or be skipped at the page boundary. What a cursor needs is the same filters. A prompt keeps the filters it was first read into for 24 hours in your workspace, so resending it unchanged, from any of your API keys, always runs the same search. Spaces and line breaks do not count as a change. If you edit the prompt, or come back after 24 hours, the prompt is read again, and a cursor sent with filters other than the ones that produced it returns HTTP 400 and costs 0 credits: start again from the first page, without cursor.

perPage above 100 returns HTTP 422 with error.code PAGINATION_LIMIT_EXCEEDED, and a perPage that is not a whole number returns HTTP 422 with error.code INVALID_PAGINATION.

People search by prompt costs 1 credit per page for the search itself, plus 1 credit per profile delivered. The search credit is charged on every page, including when no profile matches. Compliance-blocked profiles are removed before the response and are not billed. A page that returns 25 profiles costs 26 credits, and a page that returns no profile costs 1 credit. A request refused before the search runs, for any of the reasons listed under Errors, costs 0 credits. Lower perPage to control how many credits a single request can spend.

Tip: data.interpretation.filters is a valid People search body. Send it to the free People search count endpoint to know how many people match in total, or to People search to adjust a filter by hand.

Errors

Every error below answers before the search runs, and costs 0 credits. When the prompt was read, error.details.interpretation carries the filters and warnings it produced, so you can see why it could not run.

HTTP error.code What happened What to do
422 INVALID_PROMPT prompt is missing, is not a string, is shorter than 3 characters or longer than 1000 tokens Send a prompt within the limits
422 PROMPT_FILTERS_NOT_SUPPORTED The body carries a field other than prompt, cursor and perPage. error.details.fields lists them Describe those criteria in the prompt, or use People search
422 NO_FILTERS_INTERPRETED No filter could be read from the prompt, and a search without filters would scan the whole database. error.details.interpretation.warnings says what was not understood Name a job title, a company, a place or an industry
422 PROMPT_FILTERS_REJECTED The filters read from the prompt cannot run together, for example the same title both included and excluded. error.details.errors lists each problem with its field, as in Search filter validation Rephrase the prompt, or use People search
422 INVALID_PAGINATION, PAGINATION_LIMIT_EXCEEDED perPage is not a whole number, or is above 100 Send a perPage from 1 to 100
400 REQUEST_ERROR The cursor does not belong to the filters the prompt was read into (Invalid or expired cursor) Start again from the first page, without cursor
502 PROMPT_INTERPRETATION_FAILED The prompt could not be read this time Retry, or rephrase the prompt
504 PROMPT_INTERPRETATION_TIMEOUT Reading the prompt took too long Retry with backoff
503 PROMPT_SEARCH_UNAVAILABLE Search by prompt is temporarily unavailable Retry later, or use People search with explicit filters

Response structure

Note: This endpoint uses a nested envelope. The top-level V2 data field wraps an inner search payload that contains the actual results array (data.data), the pagination info (data.metadata) and the filters read from the prompt (data.interpretation). See the example response for the exact shape.

success boolean
true if the request was processed successfully
error null
Always null on success
data.dataobject[]
Full profiles returned for this page, wrapped under data.data in the envelope. Empty array if no match. Each item is the same full profile shape as the Profile endpoint; the table below lists its main fields.
Show child attributesHide child attributes
id string
Reverse Contact person id (prs_...)
publicId string
Social public identifier (the /in/xxx slug)
memberId string | null
Upstream member identifier when available
linkedinUrl string
Full Social profile URL
firstName string | null
First name
lastName string | null
Last name
headline string | null
Profile headline
summary string | null
Profile summary
isOpenToWork boolean
Whether the profile is flagged open to work
hasPremium boolean
Whether the profile has Social Premium
hasVerificationBadge boolean
Whether the profile has a verification badge
photoUrl string | null
Profile photo URL
creationDate string | null
When the profile was created (ISO 8601)
followersCount number | null
Follower count
connectionsCount number | null
Connection count
currentPosition object | null
Current job position (how it is chosen)
experience array
Professional experiences, same shape as currentPosition
education array
Education history
skills string[]
Skills listed on the profile
languages array
Spoken languages
certifications array
Professional certifications
recommendations array
Received recommendations
locationobject
Geographic location (null if unknown)
Show child attributesHide child attributes
city string | null
City
state string | null
State or region
country string | null
Country name
countryCode string | null
ISO country code (e.g. "US")
rawLocation string | null
Raw location string as displayed on the profile
currentPositionobject
Current job position (null if no current position)
Show child attributesHide child attributes
title string | null
Job title
description string | null
Position description
contractType string | null
Contract type
companyName string | null
Company name
companyLinkedinId string | null
Company Social identifier
companyUrl string | null
Company Social URL
companyLocation string | null
Company location
companyLogoUrl string | null
Company logo URL
startEndDate object | null
Period boundaries (DateRange)
data.metadataobject
Pagination metadata wrapped under data.metadata in the envelope.
Show child attributesHide child attributes
perPage number
Profiles requested per page
count number
Profiles returned in this page. Use People search count with data.interpretation.filters for the total matching set
nextCursor string | null
Opaque cursor for the next page, null on the last page. Send it with the same prompt
data.interpretationobject
What the prompt was read into, the same on every page of a prompt.
Show child attributesHide child attributes
filters object
The People search filters applied, keyed like the People search request body
warnings string[]
What the prompt asked for that the search does not apply, such as a skill or a school. Empty when everything was applied
quotasobject
Credits and rate limit usage after this request
Show child attributesHide child attributes
creditsConsumed number
Credits consumed by this request: 1 for the search plus 1 per profile delivered
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 (not to be confused with data.metadata which is pagination)
Show child attributesHide child attributes
requestId string
Unique identifier for this request
executionTimeMs number
Total execution time in milliseconds

Previous

People lookalike

Next

Profile