GoHighLevel Contacts API
Update Contact
/contacts/:contactIdPUT /contacts/:contactId This endpoint takes 1 path parameter and 47 body fields, requires the contacts.write scope and authenticates with a sub-account (location) token.
Request and authentication
- Method
PUT- Full URL
https://services.leadconnectorhq.com/contacts/:contactId- Scopes
contacts.write- Token type
- Sub-account (location) token
- Accepted auth
- OAuth Access Token, Private Integration Token
- API version header
Version: 2021-07-28- Schema verified
- 22 June 2026
Notes from the field
- For multi-contact field backfills, use `hylo_bulk_execute_ghl_api` with endpoint_name='contacts/update-contact'.
- Pass `tags` inline to add tags in the same call as the update (skip add-tags).
- For email-only changes, this single call replaces upsert + add-tags.
This endpoint is safe to fan out in parallel, so a batch of records costs roughly one round trip instead of one per record. Hylo's bulk tools do that server-side and retry HighLevel's 429s with back-off.
Path parameters
Substituted into the URL. Required by definition.
| Name | Type | Description |
|---|---|---|
contactIdrequired | string | Example: |
Request body
JSON body fields. Nested objects are shown indented under their parent.
| Name | Type | Description |
|---|---|---|
firstName | string | Example: |
lastName | string | Example: |
name | string | Example: |
email | string | Example: |
phone | string | Example: |
address1 | string | Example: |
city | string | Example: |
state | string | Example: |
postalCode | string | Example: |
website | string | Example: |
timezone | string | Example: |
dnd | boolean | Example: |
dndSettings | object | — |
Call | object | — |
statusrequired | string | One of: |
message | string | — |
code | string | — |
Email | object | — |
statusrequired | string | One of: |
message | string | — |
code | string | — |
SMS | object | — |
statusrequired | string | One of: |
message | string | — |
code | string | — |
WhatsApp | object | — |
statusrequired | string | One of: |
message | string | — |
code | string | — |
GMB | object | — |
statusrequired | string | One of: |
message | string | — |
code | string | — |
FB | object | — |
statusrequired | string | One of: |
message | string | — |
code | string | — |
inboundDndSettings | object | — |
all | object | — |
statusrequired | string | One of: |
message | string | — |
tags | array | This field will overwrite all current tags associated with the contact. To update a tags, it is recommended to use the Add Tag or Remove Tag API instead. Example: |
customFields | array | — |
source | string | Example: |
dateOfBirth | object | The birth date of the contact. Supported formats: YYYY/MM/DD, MM/DD/YYYY, YYYY-MM-DD, MM-DD-YYYY, YYYY.MM.DD, MM.DD.YYYY, YYYY_MM_DD, MM_DD_YYYY Example: |
country | string | Example: |
assignedTo | string | User's Id Example: |
Response fields
Top-level fields returned on a successful call.
| Name | Type | Description |
|---|---|---|
succeded | boolean | Example: |
contact | object | — |
id | string | Example: |
name | string | Example: |
locationId | string | Example: |
firstName | string | Example: |
lastName | string | Example: |
email | string | Example: |
emailLowerCase | string | Example: |
timezone | string | Example: |
companyName | string | Example: |
phone | string | Example: |
dnd | boolean | Example: |
dndSettings | object | — |
Call | object | — |
statusrequired | string | One of: |
message | string | — |
code | string | — |
Email | object | — |
statusrequired | string | One of: |
message | string | — |
code | string | — |
SMS | object | — |
statusrequired | string | One of: |
message | string | — |
code | string | — |
WhatsApp | object | — |
statusrequired | string | One of: |
message | string | — |
code | string | — |
GMB | object | — |
statusrequired | string | One of: |
message | string | — |
code | string | — |
FB | object | — |
statusrequired | string | One of: |
message | string | — |
code | string | — |
type | string | Example: |
source | string | Example: |
assignedTo | string | Example: |
address1 | string | Example: |
city | string | Example: |
state | string | Example: |
country | string | Example: |
postalCode | string | Example: |
website | string | Example: |
tags | array | Example: |
dateOfBirth | string | Example: |
dateAdded | string | Example: |
dateUpdated | string | Example: |
Example request
Copy-paste ready. Swap YOUR_TOKEN for your access token or Private Integration Token, and the sample ID for your own.
curl -X PUT 'https://services.leadconnectorhq.com/contacts/ocQHyuzHvysMo5N5VsXc' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Version: 2021-07-28' \
-H 'Content-Type: application/json' \
-d '{
"firstName": "rosan",
"lastName": "Deo",
"name": "rosan Deo"
}'Skip the schema lookup
Hylo gives your AI agent this schema — and the other 52 documented here — without you looking anything up. Ask in plain English; it picks the endpoint, fills the body, and can run the call against your own sub-account.
More contacts endpoints
- Add Followers ContactPOST /contacts/:contactId/followers
- Add Remove Contact From BusinessPOST /contacts/bulk/business
- Add TagsPOST /contacts/:contactId/tags
- Create AssociationPOST /contacts/bulk/tags/update/:type
- Create ContactPOST /contacts/
- Create NotePOST /contacts/:contactId/notes
- All GoHighLevel Contacts endpointsCategory index
- GoHighLevel API referenceEvery category, webhooks, and OAuth scopes