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

# Update contacts

> Update existing contacts in your CRM

<Card title="Your Implementation Required" icon="triangle-exclamation" color="#f59e0b">
  This endpoint must be implemented on **your server**
</Card>

Enginy calls this endpoint to update contacts that were previously synced. This includes regular field updates and **engagement field updates** from campaigns.

## Request

<ParamField body="contacts" type="array" required>
  Array of contact objects to update
</ParamField>

### Contact Object

<ParamField body="crmId" type="string" required>
  Your CRM's ID for this contact (from previous sync)
</ParamField>

<ParamField body="email" type="string">
  Updated email address
</ParamField>

<ParamField body="firstName" type="string">
  Updated first name
</ParamField>

<ParamField body="[engagement fields]" type="string">
  Campaign engagement fields (user-configurable names)
</ParamField>

<RequestExample>
  ```json theme={null}
  {
    "contacts": [
      {
        "crmId": "contact_8f3k2j",
        "email": "sarah.chen@techstartup.io",
        "firstName": "Sarah",
        "genesy_engagement_status": "Message Replied (2/3) - LINKEDIN",
        "genesy_sequence_status": "Replied"
      }
    ]
  }
  ```
</RequestExample>

## Response

<ResponseField name="results" type="array" required>
  Array of update results
</ResponseField>

<ResponseField name="results[].crmId" type="string" required>
  The contact's CRM ID
</ResponseField>

<ResponseField name="results[].success" type="boolean" required>
  Whether the update succeeded
</ResponseField>

<ResponseExample>
  ```json theme={null}
  {
    "results": [
      {
        "crmId": "contact_8f3k2j",
        "success": true
      }
    ]
  }
  ```
</ResponseExample>

## Engagement Fields

When contacts engage with campaigns, Enginy sends updates with fields like:

| Field                      | Example                            | Description     |
| -------------------------- | ---------------------------------- | --------------- |
| `campaignEngagementStatus` | `Message Replied (2/3) - LINKEDIN` | Current status  |
| `campaignSequenceStatus`   | `Replied`                          | Sequence status |
| `campaignOpens`            | `5`                                | Email opens     |
| `campaignClicks`           | `2`                                | Link clicks     |

<Info>Field names are user-configurable. Your CRM should store **any** field, not just known ones.</Info>
