Skip to main content
The Person APIs help you answer practical questions about people: Who are the decision-makers at a target company? What does this person’s professional background look like? Can I find people by name, title, location, or employer? Can I resolve a person from a LinkedIn URL or business email? There are four core endpoints, each designed for a different step in your workflow.
APIWhat it doesBest for
SearchFind people matching structured filtersProspecting, talent sourcing, market mapping
EnrichGet a detailed profile from a LinkedIn URL or emailOutreach prep, due diligence, profile building
IdentifyResolve a person from a LinkedIn URL or email (lightweight)CRM deduplication, lead routing, entity resolution
AutocompleteDiscover valid field values for search filtersBuilding filter dropdowns, validating filter inputs

At a glance

SearchAutocompleteEnrichIdentify
Endpoint/person/search/person/search/autocomplete/person/enrich/person/identify
Data sourceCrustdata indexedCrustdata indexedCrustdata indexedCrustdata indexed
PurposeFind people by filtersDiscover valid filter valuesGet full person profileMatch partial info to a person
Filter syntax{ "field": "dotpath", "type": "op", "value": ... }Optional filters paramN/AN/A
PaginationCursor-based
Field selectionfields = dot-pathsfields = dot-paths or section groupsfields = dot-paths or section groups
Error codes400, 401, 403, 500400, 401, 500400, 401, 403, 404, 500400, 401, 403, 404, 500

Before you start

You need:
  • A Crustdata API key
  • A terminal with curl (or any HTTP client)
  • The required header: x-api-version: 2025-11-01
All requests use Bearer token authentication and require the API version header:
--header 'authorization: Bearer YOUR_API_KEY'
--header 'x-api-version: 2025-11-01'
Replace YOUR_API_KEY in each example with your actual API key.
Convention used in these docs: Information labeled “OpenAPI contract” reflects the formal API specification. Information labeled “Current platform behavior” (such as rate limits, credit costs, and max page ranges) describes observed behavior that may change. See the API reference for the formal OpenAPI spec.

Quickstart: enrich a person from a LinkedIn URL

The fastest way to get started is to enrich a person from their LinkedIn profile URL. This single request returns the full person profile from the Crustdata cache.
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/abhilashchowdhary"
    ]
  }'
Response trimmed for clarity. The full response includes employment history, education, skills, contact information, and more.
The response is an array — one entry per identifier you submitted:
  • matched_on — the input you sent (https://www.linkedin.com/in/abhilashchowdhary).
  • match_type — which identifier type was used (professional_network_profile_url or business_email).
  • confidence_score — how confident the match is (1.0 = exact match).
  • person_data — the full person profile, including basic_profile, experience, education, skills, social_handles, and more.

Which API should you start with?

If you want to…Start with
Find people by name, title, company, or locationSearch
Get full profile details for a known LinkedIn URLEnrich
Reverse-lookup a person from a business emailEnrich
Quickly resolve a person without full enrichmentIdentify
Discover valid filter values before building search queriesAutocomplete
Build a list of decision-makers at target companiesSearch

Common workflows

  1. Discovery — Start with Autocomplete to find valid filter values (e.g., title variations), then Search to build your list, then Enrich the top matches for full profiles.
  2. Data cleanup — Use Enrich with business_emails to reverse-lookup LinkedIn profiles and fill in missing professional context from CRM imports.
  3. Lead routingEnrich incoming LinkedIn URLs to get a stable person profile, then Search for similar people at the same company or with the same title.

Error handling

All Person API endpoints return structured errors. The exact status codes vary by endpoint:
StatusMeaningApplies to
400Invalid request (bad field, wrong operator, malformed filters)All endpoints
401Invalid or missing API keyAll endpoints
403Permission denied or insufficient creditsSearch, Enrich, Identify
404No data found (per spec)Enrich, Identify
500Internal server errorAll endpoints
Error response format:
{
    "error": {
        "type": "invalid_request",
        "message": "Unsupported filter field: 'current_title'. Supported fields: ['basic_profile.name', 'basic_profile.headline', ...]",
        "metadata": []
    }
}
For 401, the format is simpler: {"message": "Invalid API key in request"}.

No-match behavior

EndpointNo matches foundAction
Search200 with empty profiles: []Broaden filters or check with Autocomplete
Enrich200 with empty matches: []Try a different identifier type
Identify200 with empty matches: []Try a different identifier
Autocomplete200 with empty suggestions: []Try a broader query
The OpenAPI spec defines 404 for Enrich and Identify, but current behavior typically returns 200 with empty matches. Handle both.

Retry guidance

StatusRetry?Action
400NoFix the request
401NoCheck API key
403NoCheck permissions/credits
404NoTry different identifier
500YesExponential backoff (1s, 2s, 4s)

Terminology reference

These are the most common terms used across the Person APIs:
You sayAPI request fieldUsed in
LinkedIn profile URLprofessional_network_profile_urlsEnrich, Identify
Business emailbusiness_emailsEnrich, Identify
Person namebasic_profile.name (filter field)Search, Autocomplete
Job titleexperience.employment_details.current.title (filter field)Search, Autocomplete
Current companyexperience.employment_details.current.company_name (filter field)Search, Autocomplete
Headlinebasic_profile.headline (filter field)Search, Autocomplete
Locationbasic_profile.location (filter field)Search
Search uses dot-path field names like experience.employment_details.current.title. Use Autocomplete to discover exact values for indexed Search filters before you build queries.

Common footguns

MistakeFix
Using linkedin_profile_urls in EnrichThe correct field is professional_network_profile_urls.
Using column in Search filtersThe correct key is field (e.g., "field": "basic_profile.name").
Mixing identifier types in EnrichSend one type per request: either professional_network_profile_urls or business_emails.
Using current_title as a filter field in SearchUse the full dot-path: experience.employment_details.current.title.
Omitting fields in SearchReturns all fields per person — very large payloads. Always specify fields in production.
Expecting results wrapper in Enrich responseEnrich returns a top-level array, not { "results": [...] }. Identify wraps in { "results": [...] }.

Next steps

  • Person Search — find people by name, title, company, location, and more with advanced filters.
  • Person Autocomplete — discover valid filter values before building queries.
  • Person Enrich — get detailed profiles from LinkedIn URLs or business emails, with batch support.
  • Person Identify — resolve partial person info to a known entity.
  • Person Examples — ready-to-copy workflow patterns.