Skip to main content
POST
https://api.crustdata.com
/
batch
/
person
/
enrich
Submit a batch person enrichment job
curl --request POST \
  --url https://api.crustdata.com/batch/person/enrich \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'x-api-version: <x-api-version>' \
  --data '
{
  "professional_network_profile_urls": [
    "https://www.linkedin.com/in/dvdhsu/"
  ],
  "fields": [
    "basic_profile.name",
    "basic_profile.headline",
    "basic_profile.current_title"
  ]
}
'
{ "batch_id": "22f80b2b-e5bd-480b-86cc-29f79dc6c821", "status": "pending", "entity": "person", "action": "enrich", "identifier_count": 1, "entities_requested": 1, "status_url": "/batch/22f80b2b-e5bd-480b-86cc-29f79dc6c821" }

Authorizations

Authorization
string
header
required

API key passed as a Bearer token in the Authorization header.

Headers

x-api-version
enum<string>
default:2025-11-01
required

API version to use. Batch job submission requires 2025-11-01; requests without this header are rejected with 400.

Available options:
2025-11-01
Example:

"2025-11-01"

Body

application/json

Exactly one person identifier type, plus optional field selection, webhook, and chunking options.

Request body for a batch person enrichment job. Provide exactly one identifier type — professional_network_profile_urls or business_emails. Providing none, or more than one, returns 400. Each identifier list may also be sent as a single comma-separated string.

professional_network_profile_urls

Person profile URLs to enrich. Maximum 10,000 identifiers per job — larger submissions are rejected with 400.

Example:
["https://www.linkedin.com/in/dvdhsu/"]
business_emails

Business email addresses to enrich. Maximum 10,000 identifiers per job — larger submissions are rejected with 400.

Example:
["jane.doe@example.com"]
fields

Optional list of dotted field paths to include in each person record (also accepted as a single comma-separated string). When omitted, the default basic_profile and social_handles field sets are returned; requested fields are returned in addition to the defaults. An unsupported value returns 400 with the full list of selectable fields in metadata.available_fields. The selectable fields are the same as the non-batch /person/enrich endpoint.

Example:
[
  "basic_profile.name",
  "basic_profile.headline"
]
webhook_url
string<uri>

Optional URL that receives a POST notification when the job finishes, so you do not have to poll.

Example:

"https://example.com/webhooks/crustdata-batch"

chunk_size
integer
default:100

Optional internal processing chunk size (number of identifiers per processing unit). Values outside 10-1000 return 400.

Required range: 10 <= x <= 1000
Example:

100

Response

Batch job accepted for processing

Returned immediately when a batch job is accepted. No data is returned at submit time — poll status_url for progress and download links.

batch_id
string<uuid>
required

Unique ID of the batch job. Use it to poll GET /batch/{batch_id}.

Example:

"53ab686b-c054-496b-8baf-baff5ecc85cf"

status
enum<string>
required

Initial job status. Always pending at submit time.

Available options:
pending
Example:

"pending"

entity
enum<string>
required

Entity type the job operates on.

Available options:
company,
person
Example:

"company"

action
enum<string>
required

Internal action name for the job. Live endpoints report enrich_live / search_live.

Available options:
enrich,
enrich_live,
search,
search_live
Example:

"enrich"

identifier_count
integer
required

Number of identifiers submitted. Search jobs always report 1 (the query).

Example:

2

entities_requested
integer
required

Number of entities the job was asked to produce. For enrich jobs this equals identifier_count; for search jobs it is 1 until results are known.

Example:

2

status_url
string
required

Relative URL to poll for the job status (GET /batch/{batch_id}).

Example:

"/batch/53ab686b-c054-496b-8baf-baff5ecc85cf"