> ## 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.

# Synchronous Single Contact Enrichment

> Enrich a single contact with email, phone, and/or personal email data and get results instantly

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"]`

<Note>
  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`.
</Note>

### 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:**

```json theme={null}
{
  "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:**

```json theme={null}
{
  "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:**

```json theme={null}
{
  "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:**

```json theme={null}
{
  "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:

```json theme={null}
{
  "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"`

## Recommended Fields

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:

```json theme={null}
{
  "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](/api-reference/endpoints/miscellaneous/account-credits).


## OpenAPI

````yaml sync-enrichments POST /contacts/single_enrich
openapi: 3.0.1
info:
  title: Pronto Sync Enrichment API
  description: Synchronous enrichment endpoints for real-time contact data enrichment
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://api.prontohq.com/v2/
security:
  - defaultApiKey: []
paths:
  /contacts/single_enrich:
    post:
      summary: Synchronous single contact enrichment
      description: >-
        Enriches a single contact with email, phone, and/or personal email data
        and returns results synchronously (no webhook required). Note:
        `personal_email` requires the user to have consented to personal email
        enrichment in their account settings (GDPR-compliant).
      requestBody:
        description: Contact information for synchronous enrichment
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SyncEnrichmentRequest'
            example:
              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'
      responses:
        '200':
          description: Enrichment completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SyncEnrichmentResponse'
              examples:
                email_and_phone_success:
                  summary: Successful email and phone enrichment
                  value:
                    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'
                email_only_success:
                  summary: Successful email enrichment
                  value:
                    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_success:
                  summary: Successful phone enrichment
                  value:
                    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
                personal_email_success:
                  summary: Successful personal email enrichment
                  value:
                    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
                not_found:
                  summary: No email or phone found
                  value:
                    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
        '400':
          description: Bad Request - Invalid enrichment_type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: 400
                message: >-
                  enrichment_type is required as an array: ["email"], ["phone"],
                  ["personal_email"], or combinations
        '422':
          description: >-
            Unprocessable Entity. Returned when `enrichment_type` contains an
            unsupported value, or when `personal_email` is requested but the
            user has not consented to personal email enrichment.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                unsupported_enrichment_type:
                  summary: Unsupported enrichment_type value
                  value:
                    error: 422
                    message: enrichment_type contains unsupported values
                personal_email_consent_missing:
                  summary: Personal email consent missing
                  value:
                    error: 422
                    message: >-
                      You can't use the personal email enrichment feature
                      without consenting with our terms of use
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: 429
                message: 'Too many requests. Rate limit: 50 requests per second'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: 500
                message: An error occurred during enrichment
components:
  schemas:
    SyncEnrichmentRequest:
      type: object
      required:
        - enrichment_type
      properties:
        firstname:
          type: string
          description: First name of the contact
        lastname:
          type: string
          description: Last name of the contact
        company_name:
          type: string
          description: Company name of the contact
        domain:
          type: string
          description: Company domain
        linkedin_url:
          type: string
          format: uri
          description: LinkedIn profile URL of the contact
        webhook_url:
          type: string
          format: uri
          description: Optional webhook URL to also receive enrichment results
        enrichment_type:
          type: array
          minItems: 1
          maxItems: 3
          items:
            type: string
            enum:
              - phone
              - email
              - personal_email
          description: >-
            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`.
        phone_country_codes:
          type: array
          items:
            type: string
            description: ISO 3166-1 alpha-2 country code (e.g. "US", "FR", "GB")
          description: >-
            Optional. Restrict phone enrichment to phone numbers from these
            countries. When omitted, the user's account-level default phone
            country codes are applied.
        custom:
          type: object
          description: Custom fields to include with the enrichment response
          additionalProperties: true
    SyncEnrichmentResponse:
      type: object
      properties:
        enrichment_id:
          type: string
          format: uuid
          description: The ID of the enrichment request
        first_name:
          type: string
          description: The contact's first name
        last_name:
          type: string
          description: The contact's last name
        linkedin_profile_url:
          type: string
          format: uri
          description: The contact's LinkedIn profile URL
        status:
          type: string
          enum:
            - success
            - error
          description: The status of the enrichment request
        email:
          type: string
          format: email
          description: >-
            The enriched email address (present if enrichment_type includes
            email)
        email_status:
          type: string
          enum:
            - valid
            - invalid
            - N/A
          description: >-
            The validation status of the email (present if enrichment_type
            includes email)
        personal_email:
          type: string
          format: email
          description: >-
            The enriched personal email address (present if enrichment_type
            includes personal_email)
        personal_email_status:
          type: string
          enum:
            - valid
            - invalid
            - N/A
          description: >-
            The validation status of the personal email (present if
            enrichment_type includes personal_email)
        phones:
          type: array
          description: >-
            Array of phone numbers found (present if enrichment_type includes
            phone)
          items:
            type: string
            description: Phone number in E.164 format
        phone_status:
          type: string
          enum:
            - valid
            - not_found
          description: >-
            The status of phone enrichment (present if enrichment_type includes
            phone)
        message:
          type: string
          description: Error message if enrichment failed
        custom:
          type: object
          description: Custom fields passed in the request
          additionalProperties: true
    Error:
      required:
        - error
        - message
      type: object
      properties:
        error:
          type: integer
          format: int32
        message:
          type: string
  securitySchemes:
    defaultApiKey:
      type: apiKey
      in: header
      name: X-API-KEY

````