Skip to main content
POST
/
contacts
/
single_enrich
Synchronous single contact enrichment
curl --request POST \
  --url https://api.prontohq.com/v2/contacts/single_enrich \
  --header 'Content-Type: application/json' \
  --header 'X-API-KEY: <api-key>' \
  --data '
{
  "firstname": "Mathieu",
  "lastname": "Brun-Picard",
  "domain": "prontohq.com",
  "company_name": "Pronto",
  "linkedin_url": "https://www.linkedin.com/in/mathieu-brun-picard/",
  "enrichment_type": [
    "email",
    "phone",
    "personal_email"
  ],
  "custom": {
    "hubspot_id": "4447901"
  }
}
'
{
  "enrichment_id": "123e4567-e89b-12d3-a456-426614174000",
  "first_name": "Mathieu",
  "last_name": "Brun-Picard",
  "linkedin_profile_url": "https://www.linkedin.com/in/mathieu-brun-picard/",
  "status": "success",
  "email": "mathieu@prontohq.com",
  "email_status": "valid",
  "phones": [
    "+33612345678"
  ],
  "phone_status": "valid",
  "custom": {
    "hubspot_id": "4447901"
  }
}

Documentation Index

Fetch the complete documentation index at: https://docs.prontohq.com/llms.txt

Use this file to discover all available pages before exploring further.

Enrich a single contact with email, phone, and/or personal email data using our waterfall enrichment system. Unlike the async enrichment endpoint, this endpoint returns results synchronously in the response - no webhook polling required.

Overview

This endpoint performs real-time waterfall enrichment across multiple data providers to find the most accurate email, phone number, and/or personal email for a contact. Results are returned immediately in the API response, making it ideal for interactive applications, Chrome extensions, and real-time workflows.

Rate Limits

  • 50 requests per second per user
This generous rate limit makes it suitable for high-volume interactive use cases while protecting our infrastructure.

Enrichment Types

You can specify which data points you want to enrich by passing the enrichment_type array parameter:
  • ["email"] - Find and validate professional email addresses only
  • ["phone"] - Find phone numbers only
  • ["personal_email"] - Find personal email addresses only (requires user consent — see below)
  • Any combination, e.g. ["email", "phone"], ["email", "personal_email"], or ["email", "phone", "personal_email"]
Requesting personal_email requires the authenticated user to have consented to personal email enrichment in their account settings. If consent is missing, the API responds with 422 Unprocessable Entity and the message "You can't use the personal email enrichment feature without consenting with our terms of use". This consent gate is required for GDPR compliance.Requests including phone or personal_email must include linkedin_url.

Waterfall Enrichment

When you request multiple enrichment types, our system uses a sophisticated waterfall approach:
  1. Attempts to find the professional email from the most reliable providers first
  2. Searches for personal email through dedicated personal-email providers (Pronto, LeadMagic, Airscale)
  3. Searches for phone numbers using provider prioritization
  4. Returns results as soon as all requested data points are found or all providers are exhausted
This approach maximizes data quality while minimizing enrichment time and cost.

Response Format

Success Response

When enrichment succeeds, you’ll receive a 200 response with the enriched data: Email Only:
{
  "enrichment_id": "123e4567-e89b-12d3-a456-426614174000",
  "first_name": "Mathieu",
  "last_name": "Brun-Picard",
  "linkedin_profile_url": "https://www.linkedin.com/in/mathieu-brun-picard/",
  "status": "success",
  "email": "mathieu@prontohq.com",
  "email_status": "valid"
}
Phone Only:
{
  "enrichment_id": "123e4567-e89b-12d3-a456-426614174000",
  "first_name": "Mathieu",
  "last_name": "Brun-Picard",
  "linkedin_profile_url": "https://www.linkedin.com/in/mathieu-brun-picard/",
  "status": "success",
  "phones": [
    "+33612345678"
  ],
  "phone_status": "valid"
}
Email and Phone:
{
  "enrichment_id": "123e4567-e89b-12d3-a456-426614174000",
  "first_name": "Mathieu",
  "last_name": "Brun-Picard",
  "linkedin_profile_url": "https://www.linkedin.com/in/mathieu-brun-picard/",
  "status": "success",
  "email": "mathieu@prontohq.com",
  "email_status": "valid",
  "phones": [
    "+33612345678"
  ],
  "phone_status": "valid"
}
Personal Email Only:
{
  "enrichment_id": "123e4567-e89b-12d3-a456-426614174000",
  "first_name": "Mathieu",
  "last_name": "Brun-Picard",
  "linkedin_profile_url": "https://www.linkedin.com/in/mathieu-brun-picard/",
  "status": "success",
  "personal_email": "mathieu.bp@gmail.com",
  "personal_email_status": "valid"
}

