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

# Manage your client list

> Create a client record, find and edit one, import or export a list, and work the self-registration waitlist.

export const AuditNote = ({action = 'This action'}) => <div className="ck-callout ck-callout--info" role="note">
    <p className="ck-callout__body">
      {action} is written to your workspace's audit log with your name, the
      record touched and the time — a HIPAA requirement, and one you can review
      yourself under <strong>Audit Log</strong>. See{' '}
      <a href="/platform/security/audit-log">Audit log</a>.
    </p>
  </div>;

export const StillStuck = ({topic}) => <div className="ck-callout ck-callout--note" role="note">
    <p className="ck-callout__body">
      <strong>Still stuck{topic ? ` with ${topic}` : ''}?</strong>{' '}
      Check <a href="/platform/help/troubleshooting">Troubleshooting</a> first —
      it covers the failures we see most often. If that does not resolve it,{' '}
      <a href="/platform/help/contact-support">contact support</a> and include
      your workspace name and the time the problem happened, so we can find the
      matching entry in your audit log.
    </p>
  </div>;

export const TaskHeader = ({before, time, after}) => <div className="ck-task">
    {before ? <div className="ck-task__cell">
        <div className="ck-task__title">Before you start</div>
        <p className="ck-task__body">{before}</p>
      </div> : null}

    {time ? <div className="ck-task__cell">
        <div className="ck-task__title">Takes about</div>
        <p className="ck-task__body">{time}</p>
      </div> : null}

    {after ? <div className="ck-task__cell">
        <div className="ck-task__title">When you're done</div>
        <p className="ck-task__body">{after}</p>
      </div> : null}
  </div>;

export const Path = ({steps = []}) => <span className="ck-path">
    {steps.map((s, i) => <span key={i} className="ck-path__step">
        {i > 0 ? <span className="ck-path__sep" aria-hidden="true">
            ›
          </span> : null}
        {s}
      </span>)}
  </span>;

export const Availability = ({editions = ['all'], plans, roles, note}) => {
  const list = editions.includes('all') ? ['clinic', 'pharmacy', 'lims'] : editions;
  return <div className="ck-avail" role="note" aria-label="Feature availability">
      <span className="ck-avail__label">Available in</span>

      {list.map(e => <span key={e} className={`ck-pill ck-pill--${e}`}>
          {EDITION_LABELS[e] || e}
        </span>)}

      {plans ? <span className="ck-avail__label">Plan</span> : null}
      {plans ? <span className="ck-pill ck-pill--plan">{plans}</span> : null}

      {roles ? <span className="ck-avail__label">Who</span> : null}
      {roles ? <span className="ck-pill ck-pill--role">{roles}</span> : null}

      {note ? <span className="ck-avail__note">{note}</span> : null}
    </div>;
};

<Availability editions={['clinic']} plans="Solo and Team" roles="Any staff member with access to the client list" />

The client list is the single place a person is created, found and edited. Every other part of the product — appointments, notes, billing, documents — reads from it.

<Path steps={['Sidebar', 'Clients']} />

<TaskHeader before="Nothing — this is usually the first record a new practice creates" time="Under a minute for one client" after="A client record you can book, chart and bill against" />

## What you're looking at

The page is headed **Clients Management**, with four figures across the top:

| Card               | Counts                      |
| ------------------ | --------------------------- |
| **Total Clients**  | "Registered in your clinic" |
| **New Clients**    | "Last 30 days"              |
| **Active Clients** | "With recent activity"      |
| **Consultations**  | "Last 30 days"              |

The toolbar carries **Import**, **Export** and **Create client**. The row under it holds **Search clients...**, the **Client status** and **Billing type** filters, a **Waitlist** button — a toggle, not a menu, which turns amber while it is on — and a **Sort** control offering **Sort by last name**, **Sort by first name** and **Sort by date added**. A filter that is applied shows a **1** badge and gains a **Clear filter** item.

The table has five columns:

| Column       | Holds                                                     |
| ------------ | --------------------------------------------------------- |
| **Name**     | Name, client type, and the status as an editable dropdown |
| **Contact**  | Email and phone                                           |
| **Billing**  | **Self pay** or **Insurance**                             |
| **Waitlist** | A **Waitlist** badge, or **N/A**                          |
| **Action**   | The **⋯** row menu                                        |

Status is changed in place from the **Name** column — **Active**, **Inactive**, **Prospective** or **Archived** — and confirms with **Client status updated**.

A practice with no records yet gets **Your client registry is empty** instead of a table, offering **Explore with sample clients**, **Import clients** and **Add your first client**. The sample tour is for clicking around in: "About 60 seconds · nothing is saved to your clinic". When a search matches nobody you get **No clients found matching "…"** instead.

## Add one client

<Steps>
  <Step title="Select Create client">
    The intake sheet opens over the list. It runs to three steps and shows its position as **Step 1 of 3 • Basic information**.
  </Step>

  <Step title="Enter who they are">
    **Legal first name** and **Legal last name** are required; name they go by, gender and date of birth are worth filling but optional. Enter what you have — the record is editable forever and a booking does not wait on a complete profile.
  </Step>

  <Step title="Set how they pay and their status">
    **Billing type** is **Self pay** or **Insurance**, set separately for individual and group appointments. **Status** is required: **Active** or **Prospective**.
  </Step>

  <Step title="Save">
    Select **Create client**. The toast reads **Client created successfully!** and they appear in the list.
  </Step>
</Steps>

The full intake form, field by field, is walked through in [Add your first client](/practice/get-started/add-clients).

