Skip to content
View as Markdown

Update a contact

Updates an existing contact's name, email, note, or custom metadata. The contact's phone number cannot be changed. Returns 404 if the contact does not belong to your account.

POST/update-external-contactBearer token

At least one of firstName, lastName, email, customFields, or note must be present. A request carrying only contactId returns 400. The phone number cannot be changed.

Request body

contactIdstringRequired
The contact id, as returned by the create or list endpoints.
firstNamestring
New first name for the contact.
lastNamestring
New last name for the contact.
emailstring
New email address for the contact.
notestring
Free-form note stored on the contact.
customFieldsobject
Replaces the entire stored customFields object — fetch the current contact and merge client-side to preserve existing keys. Plain object only; max 10,000 characters when JSON-serialized.
How customFields is validated
Three distinct 400 bodies come out of the same check, on every endpoint that accepts customFields: customFields must be a JSON object of key/value pairs when the value is not a plain object, customFields must be a JSON-serializable object when it contains something that cannot be stringified, and customFields JSON exceeds maximum length of 10000 characters past the size cap. That cap counts characters of serialized JSON, not bytes — non-ASCII values reach it later than their byte size suggests.
customFields is replaced, not merged
Sending customFields on an update overwrites the entire stored object. To add or change one key, fetch the contact first, merge on your side, and send the full object back.
API reference