GoHighLevel Contacts API
Create Contact
/contacts/POST /contacts/ This endpoint takes 50 body fields, requires the contacts.write scope and authenticates with a sub-account (location) token.
Request and authentication
- Method
POST- Full URL
https://services.leadconnectorhq.com/contacts/- 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 imports, prefer `hylo_bulk_upsert_contacts` — it handles create-or-update and runs in parallel server-side.
- Pass `tags` inline here to skip a follow-up add-tags call (saves 1 round-trip per contact).
- Pass `customFields` inline here to skip per-field update-contact-field calls.
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.
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: |
locationIdrequired | string | Example: |
gender | 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 | 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: |
companyName | string | Example: |
assignedTo | string | User's Id Example: |
Response fields
Top-level fields returned on a successful call.
| Name | Type | Description |
|---|---|---|
contact | object | — |
id | string | Example: |
dateAdded | string | Example: |
dateUpdated | string | Example: |
deleted | boolean | Example: |
tags | array | Example: |
type | string | Example: |
customFields | array | — |
locationId | string | Example: |
firstName | string | Example: |
firstNameLowerCase | string | Example: |
fullNameLowerCase | string | Example: |
lastName | string | Example: |
lastNameLowerCase | string | Example: |
email | string | Example: |
emailLowerCase | string | Example: |
bounceEmail | boolean | Example: |
unsubscribeEmail | boolean | 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 | — |
phone | string | Example: |
address1 | string | Example: |
city | string | Example: |
state | string | Example: |
country | string | Example: |
postalCode | string | Example: |
Example request
Copy-paste ready. Swap YOUR_TOKEN for your access token or Private Integration Token.
curl -X POST 'https://services.leadconnectorhq.com/contacts/' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Version: 2021-07-28' \
-H 'Content-Type: application/json' \
-d '{
"locationId": "ve9EPM428h8vShlRW1KT"
}'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 NotePOST /contacts/:contactId/notes
- Create TaskPOST /contacts/:contactId/tasks
- All GoHighLevel Contacts endpointsCategory index
- GoHighLevel API referenceEvery category, webhooks, and OAuth scopes