Person Enrichment
Person Enrichment API endpoint: match records by email, phone, name, social URL, or other identifiers and append 100+ profile data points.
Minimum Requirements
Every request must include at least one of the following:- A primary identifier (any single field is sufficient)
- Name + context (name plus at least one contextual field)
400 Bad Request.
Primary Identifiers
Any one of these fields is enough to look up a person on its own:| Field | Example |
|---|---|
email | jane.doe@example.com |
phone | +15551234567 |
social_url | https://linkedin.com/in/janedoe |
linkedin_id | 123456789 |
legion_id | fdd85569-f0f0-53a9-bc60-089507193c28 |
email_hash | SHA-256, SHA-1, or MD5 hash of normalized email |
Name + Context
When no primary identifier is available, provide a name (first_name, last_name, or full_name) plus at least one contextual field:
| Context | Fields | Example |
|---|---|---|
| Location | city, state, country, postal_code, address | "first_name": "Jane", "last_name": "Doe", "city": "San Francisco", "state": "CA" |
| Company | company | "first_name": "Jane", "last_name": "Doe", "company": "Acme Corp" |
| School | school | "first_name": "Jane", "last_name": "Doe", "school": "Stanford University" |
| Job title | job_title | "first_name": "Jane", "last_name": "Doe", "job_title": "VP of Engineering" |
| Birth date | birth_date | "first_name": "Jane", "last_name": "Doe", "birth_date": "1985" |
URLs and Domains
Thecompany and school fields accept names, website URLs, or social URLs:
Authorizations
Body
Request model for person enrichment. Requires a primary identifier (email, phone, social_url, linkedin_id, legion_id, email_hash) OR name + context (location, company, school, job_title, birth_date).
Email address (will be normalized)
SHA-256 (64 chars), SHA-1 (40 chars), or MD5 (32 chars) hash of normalized email address (for privacy)
Phone number (will be normalized to E.164)
LinkedIn numeric ID
Social profile URL (LinkedIn, Twitter/X, GitHub, Facebook - will be normalized and detected)
Legion ID (exact match)
Full name (will be normalized)
First name (will be normalized)
Last name (will be normalized)
Full address string (will be parsed to extract city, state, postal_code, and country)
City name
State name or code
Country name or code
Postal/ZIP code
Job title
Company name, website, or social URL
School name, website, or social URL
Birth date for matching or narrowing name-based results (YYYY-MM-DD, YYYY-MM, or YYYY). Can be used as name + birth_date lookup or as a qualifier on other name-based combos.
If true, return multiple matches sorted by confidence
Maximum number of results to return when multiple_results=true (default: 2, max: 10)
1 <= x <= 10Minimum match confidence level to include in results: 'high', 'moderate', or 'low'. Matches below this threshold will be filtered out.
If true, format text fields in title case (names, job titles, company names, locations, skills, headlines). Raw fields, IDs, URLs, codes, and confidence fields are excluded.
Comma-separated list of fields that must be present, else the match is filtered out. Supports top-level fields ('work_email,phones'), a non-empty list subfield ('emails.type'), or a subfield equal to a value ('emails.type:personal', 'phones.type:mobile', 'socials.network:linkedin'). Unknown field names or out-of-range enum values return HTTP 400.
Comma-separated list of fields to include in response. If omitted, all fields are returned.
Comma-separated list of fields to exclude from response. Applied after include_fields filter.
If true, pretty-print JSON response with indentation.
Response
Success - person(s) found
Multiple person matches response.
List of matches sorted by confidence (descending). Capped at the request's limit.
For /person/search and /person/discover, the total number of rows matching the query's WHERE clause across the database (not just this page). For /person/enrich, the number of matches found for the input identifier. On search/discover, if the count subquery fails or times out, this falls back to the size of the returned page; the response header Total-Count-Status distinguishes the two cases.