> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dmly.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Client profile

> Read a contact's profile page: its metrics, records tabs, and the actions you can take from it.

Selecting **View details** on any contact opens its profile — the single page that holds
everything DMLY knows about that person: their conversation history, their channels, their
tags and notes, and, once they are a Client, their invoices, payments, credits and
appointments.

The page renders in two halves. Every contact gets the top half. The finance half — the
money metrics, the records tabs and the client actions — only appears once the contact's
lifecycle stage is **Client**. On a lead, none of it is shown and none of it is even
calculated.

## What every contact profile shows

The header carries the name, the handle, the platform badge and the lifecycle badge, with
three metrics underneath:

<Columns cols={2}>
  <Card title="Messages exchanged" icon="comments">
    The total message count across every channel this person uses.
  </Card>

  <Card title="Tags applied" icon="tag">
    How many tags are currently on the contact.
  </Card>

  <Card title="Last interaction" icon="clock">
    When they last did something — the same timestamp the contacts list sorts on.
  </Card>
</Columns>

Below that:

* **Conversation summary** — the **Last inbound message** they sent, or *No messages from
  this contact yet.*
* **Profile** — **Contact ID**, **Email**, **Phone**, **Gender**, **Language**,
  **Timezone**, **Birthday**, **Opt-in through**, **Source**, **Subscribed**. Empty rows are
  hidden, so a sparse contact shows a short list.
* **Flow answers** — the question, the answer and the date, for each answer captured by your
  [flows](/automation/flow-builder).
* **Activity timeline** — what has happened to this contact over time.
* **Channels** — every identity this person has, with the **Primary** one marked. *One
  profile, many channels — replies, history and CRM data are shared.*
* **Internal notes** — private to your team; the contact never sees them.

## Message the contact

The message button is channel-aware and never lies to you. If you have WhatsApp connected
and this person has a phone number (or reached you on WhatsApp in the first place), you get
**Message on WhatsApp**. Otherwise it offers their own platform — Telegram, Instagram and
so on. If neither works, the button is disabled and tells you why: *Connect a WhatsApp
number to message this contact on WhatsApp*, or *Add a phone number to message this contact
on WhatsApp*.

<Note>
  The button opens the conversation in your [Inbox](/inbox/overview). It is not an external
  wa.me link, so the reply is logged against the contact like any other message.
</Note>

## Pause the bot for one person

**Pause bot reply** hands this conversation to a human. While the dot reads **Bot paused**,
quick automations, sequences and booking reminders all skip this contact — your team's
manual replies still go out normally. **Resume bot reply** puts them back.

This is a per-contact switch and is separate from blocking or unsubscribing, which are set
elsewhere. See [Data and privacy](/contacts/data-and-privacy).

## Tags, stage and custom fields

* **Add tag** edits tags inline. Type a new name and press enter to create it — see
  [Tags and segments](/contacts/tags-and-segments).
* **Pipeline stage** moves the contact along your CRM pipeline, the same axis you drag on
  the [Pipeline view](/contacts/pipeline-stages).
* **Custom fields** is a **Field name** / **Value** list with an **Add field** button.

<Warning>
  The custom fields editor on this page is free-form. It does not check what you type
  against the [custom fields](/contacts/custom-fields) you defined in Workspace settings,
  and it does not enforce their type. A misspelled field name silently creates a one-off
  field on this contact that no filter, segment or automation will ever match. Copy the
  field name exactly.
</Warning>

## Merge duplicates

If another contact in the workspace shares this person's phone number or email address,
they appear under **Possible duplicates**: *These contacts share a phone or email with this
person. Merge to combine their channels, history and tags into one profile.*

<Warning>
  **Merge** is permanent. All of the duplicate's channels, messages, notes and tags move
  into the profile you keep, and the duplicate is deleted. Check you have the right winner
  before selecting **Merge into this profile**.
</Warning>

Two things are protected on merge: if either side had opted out, the surviving contact stays
opted out; and if either side was a Client, the survivor stays a Client.

## Convert a lead to a client

Select **Convert to client**. DMLY asks you to confirm, creates the client's finance record,
writes a line to the timeline and can trigger an automation.

<Note>
  A client needs at least a phone number or email so you can reach and invoice them. If the
  contact has neither, DMLY asks you to add one before it will convert them.
</Note>