Error Response

When no data is found, the response includes a message and empty data fields:
{
  "enrichment_id": "123e4567-e89b-12d3-a456-426614174000",
  "first_name": "Mathieu",
  "last_name": "Brun-Picard",
  "linkedin_profile_url": "https://www.linkedin.com/in/mathieu-brun-picard/",
  "status": "error",
  "message": "No email or phone found for this profile",
  "email": null,
  "email_status": "N/A",
  "phones": [],
  "phone_status": "not_found"
}

Required Fields

At minimum, you must provide:
  • firstname - Contact’s first name
  • lastname - Contact’s last name
  • enrichment_type - Array containing any combination of "email", "phone", and/or "personal_email"
  • linkedin_url - Required when enrichment_type includes "phone" or "personal_email"
For best results, include as much information as possible:
  • linkedin_url - LinkedIn profile URL (highly recommended for accuracy)
  • domain - Company website domain
  • company_name - Company name
The more context you provide, the higher the accuracy of the enrichment.

Custom Fields

You can include custom fields that will be returned in the response:
{
  "firstname": "Mathieu",
  "lastname": "Brun-Picard",
  "linkedin_url": "https://www.linkedin.com/in/mathieu-brun-picard/",
  "enrichment_type": ["email"],
  "custom": {
    "crm_id": "12345",
    "campaign": "outbound_q1",
    "segment": "enterprise"
  }
}
These custom fields are passed through unchanged and returned in the custom field of the response, making it easy to correlate results with your internal systems.

Email Status Values

The email_status field indicates the validation state of the email:
  • deliverable - Email is deliverable
  • catch-all - Email hasa catch-all status but was validated by our debouncing waterfall
  • N/A - Email enrichment was not requested or no email was found

Personal Email Status Values

The personal_email_status field indicates the validation state of the personal email:
  • valid - Personal email was found and validated
  • invalid - Personal email enrichment ran but the result is not deliverable
  • N/A - Personal email enrichment was not requested or no personal email was found

Phone Status Values

The phone_status field indicates whether valid phone numbers were found:
  • valid - At least one valid phone number found
  • not_found - No phone numbers found or phone enrichment not requested

Pricing

Each enrichment request consumes credits based on the enrichment type requested and the providers used. Check your account credits using the Account Credits endpoint.

Authorizations

X-API-KEY
string
header
required

Body

application/json

Contact information for synchronous enrichment

enrichment_type
enum<string>[]
required

Types of enrichment to perform. Can be any combination of ["email"], ["phone"], and/or ["personal_email"]. Note: "personal_email" requires the user to have consented to personal email enrichment in their account settings. Requests including "personal_email" or "phone" require linkedin_url.

Required array length: 1 - 3 elements
Available options:
phone,
email,
personal_email
firstname
string

First name of the contact

lastname
string

Last name of the contact

company_name
string

Company name of the contact

domain
string

Company domain

linkedin_url
string<uri>

LinkedIn profile URL of the contact

webhook_url
string<uri>

Optional webhook URL to also receive enrichment results

phone_country_codes
string[]

Optional. Restrict phone enrichment to phone numbers from these countries. When omitted, the user's account-level default phone country codes are applied.

ISO 3166-1 alpha-2 country code (e.g. "US", "FR", "GB")

custom
object

Custom fields to include with the enrichment response

Response

Enrichment completed successfully

enrichment_id
string<uuid>

The ID of the enrichment request

first_name
string

The contact's first name

last_name
string

The contact's last name

linkedin_profile_url
string<uri>

The contact's LinkedIn profile URL

status
enum<string>

The status of the enrichment request

Available options:
success,
error
email
string<email>

The enriched email address (present if enrichment_type includes email)

email_status
enum<string>

The validation status of the email (present if enrichment_type includes email)

Available options:
valid,
invalid,
N/A
personal_email
string<email>

The enriched personal email address (present if enrichment_type includes personal_email)

personal_email_status
enum<string>

The validation status of the personal email (present if enrichment_type includes personal_email)

Available options:
valid,
invalid,
N/A
phones
string[]

Array of phone numbers found (present if enrichment_type includes phone)

Phone number in E.164 format

phone_status
enum<string>

The status of phone enrichment (present if enrichment_type includes phone)

Available options:
valid,
not_found
message
string

Error message if enrichment failed

custom
object

Custom fields passed in the request