---
title: "Overview of 4D EMR Integration with Aesthetix CRM"
description: "Learn more about the fields, workflows, triggers, and actions available in the 4D EMR integration."
url: https://help.aesthetixcrm.com/en/articles/1095-overview-of-4d-emr-integration-with-aesthetix-crm
collection: "4D EMR"
updated: 2026-10-28
language: en
---

# Overview of 4D EMR Integration with Aesthetix CRM

Learn more about the fields, workflows, triggers, and actions available in the 4D EMR integration.

Learn more about the fields, workflows, sync behavior, and calendar available in the 4D EMR integration.

## Integration Benefits & Automation

-   **Opportunity and pipeline automation** to decrease manual data entry and drive reporting efficiency
    
-   Supports **multiple pipelines** to automate updating opportunities in surgical and non-surgical pipelines
    
-   **4D EMR appointments on a silent EMR Appointments calendar**, so appointment reports reflect what happened in 4D EMR
    
-   **Patient Lifetime Value tracking** from patient charges, sent once per invoice
    
-   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 segmentation
    
-   Automated birthday campaigns
    
-   Two-way sync to create patients in 4D EMR from Aesthetix CRM
    

* * *

## Platform Connection Requirements

-   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 next section).
    
-   You don't need to send us a list of your appointment types. We read your appointment types and subtypes directly from 4D EMR during setup, assign each one a category, and send the list to you to review and approve (see the Appointment Categorization section below).
    

* * *

## How to Activate Your API Credentials in 4D EMR

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 the **Aesthetix CRM** tile.

