Skip to main content
POST
/
contacts
/
sync_single_enrich
Synchronous single contact enrichment
curl --request POST \
  --url https://api.prontohq.com/v2/contacts/sync_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"
  ],
  "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": "[email protected]",
"email_status": "valid",
"phones": [
{
"number": "+33612345678",
"type": "mobile"
}
],
"phone_status": "valid",
"custom": {
"hubspot_id": "4447901"
}
}
Enrich a single contact with email and/or phone 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 and/or phone number 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 email addresses only
  • ["phone"] - Find phone numbers only
  • ["email", "phone"] - Find both email and phone (waterfall mode)

Waterfall Enrichment

When you request both email and phone enrichment, our system uses a sophisticated waterfall approach:
  1. Attempts to find the email address from the most reliable providers first
  2. Once email is found, searches for phone numbers using provider prioritization
  3. Returns results as soon as both 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": "[email protected]",
  "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": [
    {
      "number": "+33612345678",
      "type": "mobile"
    }
  ],
  "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": "[email protected]",
  "email_status": "valid",
  "phones": [
    {
      "number": "+33612345678",
      "type": "mobile"
    }
  ],
  "phone_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 with “email”, “phone”, or both
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

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

Your API key

Body

application/json

Contact information for synchronous enrichment

enrichment_type
enum<string>[]
required

Types of enrichment to perform. Can be ["email"], ["phone"], or ["email", "phone"]

Required array length: 1 - 2 elements
Available options:
phone,
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

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
phones
object[]

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

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