---
title: "Update a contact"
method: PUT
path: "/contacts/{id}"
tags: ["contacts"]
---

# Update a contact

`PUT /contacts/{id}`

Updates editable fields on an existing contact. Only fields present in the request body are updated.

To link a contact to an external system, include `system` and `identifier` (and optionally `system_identifier`). If an external identifier already exists for the given `system` + `system_identifier` combination, it will be updated; otherwise a new one is created.

## Path parameters

- `id` string, required

## Request body

- ContactUpdateBody
  - `first_name` string
  - `last_name` string
  - `email` string, email
  - `can_email` boolean
  - `can_email_code` string — Machine-readable code indicating why can_email was changed
  - `can_email_message` string — Human-readable message describing why can_email was changed
  - `options` object — Key-value attributes to merge into the contact's existing options. Input values take precedence; keys not in the request are preserved. Set a key to null to delete just that key. An empty object, null, or non-object value is a no-op — the stored options blob is never wholesale cleared.
  - `system` string — External system name (e.g. 'hubspot'). When provided with `identifier`, upserts an external identifier linking this contact to the external system.
  - `identifier` string — The contact's unique ID in the external system. Required when `system` is provided.
  - `system_identifier` string — Optional qualifier within the external system (e.g. a list ID or portal ID).

## Response `200`

Contact updated

## Other responses

- `400` — Bad request — contact id is required
- `401` — Unauthorized
- `404` — Contact not found

---

[API](https://skmtc.net/rasa/apis/rasa-io-api.md) · [All operations](https://skmtc.net/rasa/apis/rasa-io-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/rasa/rasa-io-api/versions/60891bc551db/schema)
