This page collects recipes for Person Autocomplete.
Each example is a full working request you can copy, paste, and adapt.
For the core walkthrough (quick start, response shape), see
Person Autocomplete. For operators, request
parameters, autocomplete-enabled fields, and errors, see
Autocomplete reference.
Replace YOUR_API_KEY in each example with your actual API key. All
requests require the x-api-version: 2025-11-01 header.
Get the most common values for a field
Pass an empty query to retrieve the top values for the field by frequency.
Useful for seeding filter dropdowns or showing popular options.
curl --request POST \
--url https://api.crustdata.com/person/search/autocomplete \
--header 'authorization: Bearer YOUR_API_KEY' \
--header 'content-type: application/json' \
--header 'x-api-version: 2025-11-01' \
--data '{
"field": "experience.employment_details.current.title",
"query": "",
"limit": 5
}'
Current platform behavior: empty-query autocomplete can return blank
string values when a field has many empty indexed records. Filter those
out in your UI if you do not want a blank option.
Narrow suggestions with filters
Scope the autocomplete to a subset of the dataset with the optional
filters field. The suggestions are then computed against the filtered
population.
filters accepts either a single AutocompleteFilterCondition or a nested
AutocompleteFilterConditionGroup combined with and/or logic.
Use a single AutocompleteFilterCondition to filter on one field — for
example, top “VP” titles among current Google employees.curl --request POST \
--url https://api.crustdata.com/person/search/autocomplete \
--header 'authorization: Bearer YOUR_API_KEY' \
--header 'content-type: application/json' \
--header 'x-api-version: 2025-11-01' \
--data '{
"field": "experience.employment_details.current.title",
"query": "VP",
"limit": 5,
"filters": {
"field": "experience.employment_details.current.company_name",
"type": "=",
"value": "Google"
}
}'
Use an AutocompleteFilterConditionGroup to combine multiple conditions
with op: "and" or op: "or" — for example, top titles matching
"engineer" at Google in the United States.curl --request POST \
--url https://api.crustdata.com/person/search/autocomplete \
--header 'authorization: Bearer YOUR_API_KEY' \
--header 'content-type: application/json' \
--header 'x-api-version: 2025-11-01' \
--data '{
"field": "experience.employment_details.current.title",
"query": "engineer",
"limit": 5,
"filters": {
"op": "and",
"conditions": [
{
"field": "experience.employment_details.current.company_name",
"type": "=",
"value": "Google"
},
{
"field": "basic_profile.location.country",
"type": "=",
"value": "United States"
}
]
}
}'
Groups can be nested — pass another AutocompleteFilterConditionGroup
inside conditions to express arbitrarily complex boolean expressions. Use in or not_in to match any value in a list. Pass a JSON array for
value — a comma-separated string will return a 400.Top engineer titles across the United States, United Kingdom, and Canada:curl --request POST \
--url https://api.crustdata.com/person/search/autocomplete \
--header 'authorization: Bearer YOUR_API_KEY' \
--header 'content-type: application/json' \
--header 'x-api-version: 2025-11-01' \
--data '{
"field": "experience.employment_details.current.title",
"query": "Engineer",
"limit": 5,
"filters": {
"field": "basic_profile.location.country",
"type": "in",
"value": ["United States", "United Kingdom", "Canada"]
}
}'
Top seniority levels excluding the United States and United Kingdom:curl --request POST \
--url https://api.crustdata.com/person/search/autocomplete \
--header 'authorization: Bearer YOUR_API_KEY' \
--header 'content-type: application/json' \
--header 'x-api-version: 2025-11-01' \
--data '{
"field": "experience.employment_details.current.seniority_level",
"query": "",
"limit": 5,
"filters": {
"field": "basic_profile.location.country",
"type": "not_in",
"value": ["United States", "United Kingdom"]
}
}'
Pass numeric values as JSON numbers. Filter value accepts string, number,
integer, or boolean scalars; for in and not_in, use arrays of strings,
numbers, or integers that match the underlying field’s type.curl --request POST \
--url https://api.crustdata.com/person/search/autocomplete \
--header 'authorization: Bearer YOUR_API_KEY' \
--header 'content-type: application/json' \
--header 'x-api-version: 2025-11-01' \
--data '{
"field": "experience.employment_details.current.title",
"query": "",
"limit": 3,
"filters": {
"field": "experience.employment_details.current.company_headcount_latest",
"type": ">",
"value": 10000
}
}'
Full workflow: Autocomplete → Search → Enrich
This is the canonical end-to-end Person API workflow. Autocomplete discovers
the exact title value the Search API expects, Search finds matching people,
and Enrich fills in the details.
Step 1: Discover valid title values
curl --request POST \
--url https://api.crustdata.com/person/search/autocomplete \
--header 'authorization: Bearer YOUR_API_KEY' \
--header 'content-type: application/json' \
--header 'x-api-version: 2025-11-01' \
--data '{"field": "experience.employment_details.current.title", "query": "VP Sales", "limit": 3}'
Extract: Take suggestions[0].value → "VP Sales". Use this exact
string in your Search filter.
If empty: Try a broader query (for example, "VP" instead of
"VP Sales").
Step 2: Search for matching people
curl --request POST \
--url https://api.crustdata.com/person/search \
--header 'authorization: Bearer YOUR_API_KEY' \
--header 'content-type: application/json' \
--header 'x-api-version: 2025-11-01' \
--data '{
"filters": {
"op": "and",
"conditions": [
{"field": "experience.employment_details.current.title", "type": "in", "value": ["VP Sales", "VP of Sales"]},
{"field": "experience.employment_details.current.company_headcount_range", "type": "in", "value": ["51-200", "201-500"]}
]
},
"limit": 3,
"fields": ["basic_profile.name", "experience.employment_details.current.title", "experience.employment_details.current.company_name", "social_handles.professional_network_identifier.profile_url"]
}'
Extract: Take
social_handles.professional_network_identifier.profile_url →
"https://www.linkedin.com/in/janesmith". Pass the profile URL to Enrich.
If empty: Broaden filters or verify values with an earlier autocomplete
call.
Step 3: Enrich the top match
curl --request POST \
--url https://api.crustdata.com/person/enrich \
--header 'authorization: Bearer YOUR_API_KEY' \
--header 'content-type: application/json' \
--header 'x-api-version: 2025-11-01' \
--data '{"professional_network_profile_urls": ["https://www.linkedin.com/in/janesmith"]}'
Result: Full person profile with employment history, education, skills,
contact info, and more. See Person Enrich for the
full response shape.
See Person Search for the full filter grammar.
Next steps