![](https://staticfiles.us.gleap.ai/gattachments/ZLGLE4AS7AyQdKNNmNPHfGsGdardgfSsDHqo3fHbEK4Pfa6NoWNOuhSPXgNaKwsAm4LhZwqPPZo.png)

**Step 2:** Click the **Enable** button.

![](https://staticfiles.us.gleap.ai/gattachments/4CTP6HFtRUhWe4UYwu0bl870zPeAAd9DEPIEXQ4pWJtxVjGHZyoVCz6rakTEnCNpW2M8q4OZWFH.png)

**Step 3:** A **Client ID** and **Client Secret** will be displayed. Copy both and email them to [team@aesthetixcrm.com](mailto:team@aesthetixcrm.com).

![](https://staticfiles.us.gleap.ai/gattachments/La4RKd9ovq7DnQO1a3rzVKySrU2xAfHx5LKdQ8XhLiCvpCfq7ff2B5667mg4R7Y6dbph8w3bsrn.png)

**Important:**

> -   You keep full control of the integration and can deactivate it at any time by clicking **Disable**.
>     
> -   The **Regenerate** button changes the Client Secret. **Do not click it** unless Aesthetix CRM has asked you to. It resets the key and stops the integration until the new key is added on our side.
>     
> -   Contact 4D EMR support at [support@4demr.com](mailto:support@4demr.com) with any questions about the API credentials.
>     

* * *

## How the Integration Works

The 4D EMR integration is a **polling integration**, like our Nextech and ModMed integrations. AX Connect checks 4D EMR on a schedule and sends each change to Aesthetix CRM:

-   **Appointments:** every **5 minutes**, AX Connect asks 4D EMR for every appointment that changed since the last check. Updates typically appear in Aesthetix CRM within about **5 minutes** of the action in 4D EMR.
    
-   **Patient charges:** every **15 minutes**, AX Connect reads today's and yesterday's charges and sends each invoice once. Charges typically appear within about **15 minutes**.
    

A few things can add time:

-   **Several changes for one patient.** When one patient has more than one change in the same check (for example, a checkout and a new booking), the changes are sent about 60 seconds apart, in the order that keeps the pipeline correct.
    
-   **A short 4D EMR outage.** If 4D EMR's API doesn't answer, the next check reads the missed time again. Nothing is lost.
    

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 counts as a change

The integration only sends an appointment to Aesthetix CRM when something that matters changed: its status, its date or time, or its appointment type or subtype. Re-saving an appointment in 4D EMR, or moving it between Unconfirmed and Confirmed, does not send the contact through your workflows again.

### How changes are handled

-   **Reschedules.** When an appointment is rescheduled in 4D EMR, the original appointment is marked Rescheduled and a new appointment is booked. The new booking is sent last, so the contact ends on the new appointment's date and stage.
    
-   **Order.** A patient's changes are processed in pipeline order: reschedules first, then cancellations and no-shows, then completed visits, then new bookings, with the soonest booking last.
    
-   **Another booking on the contact.** A cancellation, no-show or reschedule of one appointment does not move the contact when they are still booked for a different appointment today or later. The contact stays on their upcoming booking.
    
-   **Upcoming surgery.** A Pre-Op, Post-Op or Block appointment change does not overwrite a contact who is booked for an upcoming surgery, so the contact stays at Surgery Scheduled.
    
-   **Email and phone checks.** Placeholder or malformed email addresses (for example `none@none.com`) and invalid phone numbers are not written to the contact, so different patients are never merged into one contact. International numbers with a country code are kept. If a patient has neither a valid email nor a valid phone number in 4D EMR, that change is not written to Aesthetix CRM.
    
-   **Other statuses.** Only the statuses listed in the Sync Details section below are sent. Statuses such as Left Message, Arrived, Roomed or Left Unseen are not.
    

* * *

## Sync Details

### 1\. Appointment Booked: Unconfirmed, Confirmed & Rescheduled

**What triggers it:** An appointment is created, or changes to **Unconfirmed**, **Confirmed**, **Rescheduled by Office** or **Rescheduled by Patient**, in 4D EMR. All four are treated as booked.

**What happens:**

-   We read the full patient record from 4D EMR and check the email and phone number.
    
-   We format the appointment date in your practice's time zone.
    
-   We read the **appointment type and subtype** and the **provider**.
    
-   We set the **Appointment Category** from your practice's category list, which determines the pipeline and stage (see the Appointment Categorization section below).
    
-   We format the birthday.
    
-   We create or update the contact in Aesthetix CRM and add them to the **EMR - 4D Appointments Update** workflow.
    
-   The appointment is added to the **EMR Appointments** calendar as Confirmed.
    

**Reschedules:** when an appointment is rescheduled, 4D EMR marks the original appointment Rescheduled and books a new one. Both are sent as booked, with the new booking last, so the contact stays on a booked stage and ends on the new appointment's date. On the calendar, the original entry is marked **Invalid** (so it doesn't count as a cancellation) and the new booking appears as Confirmed.

**Fields updated in Aesthetix CRM:**

-   First Name, Last Name, Email, Phone
    
-   Next Visit Date
    
-   Next Visit Service
    
-   Appointment Category
    
-   4D Appointment Date
    
-   4D Appointment ID
    
-   4D Appointment Status
    
-   4D Appointment Type
    
-   4D Appointment Subtype
    
-   4D Birthday
    
-   4D Consult Reason (when 4D EMR has one)
    
-   4D Patient ID
    
-   4D Provider Name
    

**Workflow actions in Aesthetix CRM:**

-   A **contact note** is added with the appointment status, type and subtype (and the consult reason, when there is one). These notes are your audit trail for troubleshooting.
    
-   The contact is routed through the **EMR - 4D Appointments Update** workflow based on their appointment category and status (see the Pipeline Movement section below).
    

**Next Visit:** Next Visit Date and Next Visit Service show the appointment that was booked or changed. When several bookings for one patient come in together, the soonest one is written last. Next Visit Date is date-only (for example, 3/12/2026). For how these fields behave across EMR integrations, see [Understanding Next Visit & Last Visit Fields in EMR Integrations](https://help.aesthetixcrm.com/en/articles/1245.md).

* * *

### 2\. Appointment Completed: Seen & Checked Out

**What triggers it:** An appointment changes to **Seen** or **Checked Out** in 4D EMR.

**What happens:**

-   Data collection and appointment categorization work the same way as for booked appointments.
    
-   Instead of Next Visit, we update **Last Visit Date** and **Last Visit Service**, since this is a completed appointment.
    
-   The contact is added to the same **EMR - 4D Appointments Update** workflow for pipeline movement.
    
-   The calendar entry is updated to Showed.
    

**Additional fields updated (compared to Booked):**

-   Last Visit Date (instead of Next Visit Date)
    
-   Last Visit Service (instead of Next Visit Service)
    

* * *

### 3\. Appointment Cancelled & No-Show

**What triggers it:** An appointment changes to one of these statuses in 4D EMR:

-   **No-Show**
    
-   **Cancelled by Office**
    
-   **Cancelled by Patient**
    

**What happens:**

-   Data collection follows the same pattern as the other statuses.
    
-   **No date fields are updated**: Next Visit and Last Visit stay as they were.
    
-   The contact is added to the **EMR - 4D Appointments Update** workflow, where they are routed to the Cancelled / No-Show stage of the appropriate pipeline.
    
-   If the same patient is still booked for another appointment today or later, the contact is not moved (see How changes are handled above).
    
-   On the calendar, a cancellation shows as Cancelled and a no-show as No-Show.
    

The exact 4D status (for example, "Cancelled by Office" or "Cancelled by Patient") is saved in the **4D Appointment Status** field, even though they're grouped together for pipeline movement.

* * *

### 4\. Patient Charges

**What triggers it:** New charges appear on a patient's invoice in 4D EMR. Charges are read every 15 minutes.

**What happens:**

-   We group the charge lines by **invoice**, so one invoice is sent once with its total, not as separate line items.
    
-   The invoice total is each line's price less its discount, times the quantity, plus tax.
    
-   Each charge line is sent only once. If a line is added to an invoice after it was first sent, only the new amount is sent.
    
-   We check the email and phone number, then update the contact in Aesthetix CRM and add them to the **EMR - 4D Patient Charges** workflow.
    
-   When one patient has more than one invoice in the same check, the invoices are sent about 60 seconds apart.
    

**Fields updated in Aesthetix CRM:**

-   First Name, Last Name, Email, Phone
    
-   Invoice Paid Amount (the invoice total)
    
-   4D Invoice ID
    
-   4D Item Category (the invoice's categories)
    
-   4D Item Description (the invoice's line descriptions)
    
-   4D Patient ID
    

**Workflow actions in Aesthetix CRM:**

-   A **contact note** is added with the invoice total, categories and descriptions.
    
-   The Invoice Paid Amount is added to **Patient Lifetime Value**.
    
-   The charges workflow does **not** change opportunities. The opportunity value is set to Patient Lifetime Value the next time the opportunity moves stage on an appointment change (see Pipeline Movement below), so a new charge shows on the opportunity after the patient's next appointment update.
    

**Refunds and credits.** Refunds and credits are not yet subtracted from Patient Lifetime Value automatically. If a patient is refunded, contact us so we can correct their Patient Lifetime Value.

**Charges start date.** Charges have been sent per invoice since October 23, 2026. Charges before that date were counted line by line when they came in and were not re-added.

**Excluded items.** On request, we can leave specific line items out of Patient Lifetime Value, for example card surcharges or processing fees.

**Known Limitation: Charges are read by invoice date.** 4D EMR reports charges by the invoice's date, and the integration reads today's and yesterday's invoices in your practice's time zone. A charge added to an invoice dated earlier than yesterday is not picked up. If your team adds charges to older invoices, let us know.

* * *

### 5\. Create Patient in 4D EMR (Two-Way Sync)

**What triggers it:** A tag called **4d-create** is added to a contact in Aesthetix CRM (manually or through an automation).

**What happens:**

-   The tag starts the **EMR - 4D Create Patient Sync** workflow, which sends a create patient request to 4D EMR through AX Connect.
    
-   The patient is created in 4D EMR with their first name, last name, email and phone.
    

**Required fields in Aesthetix CRM:**

-   First Name
    
-   Last Name
    
-   Email
    
-   Phone
    

**Optional: New leads to 4D EMR.** On request, we can also send new leads to 4D EMR as **leads** (not patients) when an opportunity is created in your pipeline, with their treatment of interest and lead source. The lead needs a first and last name, because 4D EMR requires both.

* * *

## EMR Appointments Calendar

Your 4D EMR appointments also appear on a calendar in Aesthetix CRM named **EMR Appointments**. The calendar went live for every 4D EMR practice on October 15, 2026 (or on the practice's go-live date, if later). Practices with several 4D EMR locations can ask for one calendar per location (for example, **EMR Appointments · Downtown**), each in its own color.

**What it's for:** The calendar lets the CRM's appointment reports show confirmed, showed, cancelled and no-show counts that match 4D EMR. It is a mirror of 4D EMR, not a booking calendar.

**What each entry shows:** the appointment type and the provider, the start and end time, and the patient's contact record (the appointment also appears in the contact's appointment history).

**How appointments appear:**

<table style="min-width: 50px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p><strong><strong>4D EMR status</strong></strong></p></th><th colspan="1" rowspan="1"><p><strong><strong>Calendar status</strong></strong></p></th></tr><tr><td colspan="1" rowspan="1"><p>Unconfirmed / Confirmed</p></td><td colspan="1" rowspan="1"><p>Confirmed</p></td></tr><tr><td colspan="1" rowspan="1"><p>Seen / Checked Out</p></td><td colspan="1" rowspan="1"><p>Showed</p></td></tr><tr><td colspan="1" rowspan="1"><p>Cancelled by Office / Cancelled by Patient</p></td><td colspan="1" rowspan="1"><p>Cancelled</p></td></tr><tr><td colspan="1" rowspan="1"><p>No-Show</p></td><td colspan="1" rowspan="1"><p>No-Show</p></td></tr><tr><td colspan="1" rowspan="1"><p>Rescheduled by Office / Rescheduled by Patient</p></td><td colspan="1" rowspan="1"><p>Invalid (not counted; the new booking appears)</p></td></tr></tbody></table>

-   Pre-Op and Post-Op appointments appear on the calendar even when they don't move the pipeline.
    
-   Staff time blocks without a patient are not sent.
    
-   Only appointments created or changed in 4D EMR since the calendar went live appear. Older future appointments appear the next time they change in 4D EMR.
    

**The calendar is silent.** It sends no confirmations, reminders or cancellation messages to patients, and no alerts to your team. We check it every day to make sure it stays silent.

### Appointment workflow triggers and the EMR Appointments calendar

The calendar itself sends nothing, but your **workflows can still react to it**. Because 4D EMR appointments are now real appointments on a CRM calendar, workflow triggers behave like this:

<table style="min-width: 50px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p><strong><strong>Workflow trigger</strong></strong></p></th><th colspan="1" rowspan="1"><p><strong><strong>Fires for 4D EMR appointments on the EMR Appointments calendar?</strong></strong></p></th></tr><tr><td colspan="1" rowspan="1"><p><strong>Appointment Status</strong> with no calendar filter</p></td><td colspan="1" rowspan="1"><p><strong>Yes.</strong> It fires when an appointment is added (status Confirmed) and each time its status changes (Showed, Cancelled, No Show, Invalid).</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>Appointment Status</strong> filtered to another calendar ("In Calendar")</p></td><td colspan="1" rowspan="1"><p>No</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>Appointment Status</strong> filtered to an EMR Appointments calendar</p></td><td colspan="1" rowspan="1"><p>Yes, on purpose</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>Customer Booked Appointment</strong></p></td><td colspan="1" rowspan="1"><p>No. This trigger is for bookings made through a booking link or widget.</p></td></tr></tbody></table>

**Please don't:**

-   Book, edit, move or delete appointments on the EMR Appointments calendar. An appointment booked there is not sent to 4D EMR, and changes to synced entries are replaced the next time the appointment changes in 4D EMR. Make changes in 4D EMR; the calendar follows.
    
-   Turn on notifications, reminders or Google invitations for this calendar.
    
-   Build a workflow with an **Appointment Status** trigger without a calendar filter. An unfiltered Appointment Status trigger fires for every synced 4D EMR appointment, which could send patients a second reminder or follow-up. Filter appointment workflows to the calendars they are meant for.
    

The standard Aesthetix CRM workflows are not affected: the appointment workflows we install are limited to their own calendars, and the 4D EMR workflows run from the integration, not from calendar triggers.

* * *

## Appointment Categorization & Pipeline Logic

Since 4D EMR is typically used by plastic surgery practices, the integration uses appointment categorization to route contacts to the correct pipeline and stage. This is critical to the integration working properly.

### Setup Process

During setup, we read all of your appointment types and subtypes from 4D EMR and assign each one a category. We send you the list as your **Appointment Categorization Document** to review, and you must confirm every mapping before we finalize the integration. For how that document works and what each category means, see [Appointment Category: How It Works](https://help.aesthetixcrm.com/en/articles/1238.md).

Each appointment type and subtype is mapped to one of these categories:

-   Surgical Consult
    
-   Surgical Appointment
    
-   Non-Surgical Consult
    
-   Non-Surgical Appointment
    
-   Pre-Op Appointment (no pipeline updates)
    
-   Post-Op Appointment (no pipeline updates)
    
-   Block (no pipeline updates)
    

> **Important:** Pre-Op, Post-Op and Block categories intentionally do **not** update opportunities. If an appointment is categorized as one of these, the contact is not moved in the pipeline.

Each appointment's category is written to the contact's **Appointment Category** field, and the **EMR - 4D Appointments Update** workflow reads that field to choose the pipeline and stage.

**New appointment types:** We check your 4D EMR appointment types and subtypes every week and add new ones to your category list. Until a new type is added, it may not have a category, so it may not route correctly. If you add appointment types in 4D EMR and need them working right away, contact us.

### Pipeline Movement

**Surgical Pipeline:**

<table style="min-width: 75px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p><strong><strong>Appointment Category</strong></strong></p></th><th colspan="1" rowspan="1"><p><strong><strong>Status</strong></strong></p></th><th colspan="1" rowspan="1"><p><strong><strong>Pipeline Stage</strong></strong></p></th></tr><tr><td colspan="1" rowspan="1"><p>Surgical Consult</p></td><td colspan="1" rowspan="1"><p>Unconfirmed / Confirmed / Rescheduled</p></td><td colspan="1" rowspan="1"><p>Consult Booked</p></td></tr><tr><td colspan="1" rowspan="1"><p>Surgical Consult</p></td><td colspan="1" rowspan="1"><p>Seen / Checked Out</p></td><td colspan="1" rowspan="1"><p>Consult Complete</p></td></tr><tr><td colspan="1" rowspan="1"><p>Surgical Consult</p></td><td colspan="1" rowspan="1"><p>Cancelled / No-Show</p></td><td colspan="1" rowspan="1"><p>Cancelled / No-Show</p></td></tr><tr><td colspan="1" rowspan="1"><p>Surgical Appointment</p></td><td colspan="1" rowspan="1"><p>Unconfirmed / Confirmed / Rescheduled</p></td><td colspan="1" rowspan="1"><p>Surgery Scheduled</p></td></tr><tr><td colspan="1" rowspan="1"><p>Surgical Appointment</p></td><td colspan="1" rowspan="1"><p>Seen / Checked Out</p></td><td colspan="1" rowspan="1"><p>Surgery Complete</p></td></tr><tr><td colspan="1" rowspan="1"><p>Surgical Appointment</p></td><td colspan="1" rowspan="1"><p>Cancelled / No-Show</p></td><td colspan="1" rowspan="1"><p>Cancelled / No-Show</p></td></tr></tbody></table>

**Non-Surgical Pipeline:**

<table style="min-width: 75px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p><strong><strong>Appointment Category</strong></strong></p></th><th colspan="1" rowspan="1"><p><strong><strong>Status</strong></strong></p></th><th colspan="1" rowspan="1"><p><strong><strong>Pipeline Stage</strong></strong></p></th></tr><tr><td colspan="1" rowspan="1"><p>Non-Surgical Consult</p></td><td colspan="1" rowspan="1"><p>Unconfirmed / Confirmed / Rescheduled</p></td><td colspan="1" rowspan="1"><p>Booked</p></td></tr><tr><td colspan="1" rowspan="1"><p>Non-Surgical Consult</p></td><td colspan="1" rowspan="1"><p>Seen / Checked Out</p></td><td colspan="1" rowspan="1"><p>Patient</p></td></tr><tr><td colspan="1" rowspan="1"><p>Non-Surgical Consult</p></td><td colspan="1" rowspan="1"><p>Cancelled / No-Show</p></td><td colspan="1" rowspan="1"><p>Cancelled / No-Show</p></td></tr><tr><td colspan="1" rowspan="1"><p>Non-Surgical Appointment</p></td><td colspan="1" rowspan="1"><p>Unconfirmed / Confirmed / Rescheduled</p></td><td colspan="1" rowspan="1"><p>Booked</p></td></tr><tr><td colspan="1" rowspan="1"><p>Non-Surgical Appointment</p></td><td colspan="1" rowspan="1"><p>Seen / Checked Out</p></td><td colspan="1" rowspan="1"><p>Patient</p></td></tr><tr><td colspan="1" rowspan="1"><p>Non-Surgical Appointment</p></td><td colspan="1" rowspan="1"><p>Cancelled / No-Show</p></td><td colspan="1" rowspan="1"><p>Cancelled / No-Show</p></td></tr></tbody></table>

For existing patients, each stage move also sets the opportunity value to the contact's Patient Lifetime Value. A lead's opportunity carries no value until they become a patient.

### Patient vs. Lead Logic

The workflow also checks whether a contact is a lead or an existing patient:

-   **Existing patients** (Contact Type is Patient) keep a **won** status at every stage as they move through the pipeline. This keeps their revenue attributed in your reports, including when they book a new consult.
    
-   **New leads** keep an **open** status until their appointment is seen or checked out, at which point they move to the appropriate completed or patient stage.
    

### Troubleshooting Pipeline Issues

If a contact is in the wrong pipeline stage, check:

1.  **Appointment Category:** verify the appointment type and subtype are mapped to the correct category. Incorrect categorization is the most common cause of pipeline issues.
    
2.  **Contact Notes:** review the audit trail to see which appointments came in and in what order.
    
3.  **Another booking or upcoming surgery:** a cancellation of one appointment doesn't move a contact who is booked for another, and a Pre-Op or Post-Op change doesn't move a contact booked for an upcoming surgery.
    
4.  **Contact Type:** a contact whose Contact Type is Patient shows as won at every stage, including Consult Booked.
    

* * *

## Birthday Field Sync

The native Date of Birth field in Aesthetix CRM can't be written through the integration directly. To work around this, we use a custom field called **4D Birthday** and bring the birthday from 4D EMR into that field.

A dedicated **Birthday workflow** then copies the value from 4D Birthday into the native Date of Birth field when an appointment is **Seen** or **Checked Out**. A patient who has only booked appointments so far can have 4D Birthday filled and Date of Birth still empty until their first completed visit. This ensures any birthday automations you've built in the CRM work correctly with data from 4D EMR.

* * *

## Hidden / Locked Workflows

Several workflows in your Aesthetix CRM account are **hidden and locked**. This is intentional: these workflows contain the core integration logic, and changes could break the integration. The locked workflows include:

-   EMR - 4D Appointments Update
    
-   EMR - 4D Patient Charges
    
-   EMR - 4D Birthday Update
    
-   EMR - 4D Create Patient Sync
    

If you need custom automation built on top of any of these, let us know. We can either unlock specific workflows or help you build triggers off the tags and fields these workflows create.

* * *

## Contact & Opportunity Custom Fields

All 4D-specific fields are organized in a **4D folder** within your custom fields.

<table style="min-width: 75px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p><strong><strong>Custom Field Name</strong></strong></p></th><th colspan="1" rowspan="1"><p><strong><strong>Type</strong></strong></p></th><th colspan="1" rowspan="1"><p><strong><strong>Custom Value</strong></strong></p></th></tr><tr><td colspan="1" rowspan="1"><p>4D Patient ID</p></td><td colspan="1" rowspan="1"><p>Text</p></td><td colspan="1" rowspan="1"><p><code>{{ contact.4d_patient_id }}</code></p></td></tr><tr><td colspan="1" rowspan="1"><p>4D Appointment ID</p></td><td colspan="1" rowspan="1"><p>Text</p></td><td colspan="1" rowspan="1"><p><code>{{ contact.4d_appointment_id }}</code></p></td></tr><tr><td colspan="1" rowspan="1"><p>4D Appointment Type</p></td><td colspan="1" rowspan="1"><p>Text</p></td><td colspan="1" rowspan="1"><p><code>{{ contact.4d_appointment_type }}</code></p></td></tr><tr><td colspan="1" rowspan="1"><p>4D Appointment Subtype</p></td><td colspan="1" rowspan="1"><p>Text</p></td><td colspan="1" rowspan="1"><p><code>{{ contact.4d_appointment_subtype }}</code></p></td></tr><tr><td colspan="1" rowspan="1"><p>4D Appointment Date</p></td><td colspan="1" rowspan="1"><p>Date</p></td><td colspan="1" rowspan="1"><p><code>{{ contact.4d_appointment_date }}</code></p></td></tr><tr><td colspan="1" rowspan="1"><p>4D Appointment Status</p></td><td colspan="1" rowspan="1"><p>Text</p></td><td colspan="1" rowspan="1"><p><code>{{ contact.4d_appointment_status }}</code></p></td></tr><tr><td colspan="1" rowspan="1"><p>4D Consult Reason</p></td><td colspan="1" rowspan="1"><p>Text</p></td><td colspan="1" rowspan="1"><p><code>{{ contact.4d_consult_reason }}</code></p></td></tr><tr><td colspan="1" rowspan="1"><p>4D Birthday</p></td><td colspan="1" rowspan="1"><p>Date</p></td><td colspan="1" rowspan="1"><p><code>{{ contact.4d_birthday }}</code></p></td></tr><tr><td colspan="1" rowspan="1"><p>4D Provider Name</p></td><td colspan="1" rowspan="1"><p>Text</p></td><td colspan="1" rowspan="1"><p><code>{{ contact.4d_provider_name }}</code></p></td></tr><tr><td colspan="1" rowspan="1"><p>4D EMR Facility</p></td><td colspan="1" rowspan="1"><p>Text</p></td><td colspan="1" rowspan="1"><p><code>{{ contact.4d_emr_facility }}</code></p></td></tr><tr><td colspan="1" rowspan="1"><p>4D Invoice ID</p></td><td colspan="1" rowspan="1"><p>Text</p></td><td colspan="1" rowspan="1"><p><code>{{ contact.4d_invoice_id }}</code></p></td></tr><tr><td colspan="1" rowspan="1"><p>4D Item Category</p></td><td colspan="1" rowspan="1"><p>Text</p></td><td colspan="1" rowspan="1"><p><code>{{ contact.4d_item_category }}</code></p></td></tr><tr><td colspan="1" rowspan="1"><p>4D Item Description</p></td><td colspan="1" rowspan="1"><p>Text</p></td><td colspan="1" rowspan="1"><p><code>{{ contact.4d_item_description }}</code></p></td></tr></tbody></table>

-   **4D Appointment ID** is written on booked and completed appointments. The integration uses it to tell whether a cancellation is for the contact's current booking.
    
-   **4D Appointment Date** uses your practice's time zone.
    
-   **4D Provider Name** is the provider's first and last name (some practices also include the degree, for example "Jane Smith MD").
    
-   **4D EMR Facility** is filled for practices set up to use it.
    

In addition to the 4D-specific fields above, the integration also updates these **standard Aesthetix CRM fields**:

<table style="min-width: 50px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p><strong><strong>Field</strong></strong></p></th><th colspan="1" rowspan="1"><p><strong><strong>Updated on</strong></strong></p></th></tr><tr><td colspan="1" rowspan="1"><p>First Name, Last Name, Email, Phone</p></td><td colspan="1" rowspan="1"><p>Every change (only valid emails and phone numbers)</p></td></tr><tr><td colspan="1" rowspan="1"><p>Next Visit Date, Next Visit Service</p></td><td colspan="1" rowspan="1"><p>Booked appointments</p></td></tr><tr><td colspan="1" rowspan="1"><p>Last Visit Date, Last Visit Service</p></td><td colspan="1" rowspan="1"><p>Seen or checked-out appointments</p></td></tr><tr><td colspan="1" rowspan="1"><p>Appointment Category</p></td><td colspan="1" rowspan="1"><p>Every appointment change</p></td></tr><tr><td colspan="1" rowspan="1"><p>Lead Type</p></td><td colspan="1" rowspan="1"><p>Every appointment change (Surgical or Non-Surgical, from the appointment's category)</p></td></tr><tr><td colspan="1" rowspan="1"><p>Source</p></td><td colspan="1" rowspan="1"><p>Set to <strong>4D Direct</strong> when the contact has no source yet; an existing source is never changed</p></td></tr><tr><td colspan="1" rowspan="1"><p>Invoice Paid Amount</p></td><td colspan="1" rowspan="1"><p>Patient charges (the invoice total)</p></td></tr><tr><td colspan="1" rowspan="1"><p>Patient Lifetime Value</p></td><td colspan="1" rowspan="1"><p>Patient charges (through the Patient Charges workflow)</p></td></tr></tbody></table>

* * *

## Important Notes & Limitations

1.  **This is a polling integration, not webhook-based.** Appointment changes appear in Aesthetix CRM within about 5 minutes and charges within about 15 minutes. A patient with several changes can add a minute or two.
    
2.  **Only real changes are sent.** Re-saving an appointment, or switching it between Unconfirmed and Confirmed, does not update the contact or re-run your workflows.
    
3.  **Charges come in per invoice.** Each invoice is sent once with its total. A line added later to the same invoice is sent as its own amount.
    
4.  **Charges are read by invoice date.** A charge added to an invoice dated earlier than yesterday is not picked up.
    
5.  **Refunds are not subtracted automatically yet.** Contact us when a patient is refunded so we can correct their Patient Lifetime Value. Charges have been sent per invoice since October 23, 2026; earlier charges were not re-added.
    
6.  **Opportunity values update on appointment changes.** Charges update Patient Lifetime Value right away, but the opportunity value only catches up the next time the opportunity moves stage on an appointment change. The integration never creates an opportunity from a charge.
    
7.  **Contacts need a valid email or phone.** Placeholder or malformed emails and invalid phone numbers are not written. If a patient has neither, their changes are not written to Aesthetix CRM.
    
8.  **Appointment categorization is critical.** Review the category list we send during setup carefully. New appointment types are picked up weekly; contact us if you need one working sooner.
    
9.  **The EMR Appointments calendar is a mirror of 4D EMR.** Don't book on it or edit it, don't turn on its notifications, and filter any Appointment Status workflow by calendar.
    
10.  **No backfill.** The calendar shows appointments created or changed in 4D EMR since it went live on October 15, 2026.
     
11.  **Next Visit Date is date-only** (for example, 3/12/2026). Appointment times can't be stored in this field.
     
12.  **Birthday requires a workaround.** The native Date of Birth field can't be written directly, so we use the 4D Birthday custom field and a sync workflow to keep them aligned.
     
13.  **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 filled in before the 4d-create tag is applied.
     
14.  **Do not click Regenerate on your API credentials** unless Aesthetix CRM has asked you to. It resets your Client Secret and stops the integration.
     

* * *

## Frequently Asked Questions

**How do I know if the integration received an appointment?** Check the contact's **Notes** tab. Every appointment change sent to Aesthetix CRM adds a note with the appointment status, type and subtype. You can also find the appointment on the **EMR Appointments** calendar. Allow about 5 minutes. If the appointment was only re-saved, or moved between Unconfirmed and Confirmed, no new note is expected.

**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 remember that a cancellation doesn't move a contact who is booked for another appointment.

**A patient cancelled one appointment but has another booked. Why didn't they move to Cancelled / No-Show?** The integration leaves a contact on their upcoming booking when a different appointment is cancelled or missed. This keeps the contact on the correct stage for the appointment they're still booked for.

**Why is an existing patient showing as won at Consult Booked?** Contacts whose Contact Type is Patient keep a won status at every stage, so their original revenue stays attributed in your reports. This is expected.

**Why do I see one charge note per invoice instead of one per line item?** The integration groups 4D EMR charge lines by invoice and sends each invoice once with its total. If a line is added to the invoice later, you'll see a second note for the added amount.

**A charge is in 4D EMR but not in Aesthetix CRM. Why?** Check that the patient has a valid email or phone in 4D EMR, and that the charge was added to an invoice dated today or yesterday. Charges added to older invoices are not picked up. Contact us with the patient's invoice details and we'll look into it.

**Why doesn't the opportunity value match Patient Lifetime Value after a charge?** Charges update Patient Lifetime Value right away, but the opportunity value is set when the opportunity moves stage on an appointment change. The opportunity catches up the next time the patient's appointment is booked, completed, cancelled or marked a no-show in 4D EMR. If the contact has no opportunity, none is created from a charge.

**What is the EMR Appointments calendar, and can I book on it?** It is a silent mirror of your 4D EMR appointments, so the CRM's appointment reports match 4D EMR. Don't book, edit or delete appointments on it: make changes in 4D EMR and the calendar follows. It sends no messages to patients or your team.

**Why don't I see older appointments on the EMR Appointments calendar?** The calendar shows appointments created or changed in 4D EMR since it went live on October 15, 2026. An older future appointment appears the next time it changes in 4D EMR.

**I have a workflow with an Appointment Status trigger. Will the calendar set it off?** Yes, if the trigger has no calendar filter. Add an "In Calendar" filter so the workflow only fires for the calendars it is meant for. Contact us if you'd like help reviewing your appointment workflows.

**Why didn't a patient get created in 4D EMR after I added the 4d-create tag?** Verify that all four required fields are filled in: first name, last name, email and phone.

**How do I get my API credentials?** In 4D EMR, go to **Practice → Settings → Integrations**, click the Aesthetix CRM tile, then click Enable. Copy the Client ID and Client Secret and email them to [team@aesthetixcrm.com](mailto:team@aesthetixcrm.com).

**What happens if I click Regenerate on my API credentials?** It resets your Client Secret and stops the integration until we add the new key. Only click it if Aesthetix CRM has asked you to.

**I added new appointment types in 4D EMR. What do I need to do?** Nothing right away: we check your appointment types and subtypes every week and add new ones to your category list. Until then, a new type may not route contacts to the correct pipeline stage. Contact support if you need it working sooner.

**How often does the integration sync?** Appointments every 5 minutes and charges every 15 minutes. When one patient has several changes at once, they are sent about a minute apart.

* * *

## Need Help?

Contact Aesthetix CRM support through the help widget in your account or by email, and include the contact's name and the 4D EMR appointment or invoice details if you're reporting a sync issue. For custom automations built on the 4D fields, the EMR Appointments calendar or your pipeline, submit a Custom Build Request.

* * *

## Related articles

-   [4D EMR Integration Troubleshooting Guide](https://help.aesthetixcrm.com/en/articles/1353.md)
    
-   [Appointment Category: How It Works and Why It Matters To Your EMR Integration](https://help.aesthetixcrm.com/en/articles/1238.md)
    
-   [Understanding Next Visit & Last Visit Fields in EMR Integrations](https://help.aesthetixcrm.com/en/articles/1245.md)
