Retrieve detailed entity profiles by supplying entity IDs and specifying which data domains to include in the response.
Quick Example
{
"entity_type": "person",
"entity_ids": ["123456", "789012"],
"domains": ["name", "email"]
}Input Parameters
| Parameter | Type | Required | Default | Constraints | Description |
|---|---|---|---|---|---|
| entity_type | string | Yes | - | "person" or "business" | Type of entity to enrich |
| entity_ids | array | Conditional | - | Max 200000 (max 10000 when format="none"), string or integer | Entity IDs to enrich. Mutually exclusive with csv_resource_uri |
| csv_resource_uri | string | Conditional | - | workflow:// URI | CSV with entity IDs. Mutually exclusive with entity_ids |
| entity_id_column | string | No | "entity_id" | Column name | Column containing entity IDs (only with csv_resource_uri) |
| offset | number | No | 0 | Integer ≥ 0 | Number of CSV data rows to skip before reading. Use with limit to paginate large CSVs across multiple calls. Only applies to csv_resource_uri; ignored when entity_ids is used |
| limit | number | No | 200000 | 1 ≤ limit ≤ 200000 | Maximum number of CSV data rows to read in this call. Only applies to csv_resource_uri; ignored when entity_ids is used |
| domains | string[] | Yes | - | See domain reference below | Domain fields to include in response. Accepts identifier/contact domains and per-entity trait domains. Must be bare values from the allowed set — namespaced forms like social:linkedin are rejected. |
| location | object | No | - | lat/lng/radius/unit | Geospatial filter |
| format | string | No | "none" | "none", "csv", "json", "jsonl" | Export format |
| workflow_id | string | No | - | Valid UUID | Workflow session identifier |
Parameter Details:
entity_type:
- Required. Use
"person"for individual profiles or"business"for company profiles.
entity_ids:
- Array of entity IDs (strings or integers)
- Maximum of 200000 entity IDs per request
- Mutually exclusive with csv_resource_uri
csv_resource_uri:
- Workflow resource URI pointing to a CSV file containing entity IDs
- Use entity_id_column to specify which column contains the IDs (default: "entity_id")
- Mutually exclusive with entity_ids
- The CSV is processed in pages of up to 200,000 rows per call. When more rows remain, the response includes a
next_offsetfield — pass it back asoffseton the next call. The field is omitted on the last page.
domains:
- Controls which data domains are included in the response
- Required parameter - must specify at least one domain
- Domains not applicable to the requested
entity_type(e.g., a business-only domain on apersonlookup) return no data for that domain rather than an error. - Values must be an exact lowercase match from the allowed set; namespaced forms such as
social:linkedinare rejected. Use the baresocialdomain to retrieve all social networks in one request — the network is included in the returned contact JSON. - Unknown values return a validation error that enumerates the full allowed set.
Identifier / contact domains (applicable to both person and business, except as noted):
name- Person or company namesemail- Email addresses (person only)phone- Phone numbersaddress- Physical addressesmaid- Mobile advertising IDs (person only)website- Website / primary domain (business only)social- Social handles for every supported network (the network is included in the returned contact JSON)
Person trait domains (applicable to person):
affinity- Brand and category affinitiescontent- Content consumption patternsdemographic- Age, gender, education, ethnicity, etc.employment- Job and career informationfinancial- Financial status and credithousehold- Household compositionintent- Intent categories and topicsinterest- Interests and hobbieslifestyle- Lifestyle choicespolitical- Political datapurchase- Purchase history
Business trait domains (applicable to business):
about- Company overview and descriptionappstore- Mobile app presence and metadatadigital- Digital footprint signalsfunding- Funding rounds and investorshiring- Open roles and hiring signalsindustry- Industry classificationtechstack- Technologies in use
location:
- Optional geospatial filter using H3 with dynamic resolution selection (3-9 based on radius)
- Only returns entities within the specified radius
- Example:
{ "latitude": 37.7749, "longitude": -122.4194, "radius": 5, "unit": "km" }
Request Schema:
interface EntityEnrichParams {
entity_type: "person" | "business";
entity_ids?: Array<string | number>;
csv_resource_uri?: string;
entity_id_column?: string;
offset?: number;
limit?: number;
domains: string[];
location?: {
latitude: number;
longitude: number;
radius: number;
unit: "km" | "miles";
};
format?: "none" | "csv" | "json" | "jsonl";
workflow_id?: string;
}Output Format
Success Response:
{
profiles: Array<{
entity_id: string;
metadata?: {
quality_score?: number;
last_modified?: string;
};
domains: {
names?: Array<{ first_name?: string; last_name?: string; full_name?: string; middle_name?: string; prefix?: string; suffix?: string; company_name?: string; }>;
addresses?: Array<{ address?: string; city?: string; state?: string; zip5?: string; zip4?: string; }>;
phones?: Array<{ phone?: string; phone_type?: string; mobile_carrier?: string; on_do_not_call?: boolean; is_work_phone?: boolean; }>;
emails?: Array<{ email?: string; opted_in?: boolean; }>;
maids?: Array<{ device_id: string; device_id_type?: string; opted_out?: boolean; }>;
websites?: Array<{ website?: string; domain?: string; domain_tld?: string; quality_score?: string | number; }>;
linkedin?: Array<{ linkedin_url?: string; linkedin_url_id?: string; quality_score?: string | number; }>;
[key: string]: any;
};
}>,
missing_entity_ids?: string[],
export?: {
url: string;
format: string;
rows: number;
size_bytes?: number;
expires_at: string;
resource_uri: string;
},
tool_trace_id: string,
workflow_id: string
}Response Fields:
| Field | Type | Description |
|---|---|---|
| profiles | array | Array of entity profiles |
| profiles[].entity_id | string | Unique entity identifier |
| profiles[].metadata | object | Quality scores, timestamps |
| profiles[].domains | object | Domain data (see Contact Metadata) |
| export | object | Export metadata (when format is csv/json/jsonl) |
| export.resource_uri | string | Workflow resource URI for the exported file |
| missing_entity_ids | array | Input entity IDs that produced no profile — no rows in v3.entity for the requested domains, or outside the location radius when one is provided. Omitted when every input matched. |
| next_offset | number | Cursor for the next CSV page when more rows remain. Pass back as offset on the next call. Omitted on the last page and when inline entity_ids were used. |
| tool_trace_id | string | OpenTelemetry trace ID |
| workflow_id | string | Workflow session identifier |
Use missing_entity_ids to distinguish a data-coverage gap from invalid inputs: an ID appearing here is well-formed and was accepted, but no rows were available for the requested view. With a location filter applied, IDs outside the radius are reported as missing alongside IDs absent from v3.entity — both are legitimately absent from the result.
Contact Metadata
All contact domains return rich metadata objects with compliance fields:
| Input Domain | Output Key | Object Fields | Use Case |
|---|---|---|---|
name | names | first_name, last_name, full_name, middle_name, prefix, suffix, company_name | Personalization |
address | addresses | address, city, state, zip5, zip4 | Direct mail |
email | emails | email, opted_in | CAN-SPAM compliance |
phone | phones | phone, phone_type, mobile_carrier, on_do_not_call, is_work_phone | TCPA compliance |
maid | maids | device_id, device_id_type, opted_out | Privacy compliance |
website | websites | website, domain, domain_tld, quality_score | Business web presence |
social | linkedin | linkedin_url, linkedin_url_id, quality_score | Business social |
Example Response:
{
"profiles": [
{
"entity_id": "123456789",
"domains": {
"names": [
{
"first_name": "Jane",
"last_name": "Smith",
"full_name": "Jane Smith"
}
],
"phones": [
{
"phone": "+15551234567",
"phone_type": "cell",
"on_do_not_call": false
}
],
"demographic": {
"age_range": "35-44",
"gender": "female"
}
}
}
],
"tool_trace_id": "a1b2c3d4e5f6",
"workflow_id": "550e8400-e29b-41d4-a716-446655440000"
}Error Handling
Common Errors:
- Both entity_ids and csv_resource_uri provided: "entity_ids and csv_resource_uri are mutually exclusive. Provide one or the other."
- Neither provided: "Either entity_ids or csv_resource_uri must be provided."
- More than 200000 entity IDs: "Maximum 200000 entity IDs allowed"
- More than 10000 entity IDs with format='none': "format='none' supports at most 10000 entity IDs. Received N. Use format='csv', 'json', or 'jsonl' for larger requests."
- Unknown domain value: returns a validation error whose message enumerates every legal domain — the caller should correct the value in one step rather than retry.
Usage Examples
Example 1: Basic entity lookup
{
"entity_type": "person",
"entity_ids": ["123456", "789012"],
"domains": ["name", "email"]
}Example 2: Full profile enrichment
{
"entity_type": "person",
"entity_ids": ["456789"],
"domains": ["name", "email", "phone", "demographic", "lifestyle", "affinity"]
}Example 3: CSV resource input
{
"entity_type": "person",
"csv_resource_uri": "workflow://550e8400-e29b-41d4-a716-446655440000/uploads/entities.csv",
"entity_id_column": "id",
"domains": ["demographic", "interest"]
}Example 4: Location-filtered lookup
{
"entity_type": "person",
"entity_ids": ["111111", "222222", "333333"],
"domains": ["name", "email", "address"],
"location": {
"latitude": 37.7749,
"longitude": -122.4194,
"radius": 10,
"unit": "km"
}
}Example 5: Export to CSV
{
"entity_type": "person",
"entity_ids": ["111111", "222222", "333333"],
"domains": ["email", "phone"],
"format": "csv"
}Example 6: Paginating a large CSV
For CSVs with more than 200,000 rows, paginate using the next_offset cursor returned in the response: pass it back as offset on the next call until the field is omitted (last page). offset, limit, and next_offset only apply on the CSV path; they are ignored when inline entity_ids are used.
{
"entity_type": "person",
"csv_resource_uri": "workflow://550e8400-e29b-41d4-a716-446655440000/uploads/entities.csv",
"entity_id_column": "id",
"offset": 200000,
"limit": 200000,
"domains": ["name", "email"]
}Example 7: Business enrichment with trait domains
{
"entity_type": "business",
"entity_ids": ["112233"],
"domains": ["name", "website", "industry", "funding", "techstack"]
}entity_resolve
Resolve entity identities by matching emails, phones, addresses, MAIDs, websites, or social handles (LinkedIn today). Supports multi-criterion queries with Noisy-OR quality score aggregation.
entity_find
Find entities matching trait criteria and/or location filters with boolean expressions and optional export.