> ## Documentation Index
> Fetch the complete documentation index at: https://docs.conversion.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Syncing Contacts from Hightouch

> Connect Hightouch to Conversion and create or update contacts from your Hightouch models.

Use Hightouch to create and update contacts in Conversion. Set up an **HTTP Request** destination, map your contact fields, and choose how often to sync.

<Note>
  For help syncing audience memberships from Hightouch, contact our team for setup details.
</Note>

## Before you begin

Make sure you have:

* **A Conversion API key.** Generate one from **Settings → API Keys**. See [API](/product-docs/workspace-settings/integrations/api).
* **A Hightouch model** with one row per contact, a unique primary key, and an email column.
* **Permission to create destinations and syncs** in Hightouch.
* **Contact fields in Conversion** for any attributes you want to send. Use [List Fields](/api-reference/list-fields) to find their writable field keys.

## Connect Hightouch to Conversion

<Steps>
  <Step title="Create the destination">
    In Hightouch, go to **Destinations → Add destination**, select **HTTP Request**, and name it **Conversion**.

    | Setting                | Value                                      |
    | :--------------------- | :----------------------------------------- |
    | Base URL               | `https://pub-api.conversion.ai`            |
    | Header: `X-API-Key`    | Your Conversion API key; select **Secret** |
    | Header: `Content-Type` | `application/json`                         |

    Save the destination. You can reuse it for contact and [event syncs](/product-docs/sync/hightouch/sending-events) to the same Conversion workspace.
  </Step>

  <Step title="Create a contact sync">
    Create a sync using your contact model and the **Conversion** destination.

    Enable **Rows added** and **Rows changed**. Configure both triggers with these settings:

    | Setting          | Value                                        |
    | :--------------- | :------------------------------------------- |
    | Method           | `POST`                                       |
    | Endpoint path    | `/api/v2/contacts`                           |
    | Rows per request | A single row                                 |
    | Payload          | JSON, using multiple columns from your model |

    Leave **Rows removed** disabled to keep contacts in Conversion when they leave the source model.
  </Step>

  <Step title="Map contact fields">
    Map your email column to `email`. Optionally map an object column containing contact attributes to `fields`. The keys inside `fields` must match Conversion field keys.

    For example, your mappings could produce:

    ```json theme={null}
    {
      "email": "jane@example.com",
      "fields": {
        "first_name": "Jane",
        "last_name": "Smith"
      }
    }
    ```

    Hightouch generates one request per contact using your mappings. Conversion creates contacts with new emails and updates matching contacts with the fields you send.

    <Tip>
      If your attributes are separate columns, use **Create an object** to group them under `fields`. This [inline mapping feature](https://hightouch.com/docs/syncs/mapping-data#inline-mapping) requires Hightouch enablement. If it is unavailable, ask your data team to provide an object column.
    </Tip>
  </Step>

  <Step title="Choose a schedule">
    Configure the initial run to send existing rows if you want to import your current contacts. Choose a sync schedule and enable retries for failed rows.

    On subsequent runs, Hightouch sends new contacts and changes to existing contacts.
  </Step>
</Steps>

## Test the connection

Run the sync with a small set of contacts. Check for rejected rows in Hightouch and confirm the contacts and fields in Conversion. Change one field in your source and run again to check that the contact is updated.

## How contacts are updated

Conversion matches contacts by email. Fields you send overwrite existing values by default; omitted fields are left unchanged. To fill only empty fields, set `preserveExistingFields` to `true`.

To change an existing contact's email, identify it with its `cnvContactId`. See [Upsert Contact](/api-reference/upsert-contact) for the full request options.