You often will not need this button. Raising an invoice, creating an order, recording a
payment or starting a subscription converts a lead to a Client automatically — and those
paths never ask for a phone number first.

**Mark as lead** moves someone back. It only works while they are clean: if the contact has
a confirmed or completed booking, a successful payment, a paid or fulfilled order, or store
orders on file, DMLY blocks it — *This client has billing or booking records and can't be
moved back to a lead.*
Downgrading never deletes anything; it only changes the stage, and the billing history stays
on file.

## The client half

The sidebar's **Lifecycle** panel shows **Converted on** and **Converted by** — when this
lead became a Client and who did it.

Once the contact is a Client, four money tiles appear above the records tabs:

| Tile                  | What it is                                           |
| --------------------- | ---------------------------------------------------- |
| **Available credits** | The live balance from the credits ledger.            |
| **Amount due**        | Outstanding balance, shown in red when there is one. |
| **Loyalty points**    | The live balance from the loyalty ledger.            |
| **Lifetime value**    | What this client has been worth so far.              |

### The records tabs

Nine tabs sit below, opening on **Invoices**:

**Invoices** · **Orders** · **Payments** · **Statements** · **Subscriptions** ·
**Credits** · **Loyalty** · **Appointments** · **Classes**

**Appointments** holds one-to-one bookings; **Classes** holds group sessions. An empty tab
reads *No records yet*.

<Note>
  Each tab shows at most the 50 most recent rows. For a long-standing client this page is a
  summary, not the full ledger — go to [Finance](/finance/overview) or
  [Appointments](/appointments/overview) for everything.
</Note>

## Client actions

Six actions sit above the tabs. Three jump you into the right screen with this client
already selected:

<Columns cols={2}>
  <Card title="Book appointment" icon="calendar-check">
    Opens the Appointments calendar for this client.
  </Card>

  <Card title="New invoice" icon="file-invoice">
    Opens Finance on a new invoice for this client.
  </Card>

  <Card title="Create order" icon="cart-shopping">
    Opens Finance on a new order for this client.
  </Card>
</Columns>

Three open a modal and write straight from here:

<Steps>
  <Step title="Add credits">
    Enter a whole number of **Credits** and, if you want, an **Expiry date (optional)** and
    a note. Use this for a package the client paid for offline, or a goodwill top-up.
  </Step>

  <Step title="Adjust loyalty">
    Enter points to grant, or a negative number to take points away — *Use a positive number
    to add points or a negative number to deduct them.* A **Reason** is required, so the
    ledger always says why.
  </Step>

  <Step title="Record payment">
    Log money you took outside DMLY — cash in the salon, a bank transfer. Enter the
    **Amount**, **Payment method** and **Payment date**. **Against invoice** lets you settle
    one of this client's own unpaid invoices; leave it on **No invoice** for a payment that
    isn't tied to one.
  </Step>
</Steps>

<Note>
  You cannot spend credits from this page — **Add credits** only ever adds. Credits are
  consumed when the client books an appointment against a package, or by the credits step in
  an [automation](/automation/flow-builder). The ledger is append-only: nothing on it is
  edited or deleted, so a mistake is corrected by posting the opposite entry, not by undoing
  the old one.
</Note>

All six actions need the client-management permission. If your role doesn't have it, they do
not appear — see [Roles and permissions](/account/roles-and-permissions).

## Billing details

The **Client profile** card is collapsed by default. Open it to set what invoices and
statements need: **Billing name**, **Billing email**, **Billing phone** and address,
**Company name**, **Tax ID**, **Default currency**, **Payment terms**, plus the client's
preferred name, referral source, primary staff member and emergency contact.

## Delete a contact

Deleting a contact is done from the [contacts list](/contacts/overview), not this page: open
the ⋯ menu on the contact's row and choose **Delete** (it needs the contact-delete
permission). It removes the person and everything hanging off them — their channels, their
entire message history, their notes and their client record. There is no soft delete and no
undo.

<Warning>
  Deleting is permanent and immediate. Export first if you might need the record — see
  [Data and privacy](/contacts/data-and-privacy).
</Warning>

<Columns cols={2}>
  <Card title="Contacts overview" icon="address-book" href="/contacts/overview">
    How contacts, leads and clients fit together.
  </Card>

  <Card title="Finance" icon="file-invoice-dollar" href="/finance/overview">
    Invoices, payments, orders and subscriptions in full.
  </Card>
</Columns>
