---
title: "Enrich only person contact data from cached dataset"
method: POST
path: "/person/contact/enrich"
tags: ["Person APIs", "Enrich APIs"]
---

# Enrich only person contact data from cached dataset

`POST /person/contact/enrich`

Enrich only the contact data for a person — business emails, personal emails, and phone numbers — using the Crustdata cached dataset.
Provide either a profile URL or a business email. Exactly one identifier type must be provided per request. Supports batch enrichment of up to 25 identifiers at once.

This endpoint mirrors `/person/enrich` but is scoped to contact fields: the only enrichable fields are `contact.business_emails`, `contact.personal_emails`, and `contact.phone_numbers`. Requesting any non-contact field returns a `400` error listing the available contact fields. When `fields` is omitted, all three contact tiers are enriched. Each submitted identifier returns one result entry; an identifier with no contact match returns an empty `matches` array.
<Note>
    Default `rate-limit` is 15 requests per minute. Send an email to [gtm@crustdata.co](mailto:gtm@crustdata.co) to discuss higher limits if needed for your use case.
</Note>

## Headers

- `x-api-version` '2025-11-01', required

## Request body

- union — Request body for /person/contact/enrich. Submit exactly one identifier type per request — professional_network_profile_urls or business_emails — and optionally restrict which contact tiers are enriched.
  - object
    - `professional_network_profile_urls` string[], required — Array of professional-network profile URLs to enrich (max 25).
    - `business_emails` string[] — Array of business emails to look up (max 25).
    - `fields` string[] — Contact tiers to enrich. Only contact fields are accepted: `contact.business_emails`, `contact.personal_emails`, and `contact.phone_numbers`. When omitted, all three tiers are enriched. Requesting any non-contact field returns a `400` error.
  - object
    - `professional_network_profile_urls` string[] — Array of professional-network profile URLs to enrich (max 25).
    - `business_emails` string[], required — Array of business emails to look up (max 25).
    - `fields` string[] — Contact tiers to enrich. Only contact fields are accepted: `contact.business_emails`, `contact.personal_emails`, and `contact.phone_numbers`. When omitted, all three tiers are enriched. Requesting any non-contact field returns a `400` error.

## Response `200`

Enriched person contact data. Returns a top-level array with one entry per submitted identifier; unmatched identifiers return an empty `matches` array.

- PersonContactEnrichResult[] — Response from /person/contact/enrich. Returns a top-level array with one entry per submitted identifier.
  - `matched_on` string — The specific input value this entry corresponds to (a profile URL or a business email).
  - `match_type` 'professional_network_profile_url' | 'business_email' — Which identifier type the input was matched on.
  - `matches` PersonContactEnrichMatch[] — Matching contact records. Empty when no contact data was found for the identifier.
    - `confidence_score` number, float — Confidence that this record matches the submitted identifier, from 0 to 1.
    - `person_data` PersonContactEnrichPerson — Contact-only person record returned by /person/contact/enrich.
      - `crustdata_person_id` integer — Crustdata's stable internal identifier for the person.
      - `contact` PersonContactEnrichContact — Contact data returned by /person/contact/enrich — business emails, personal emails, and phone numbers.
        - `business_emails` object[] — Business email addresses with their deliverability status.
          - `email` string — The business email address.
          - `status` 'deliverable' | 'catch_all' | 'invalid' | 'unknown' — Deliverability status of the email: - `deliverable`: mailbox confirmed to exist and accept mail at this exact address (lowest bounce risk). - `catch_all`: the domain accepts mail for any address, so this specific mailbox can't be confirmed. - `invalid`: mailbox confirmed not to exist or otherwise undeliverable (sending will bounce). - `unknown`: deliverability couldn't be determined, or no status info is available.
        - `personal_emails` object[] — Personal email addresses with their deliverability status.
          - `email` string — The personal email address.
          - `status` 'deliverable' | 'catch_all' | 'invalid' | 'unknown' — Deliverability status of the email: - `deliverable`: mailbox confirmed to exist and accept mail at this exact address (lowest bounce risk). - `catch_all`: the domain accepts mail for any address, so this specific mailbox can't be confirmed. - `invalid`: mailbox confirmed not to exist or otherwise undeliverable (sending will bounce). - `unknown`: deliverability couldn't be determined, or no status info is available.
        - `phone_numbers` string[] — Phone numbers in E.164 format.

## Other responses

- `400` — Invalid request parameters
- `401` — Unauthorized - invalid or missing API key
- `403` — Permission denied or insufficient credits
- `500` — Internal server error

---

[API](https://skmtc.dev/crustdata/apis/batch-api.md) · [All operations](https://skmtc.dev/crustdata/apis/batch-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/crustdata/batch-api/revisions/581689e66ae7/schema)
