Opportunity & pipeline automation to decrease manual data entry and drive reporting efficiency
Supports multiple pipelines to automate updating opportunities in surgical and non-surgical pipelines
Automate Google review collection after appointments
Automate post-appointment follow-up
Automate patient retention campaigns for specific treatment and service types
Collect data for better patient/client segmentation
Automated birthday campaigns
Patient lifetime value tracking from individual patient charges
Two-way sync to create patients in 4D EMR from Aesthetix CRM
The 4D EMR integration is built on AX Connect, which requires a $99/month per location integration fee paid to Aesthetix CRM.
You must activate the Aesthetix CRM integration inside 4D EMR and share your API credentials with us (see the Activating Your API Credentials section below).
You must activate the integration inside 4D EMR and share your credentials with Aesthetix CRM before the integration can be set up.
Step 1: Go to Practice → Settings → Integrations and click on the Aesthetix CRM tile.

Step 2: Click the Enable button.

Step 3: A Client ID and Client Secret key will be displayed. Copy both keys and email them to Step 3: A Client ID and Client Secret key will be displayed. Copy both keys and email them to [email protected]

Important:
You maintain full control of the integration and can deactivate it at any time by clicking the Disable button.
The Regenerate button changes the Client Secret key. Do not click this unless Aesthetix CRM has specifically told you to do so. Clicking it will reset the key and make the existing integration inoperable.
Contact 4D EMR support at [email protected] with any questions about the API credentials.
The 4D EMR integration is a polling integration, similar to Nextech and ModMed. Every 5 minutes, we poll the 4D EMR API for modifications to appointment statuses and patient charges. When we detect a change, we pull that data in and process it through our workflows.
Because this is polling-based rather than webhook-based, updates typically appear in Aesthetix CRM within 5 to 10 minutes of the action being taken in 4D EMR.
4D EMR is typically used by plastic surgery practices, so the integration is built with dual-pipeline support (surgical and non-surgical) and appointment categorization by default.
What triggers it: An appointment is created or modified to one of the following statuses in 4D EMR (detected every 5 minutes via polling):
Unconfirmed
Confirmed
Rescheduled by Office
Rescheduled by Patient
All four statuses are grouped together and treated as "booked" appointments.
What happens:
We make a GET Patient request to pull full patient details.
We format the appointment date for the Next Visit Date field.
We pull the appointment types and subtypes from the appointment, identifying them by their 4D IDs.
We pull the provider associated with the appointment.
We format the appointment status and run appointment categorization to classify the appointment into the correct category for dual-pipeline routing (see Appointment Categorization section below).
We format the birthday.
We create or update the contact in Aesthetix CRM and add them to the 4D Appointments Update workflow.
Fields updated in Aesthetix CRM:
First Name, Last Name, Email, Phone
Next Visit Date
Next Visit Service
Appointment Category
4D Appointment Date
4D Appointment Status
4D Appointment Subtype
4D Appointment Type
4D Birthday
4D Consult Reason
4D EMR Facility (if available)
4D Patient ID
4D Provider Name
Workflow actions in Aesthetix CRM:
A contact note is added with: appointment status, appointment type, appointment subtype, and consult reason. These notes are your audit trail for troubleshooting.
The contact is routed through the 4D Appointments Update workflow based on their appointment category and status (see Pipeline Logic section below).
What triggers it: An appointment status changes to Seen or Checked Out in 4D EMR (detected every 5 minutes via polling).
What happens:
The workflow follows the same pattern as the booked status flow: GET Patient request, appointment type/subtype identification, provider lookup, appointment categorization, and birthday formatting.
The key difference is which date fields are updated: instead of Next Visit Date and Next Visit Service, we update Last Visit Date and Last Visit Service -- since this is a completed appointment.
The contact is added to the same 4D Appointments Update workflow for pipeline movement.
Additional fields updated (compared to Booked):
Last Visit Date (instead of Next Visit Date)
Last Visit Service (instead of Next Visit Service)
What triggers it: An appointment status changes to one of the following in 4D EMR (detected every 5 minutes via polling):
No-Show
Cancelled by Office
Cancelled by Patient
What happens:
The workflow follows the same pattern for data collection, appointment categorization, and field mapping.
No date fields are updated -- neither Next Visit Date/Service nor Last Visit Date/Service are changed for cancelled or no-show statuses.
The contact is added to the same 4D Appointments Update workflow, where they are routed to the Cancelled/No-Show stage of the appropriate pipeline.
What triggers it: New patient charges are detected in 4D EMR (polled every 5 minutes).
What happens:
We make a GET Patient request to pull patient details.
We update the contact in Aesthetix CRM with the charge information.
The contact is added to the 4D Patient Charges workflow.
Important: Charges come in individually, not as grouped invoices. 4D EMR does not group charges into an invoice endpoint. This means if a patient has an invoice with 5 line items, each charge comes in separately as an individual event. Each charge generates its own note and adds to the Patient Lifetime Value individually.
Fields updated in Aesthetix CRM:
First Name, Last Name, Email, Phone
Invoice Paid Amount
4D Item Category
4D Item Description
Workflow actions in Aesthetix CRM:
A contact note is added with the line item amount, item category, and item description.
The Invoice Paid Amount is added to Patient Lifetime Value via a math function.
The workflow looks for an existing opportunity in the non-surgical pipeline first, then the surgical pipeline. It updates the existing opportunity value with the Patient Lifetime Value. It does not create new opportunities -- it only updates existing ones.
What triggers it: A tag called 4d-create is added to a contact in Aesthetix CRM (either manually or via automation).
What happens:
The tag triggers a workflow in AX Connect that sends a create patient request to the 4D EMR API.
The patient is created in 4D EMR.
Required fields in Aesthetix CRM:
First Name
Last Name
Phone
Since 4D EMR is typically used by plastic surgery practices, the integration uses appointment categorization to route contacts to the correct pipeline and stage.
Each appointment type and subtype in 4D EMR is mapped to one of these appointment categories:
Surgical Consult
Surgical Appointment
Non-Surgical Consult
Non-Surgical Appointment
Pre-Op Appointment (does not update opportunities)
Post-Op Appointment (does not update opportunities)
Block (does not update opportunities)
Important: Pre-Op, Post-Op, and Block appointment categories intentionally do not update opportunities. If an appointment is categorized as one of these, the contact will not be moved in the pipeline.
Surgical Pipeline:
Appointment Category | Status | Pipeline Stage |
Surgical Consult | Unconfirmed / Confirmed / Rescheduled | Consult Booked |
Surgical Consult | Seen / Checked Out | Consult Complete |
Surgical Consult | Cancelled / No-Show | Cancelled / No-Show |
Surgical Appointment | Unconfirmed / Confirmed / Rescheduled | Surgery Scheduled |
Surgical Appointment | Seen / Checked Out | Surgery Complete |
Surgical Appointment | Cancelled / No-Show | Cancelled / No-Show |
Non-Surgical Pipeline:
Appointment Category | Status | Pipeline Stage |
Non-Surgical Consult | Unconfirmed / Confirmed / Rescheduled | Booked |
Non-Surgical Consult | Seen / Checked Out | Patient |
Non-Surgical Consult | Cancelled / No-Show | Cancelled / No-Show |
Non-Surgical Appointment | Unconfirmed / Confirmed / Rescheduled | Booked |
Non-Surgical Appointment | Seen / Checked Out | Patient |
Non-Surgical Appointment | Cancelled / No-Show | Cancelled / No-Show |
Existing patients maintain a single "won" status throughout the pipeline as they move between stages.
New leads keep an open status until their appointment is seen/checked out, at which point they're moved to the appropriate completed/patient stage.
Aesthetix CRM (GoHighLevel) does not currently expose the native Date of Birth field via API. To work around this, we create a custom field called 4D Birthday and bring in the birthday data from 4D EMR into that field.
A dedicated Birthday workflow then copies the value from the 4D Birthday custom field into the native Date of Birth field, keeping them in sync. This ensures that any birthday automations you've built in the CRM will work correctly using data from 4D EMR.
Several workflows in your Aesthetix CRM account are hidden and locked. This is intentional -- these workflows contain the core integration logic, and modifications could break the integration. The locked workflows include:
4D Appointments Update
4D Patient Charges
4D Birthday
If you need custom automation built on top of any of these, let us know and we can either unlock specific workflows or help you build triggers off of the tags and fields these workflows create.
All 4D-specific fields are organized in a 4D folder within your custom fields.
Custom Field Name | Type | Custom Value |
4D Patient ID | Text |
|
4D Appointment Type | Text |
|
4D Appointment Date | Date |
|
4D Appointment Subtype | Text |
|
4D Appointment Status | Text |
|
4D Consult Reason | Text |
|
4D Birthday | Date |
|
4D Provider Name | Text |
|
4D EMR Facility | Text |
|
4D Item Description | Text |
|
4D Item Category | Text |
|
In addition to the 4D-specific fields above, the integration also updates these standard Aesthetix CRM fields:
Next Visit Date (on booked appointments)
Next Visit Service (on booked appointments)
Last Visit Date (on seen/checked-out appointments)
Last Visit Service (on seen/checked-out appointments)
Invoice Paid Amount (on patient charges)
Patient Lifetime Value (on patient charges)
Appointment Category
First Name, Last Name, Email, Phone
This is a polling integration, not webhook-based. Updates appear in Aesthetix CRM within 5 to 10 minutes of the action in 4D EMR.
Charges come in individually, not as invoices. 4D EMR does not group charges into an invoice endpoint. Each line item on an invoice is received as a separate charge event, which means you may see multiple charge notes for a single visit.
Patient charges only update existing opportunities. The charges workflow does not create new opportunities. It searches for an existing opportunity in the non-surgical pipeline first, then the surgical pipeline, and updates the value.
4D EMR uses granular appointment statuses. Statuses like "Rescheduled by Office" vs. "Rescheduled by Patient" and "Cancelled by Office" vs. "Cancelled by Patient" are captured in the 4D Appointment Status field, even though they're grouped together for pipeline movement purposes.
Appointment categorization is critical. Since 4D is typically used by plastic surgery practices with dual pipelines, correct categorization of appointment types and subtypes is essential for proper pipeline routing.
Birthday requires a workaround. GoHighLevel's native Date of Birth field isn't accessible via API, so we use the 4D Birthday custom field and a sync workflow to keep them aligned.
Two-way sync requires four fields. To create a patient in 4D EMR from Aesthetix CRM, the contact must have first name, last name, email, and phone populated before the 4d-create tag is applied.
Do not click Regenerate on your API credentials unless Aesthetix CRM has specifically instructed you to do so. This will reset your Client Secret and break the existing integration.
Q: How do I know if the integration received an appointment?
Check the contact's Notes tab. Every appointment event generates a note with the appointment status, type, subtype, and consult reason. If there's no note, the event didn't come through the API.
Q: Why is a contact in the wrong pipeline stage?
The most common cause is incorrect appointment categorization. Check the contact's notes for the audit trail, then verify the appointment type and subtype are mapped to the correct category. Also check whether a cancellation was processed after a new booking.
Q: Why do I see multiple charge notes for a single visit?
4D EMR sends each charge as an individual event rather than grouping them into an invoice. If a patient had 5 line items on their invoice, you'll see 5 separate charge notes, each adding to the Patient Lifetime Value.
Q: Why didn't the charges workflow create an opportunity?
The patient charges workflow only updates existing opportunities -- it does not create new ones. If no opportunity exists in either the non-surgical or surgical pipeline, the charge amount will be added to the Patient Lifetime Value field on the contact but won't be reflected on an opportunity until one is created.
Q: Why didn't a patient get created in 4D after I added the 4d-create tag?
Verify that all four required fields are populated: first name, last name, email, and phone.
Q: How do I get my API credentials?
Go to Practice → Settings → Integrations in 4D EMR, click the Aesthetix CRM tile, then click Enable. Copy the Client ID and Client Secret and email them to [email protected].
Q: What happens if I click Regenerate on my API credentials?
This resets your Client Secret key and will immediately break the existing integration. Only click this if Aesthetix CRM has specifically instructed you to do so.
Q: How often does the integration sync?
Every 5 minutes. This is a polling integration, so there is a short delay compared to webhook-based integrations.