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
contactIdstringRequiredThe contact id, as returned by the create or list endpoints.
firstNamestringNew first name for the contact.
lastNamestringNew last name for the contact.
emailstringNew email address for the contact.
notestringFree-form note stored on the contact.
customFieldsobjectReplaces 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.