Create Contact

highlevel.create_contact
ActionCRM & salesconnection required

Calls the HighLevel API with the connection's credentials.

Create a contact in the connection's sub-account.

Connection

Required
Yes — the node will not save without one
Auth type
OAuth 2.0
Providers
HighLevel
Secret shape
{"client_id": "…", "client_secret": "…", "refresh_token": "…"} for a marketplace app, or {"access_token": "…"} for a Private Integration Token
Config it needs
location_id, user_type, base_url
Resolved by
config.connection_id, else node.connection_id

Configuration

22 fields, none required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.

FieldTypeRequiredDefaultConstraintsExample
first_name
Stored on the contact in HighLevel; blank leaves it unset.
stringNo———
last_name
Stored on the contact in HighLevel; blank leaves it unset.
stringNo———
name
Full name, when you do not have the parts.
stringNo———
email
Email address.
stringNo—email format—
phone
Phone number in E.164, e.g. +15558675309.
stringNo———
address1
Street address.
stringNo———
city
Stored on the contact in HighLevel; blank leaves it unset.
stringNo———
state
State or region.
stringNo———
postal_code
Postal or ZIP code.
stringNo———
country
Two-letter country code, e.g. US.
stringNo———
website
Absolute http(s) URL to store; blank leaves it unset.
stringNo———
timezone
IANA timezone, e.g. America/Chicago.
stringNo———
source
Where the contact came from.
stringNo———
assigned_to
User id the contact is assigned to.
stringNo———
date_of_birth
Date of birth, YYYY-MM-DD.
stringNo—matches \d{4}-\d{2}-\d{2}2026-01-31
dnd
Mark the contact Do-Not-Disturb across every channel.
booleanNo———
custom_fields
HighLevel's customFields list, as JSON — one entry per field, each with the field's id (or key) and its value.
arrayNo—array of object—
tags
Tags to set on the contact, as a list, a JSON array or a comma-separated string.
arrayNo—array of string—
fields
Any other contact body field HighLevel accepts, as JSON. Merged last, so it wins over the fields above.
objectNo———
company_name
Company the contact belongs to.
stringNo———
gender
Gender, as HighLevel records it.
stringNo———
location_id
Sub-account (location) id to act on instead of the connection's own.
stringNo———

Example configuration

Every value below is the contract’s own example or default — nothing invented.

{
  "date_of_birth": "2026-01-31"
}

Output

One shape.

result

FieldTypeExample
id
The contact id.
string—
locationId
The sub-account the contact belongs to.
string—
firstName
Given name.
string—
lastName
Family name.
string—
name
Full name as HighLevel stores it.
string—
email
Email address.
string—
phone
Phone number.
string—
companyName
Company name.
string—
source
Where the contact came from.
string—
assignedTo
User id the contact is assigned to.
string—
tags
Tag names on the contact.
array—
customFields
Custom-field values, each with its id.
array—
dateAdded
When the contact was created (ISO-8601).
string—
dateUpdated
When the contact last changed (ISO-8601).
string—
{
  "assignedTo": "",
  "companyName": "",
  "customFields": [],
  "dateAdded": "",
  "dateUpdated": "",
  "email": "",
  "firstName": "",
  "id": "",
  "lastName": "",
  "locationId": "",
  "name": "",
  "phone": "",
  "source": "",
  "tags": []
}

Notes

  • Scoped to the connection's location_id (the sub-account) unless the node overrides it.
  • HighLevel refuses a second contact with the same email or phone number; use highlevel.upsert_contact when the record may already exist.

See Create Contact run in a workflow.

In a technical demo we add the HighLevel connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.