Skip to main content
POST
Search for people

Authorizations

Authorization
string
header
required

Account API key passed in the Authorization header

Body

application/json
canonical_job_titles_excludes_ids
string[] | null

Canonical job title IDs to exclude

canonical_job_titles_includes_ids
string[] | null

Canonical job title IDs to include

company_headcounts
string[] | null

Company headcount band codes (single letter). A=self-employed, B=1-10, C=11-50, D=51-200, E=201-500, F=501-1000, G=1001-5000, H=5001-10000, I=10001+.

Example:
company_hq_countries
string[] | null

Company HQ country codes

Example:
company_linkedin_ids
string[] | null

LinkedIn company IDs to filter by

Example:
countries
string[] | null

Country codes to filter by

Example:
country_excludes
string[] | null

Country codes to exclude. Narrows a search rather than describing one, so it cannot be the only filter sent.

Example:
cursor
string

Deprecated. Ignored by the server. Use next_cursor.

first_name
string

Filter by first name

Example:

"Elliot"

industry_excludes_ids
string[] | null

Industry IDs to exclude.

Resolve via Search industries and pass the returned id.

Example:
industry_includes_ids
string[] | null

Industry IDs to include.

Resolve via Search industries and pass the returned id.

Example:
job_titles_excludes
string[] | null

Job titles to exclude

Example:
job_titles_includes
string[] | null

Job titles to include

Example:
keywords
string

Free-text search over the whole profile: headline, About, every role's title and description, skills, education. A boolean expression — uppercase AND / OR, double quotes around phrases, parentheses for grouping, implicit AND between bare words — passed through to LinkedIn as written. Honored or the search fails: when no configured provider supports profile keywords, the request returns 503 rather than a page that ignores the expression.

Example:

"\"supply chain\" AND SAP"

last_name
string

Filter by last name

Example:

"Alderson"

next_cursor
string

Opaque pagination token returned by the previous response's next_cursor. Pass it back unchanged to fetch the next page. Omit on first-page calls. Invalid or expired cursors return 400.

persona_id
string

Search using one of your saved personas, which supplies the job titles, countries and seniority bands behind it. List them via List personas.

Any filter you also send explicitly overrides the persona's value for that field; combine it with company_linkedin_ids to search a persona within specific companies. Mutually exclusive with prompt. One persona per call — to search several, call once per persona.

Example:

"b3c6f5e2-1234-4abc-9def-0123456789ab"

profile_languages
string[] | null

Languages the person's LinkedIn profile is written in (ISO 639-1: en, fr, de, es, it, nl, pt), ORed. The language of the profile, not of the person. Include only: a language cannot be excluded. Omitted, the persona's languages apply when a persona is given.

Example:
prompt
string

Free-text search prompt (e.g. 'CTOs at fintech startups in France'). Mutually exclusive with filter fields.

Example:

"Head of Sales at AI startups in France"

provider
enum<string>

Run the search on one specific people-search source, with no fallback to another. Omit to let Tamtam choose, which is the default and falls back when a source is unavailable.

endor does not support keywords: a search carrying them is refused with a 400 rather than run without them. It also ignores years_of_experience.

Read on the first page only. Later pages always stay on the source that served the first, since next_cursor belongs to it.

Available options:
endor,
bespin
Example:

"endor"

recently_changed_jobs
boolean

Only include people who recently changed jobs

Example:

true

seniority_excludes
string[] | null
deprecated

Deprecated and IGNORED. There is no exclude form: the filter keeps the bands you ask for plus everyone it cannot classify, which an exclude list cannot express. Use seniority_includes.

seniority_includes
string[] | null

Seniority bands to keep, derived from each person's job title. Allowed values: 'Owner / Partner', 'CXO', 'Vice President', 'Director', 'Experienced Manager', 'Senior', 'Entry Level', 'In Training'. A person whose title carries no seniority signal is kept rather than dropped, so this narrows results without discarding the unlabelled. 'Entry Level Manager' is accepted and behaves as 'Experienced Manager'; 'Strategic' is accepted and has no effect.

Example:
use_persona_ai_extension
boolean

Whether this search widens the persona with Tamtam's AI extension of it: extra job titles inferred from the roles that actually convert for you, held outside the persona's own definition so they never appear in it.

Omit to use whatever the persona is set to — the default, and what the app itself does. Send false to search only the job titles written on the persona; the extension is recomputed periodically, so this is the setting that makes a search reproducible. Send true to widen even when the persona has the extension switched off. Sending true has no effect on a persona for which no extension has been computed yet.

Requires persona_id.

Example:

false

years_of_experience
string[] | null

Refinement hint forwarded to the underlying provider. Allowed values: 'Less than 1 year', '1 to 2 years', '3 to 5 years', '6 to 10 years', 'More than 10'. Best-effort — not all providers honor this field, and matches that ignore it may still be returned.

Example:

Response

OK

dropped_by_seniority
integer<int64>
required

How many people this page's seniority_includes filter removed. Always 0 when seniority_includes is not sent.

Example:

7

has_more
boolean
required

True when more pages can be fetched by passing next_cursor back.

results
object[] | null
required

Search results for this page (up to 25)

cursor
string

Deprecated. Mirrors next_cursor. Use next_cursor instead.

filter_reasoning
string

When Prompt is used, explains how the AI interpreted the prompt into filters. Returned on the first page only.

Example:

"Interpreted as Head of Sales, country FR"

job_title_breadth
integer<int64>

How many job titles this search actually ran with, counted after a prompt was interpreted and a persona expanded. Present only when that facet is wide enough that paging the search deep returns people an earlier page already returned; absent otherwise, so its presence is the signal. Sent on every page it applies to.

Example:

18

next_cursor
string

Opaque pagination token. Pass it back unchanged to fetch the next page. Null when there are no more results.

pagination_warning
string

Why paging this search deep costs you people, and how to split it instead. Present exactly when job_title_breadth is, on every page. Prose meant to be read, not matched on: treat its presence as the signal and do not parse it.

Example:

"This search's job-title filter is wide: 18 titles. ..."

total_count
integer<int64>

Total number of matching results. Returned on the first page only.

Example:

132