Skip to main content
POST
https://api.crustdata.com
/
batch
/
person
/
contact
/
enrich
Submit a batch person contact enrichment job
curl --request POST \
  --url https://api.crustdata.com/batch/person/contact/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": [
    "business_email",
    "personal_contact_info"
  ]
}
'
{ "batch_id": "7e96a0d7-0ea6-463c-8937-dfa59365c2e9", "status": "pending", "entity": "person", "action": "contact_enrich", "identifier_count": 1, "entities_requested": 1, "status_url": "/batch/7e96a0d7-0ea6-463c-8937-dfa59365c2e9" }

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

A list of person profile URLs plus the required contact fields to retrieve, with optional webhook and chunking options.

Request body for a batch person contact enrichment job. professional_network_profile_urls is the only identifier type accepted, and fields is required — it names which contact kinds to retrieve for each profile.

professional_network_profile_urls
required

Person profile URLs to enrich. Maximum 300 identifiers per job — larger submissions are rejected with 400. Also accepted as a single comma-separated string.

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

Required, non-empty list naming which contact kinds to retrieve for each profile (also accepted as a single comma-separated string). An empty value returns 400; any value outside the supported set returns 400 with the full list in metadata.available_fields. personal_contact_info is shorthand for both personal_contact_info.personal_emails and personal_contact_info.phone_numbers.

Example:
["business_email", "personal_contact_info"]
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; the person contact enrichment endpoint reports contact_enrich.

Available options:
enrich,
enrich_live,
contact_enrich,
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"