# Update Contact

PATCH /api/v2/projects/{projectId}/crm/contacts/{contactDistinctId}

Updates a contact's properties. Properties are merged, so omitted ones keep their current values. Functionally the same as Upsert Contact for a contact that already exists; use this when you want the call to be explicitly an update.

## Request

- projectId: string, path, required — ID of the project that owns the contact.
- contactDistinctId: string, path, required — Distinct ID of the contact to update.
- changes: object, required — Fields to change. Properties are merged rather than replaced, so omitted properties keep their current values.
  - properties: object, required — Properties to merge. Custom keys are allowed; omitted keys are left unchanged.
    - age: number
    - avatar: string
    - birthday: string
    - createdAt: string
    - description: string
    - displayName: string
    - email: value
    - firstName: string
    - gender: string
    - id: string
    - lastName: string
    - name: string
    - phone: string
    - title: string
    - username: string
    - website: string
  - anonymousId: string — Anonymous ID of the browser session this write came from, used to stitch pre-identify events to the contact. Generated when omitted.
  - email: string
  - toDelete: boolean — Marks the contact for deletion instead of writing properties. Prefer the Delete Contact endpoint.

## Response

- 200: Successful response
  - createdAt: string, required
  - distinctId: string, required
  - id: string, required
  - projectId: string, required
  - properties: object, required
    - $_emailScoreActions: string
    - $_toDelete: boolean
    - $browser: string
    - $browserVersion: string
    - $city: string
    - $continent: string
    - $country: string
    - $countryCode: string
    - $device: string
    - $emailScore: number
    - $emailValidated: boolean
    - $emailValidationResult: string
    - $id: string
    - $initialReferrer: string
    - $initialReferringDomain: string
    - $initialUtmCampaign: string
    - $initialUtmContent: string
    - $initialUtmMedium: string
    - $initialUtmSource: string
    - $initialUtmTerm: string
    - $ip: string
    - $lastEmailValidatedAt: string
    - $lastIdentifiedAt: string
    - $lastSeen: string
    - …
  - toDelete: boolean, required
  - updatedAt: string, required
  - email: string
- 400: Invalid input data
- 401: Authorization not provided
- 403: Insufficient access
- 404: Not found
- 500: Internal server error