## Open or edit a record

The **⋯** menu at the end of a row offers **View details** — the full chart, see [The client chart](/practice/work/client-chart) — **Edit**, **Add sticky note**, and **Add status note** for owners, managers and clinical staff.

## Work the self-registration waitlist

If people can register themselves, their requests arrive as a waitlist rather than as live records. Anyone waiting carries a **Waitlist** badge, and the **Waitlist** toggle shows only them. Then use the row menu:

* **Approve request** opens **Approve client request** — "They'll become an active client in your clinic." Confirm with **Approve**.
* **Decline request** — "The request will be archived and removed from the waitlist. This does not notify the requester."

<Warning>
  The **Enable client portal access** checkbox on **Approve client request** — "Lets them sign in via magic link to view records, book appointments, and message your team." — **arrives already ticked**. Approve without clearing it and the toast reads **Client approved and portal access enabled**: that person now has a working login to their own records. Clear the checkbox if you are not ready for that. See [Turn on the patient portal](/portal/setup/enable).
</Warning>

## Import and export a list

**Import** opens **Bulk-import patients** — "Upload a CSV to register multiple patients in this clinic at once." Take **Download sample CSV** first so your columns match, upload the file (".csv only, max 5MB, up to 500 rows"), read the **Preview**, then run it. The **Result** panel reports **Submitted**, **Created** and **Failed**, with **Download failed rows with error column** for anything that did not land.

**Export** opens the export sheet and downloads the registry as a single file.

Import in one pass rather than in fragments — a half-imported list is harder to reconcile than a missing one.

## Who can do this

Role decides whether **Clients** opens. Permission decides what you may do once it is open.

| Action                                | Who can do it by default                                                  | Governed by                                                          |
| ------------------------------------- | ------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| Open **Clients** and search it        | Any staff member                                                          | Role                                                                 |
| Create, edit or archive a client      | Any staff member                                                          | Role                                                                 |
| See clients who are not their own     | Owner, manager, and anyone on **Full client list** or **Entire practice** | The access tier chosen when they were invited                        |
| Add a **status note**                 | Owner, manager, clinical roles                                            | Role — the item is simply absent from the **⋯** menu for anyone else |
| Approve or decline a waitlist request | Anyone who can open the list                                              | Role                                                                 |

On Solo and Team the real levers are the **role** you gave someone and the **access tier** you picked when you invited them — **Basic**, **Billing**, **Full client list** or **Entire practice**. There is no per-role navigation editor on these plans, and no per-action permission covers the client list itself: the **Permissions** sheet on a team member ("What they may do on the pages their role already opens") carries only clinical-authority acts such as signing and countersigning.

Two behaviours surprise people:

* **Enforcement is opt-in, per person.** A colleague never saved in the permissions sheet is unrestricted. The sheet warns **"Saving starts enforcing"**.
* **A denied action is recorded; an allowed one is not.** Hiding a module from somebody's sidebar is a convenience, not a security boundary.

See [Staff permissions](/platform/team/permissions).

<AuditNote action="Opening a client record" />

## Check it worked

* The client appears in the list and can be found by searching their name.
* Opening **View details** shows the details you entered.
* They can be selected when booking an appointment and when writing a note.
* An approved waitlist request no longer carries a **Waitlist** badge.

## Common issues

<AccordionGroup>
  <Accordion title="A client I just created is not in the list">
    A **Client status**, **Billing type** or **Waitlist** filter is still applied from earlier. Each filter carries a **Clear filter** item at the bottom of its menu; the **Waitlist** toggle is cleared by selecting it again.
  </Accordion>

  <Accordion title="Create client is greyed out">
    You have reached your plan's record limit. Hovering the disabled button shows the upgrade prompt. See [Change your plan](/platform/plans/change-plan).
  </Accordion>

  <Accordion title="An approved client cannot sign in to the portal">
    The **Enable client portal access** checkbox was cleared at approval. Open the record and grant access from there — see [Turn on the patient portal](/portal/setup/enable).
  </Accordion>

  <Accordion title="Some rows failed on import">
    The sheet gives you the failures back with **Download failed rows with error column**. Correct those rows and upload that file — do not re-upload the whole list, or you will duplicate the rows that already worked.
  </Accordion>

  <Accordion title="Sample clients appeared that nobody created">
    That is **Explore with sample clients**. It is a preview of the screen, separate from your real list, and "nothing is saved to your clinic".
  </Accordion>
</AccordionGroup>

## FAQ

<AccordionGroup>
  <Accordion title="What is the difference between Inactive and Archived?">
    Both take somebody out of your working list. **Inactive** is for a client you expect back; **Archived** is for one you do not. Neither deletes anything — the chart, its notes and its invoices stay exactly as they were.
  </Accordion>

  <Accordion title="Can I delete a client?">
    No. Clinical records are kept for their full retention period, so a client is retired by status rather than removed. Set them to **Archived**.
  </Accordion>

  <Accordion title="Does declining a waitlist request tell the person?">
    No — "This does not notify the requester." If they should hear from you, contact them yourself before declining.
  </Accordion>

  <Accordion title="Can two staff members edit the same client at once?">
    Yes, and the last save wins. For anything the whole team needs to see, use a sticky note on the chart rather than a field somebody else may overwrite.
  </Accordion>

  <Accordion title="Does importing send anybody an email?">
    No. An import creates records and nothing else — no portal invitation, no welcome message. Portal access is granted per person afterwards.
  </Accordion>
</AccordionGroup>

<StillStuck />
