> ## 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.

# Patient portal settings

> Name, brand and publish the secure area where patients sign in — and learn why the green Live button is not a save button.

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="Starter and above" roles="Owner only to edit" note="Messaging and Notifications tabs: Essential and above" />

The patient portal is a secure web area where patients sign in to see appointments, documents and telehealth links, and message the hospital. This tab names it, brands it, decides which parts of it exist, and puts it online.

<Path steps={['Sidebar', 'Settings', 'Patient Experience', 'Patient Portal']} />

<TaskHeader before="A name for the portal and an unused web address" time="10 minutes, plus the tabs you choose to configure" after="A published portal patients can sign in to" />

## What this tab controls

At the top sits a hero card: the master **Client Portal** switch, the live address on `client.clinikehr.com` with copy and open buttons, and the publish button. Below it, seven tabs.

| Tab               | What it controls                                                                                        | Gate      |
| ----------------- | ------------------------------------------------------------------------------------------------------- | --------- |
| **Branding**      | **Portal Name**, **URL Slug**, **Welcome Message**, logo, colours, font. Both required fields live here | Starter   |
| **Appointments**  | Whether patients can see, request, reschedule or cancel appointments, and the start times offered       | Starter   |
| **Messaging**     | Secure two-way messaging, including automated replies                                                   | Essential |
| **Telehealth**    | Whether patients join video visits from the portal, and the video provider                              | Starter   |
| **Documents**     | Which documents patients can read, download and sign                                                    | Starter   |
| **Notifications** | What the portal emails patients about                                                                   | Essential |
| **Privacy**       | Self-registration, identity checks and what a patient may see of their own record                       | Starter   |

The tab-by-tab detail is covered in [Enable the portal](/portal/setup/enable) and [Portal features](/portal/setup/features) rather than repeated here.

<Note>
  The switch in the hero card is labelled **Client Portal** while the sidebar calls the tab **Patient Portal**. Same portal, same people — help pages bold what is actually on your screen.
</Note>

## Set it up

<Steps>
  <Step title="Name the portal">
    On **Branding**, enter a **Portal Name** — what patients see at the top of the page, usually the hospital's name.
  </Step>

  <Step title="Claim your address">
    Still on **Branding**, enter a **URL Slug**. It is checked as you type for shape, for reserved and unsuitable words, and against every other workspace. Your address becomes `client.clinikehr.com/` plus that slug.
  </Step>

  <Step title="Turn the master switch on">
    In the hero card, switch **Client Portal** on. Its caption changes from "Currently disabled" to "Active & accessible".
  </Step>

  <Step title="Work through the seven tabs">
    Decide what the portal offers before anyone can reach it. Start with **Privacy** — it governs who may register — then **Appointments** and **Documents**.
  </Step>

  <Step title="Select Save Changes">
    The button saves and publishes in one action. It then turns green and reads **Live** with a pulsing dot.
  </Step>
</Steps>

<Warning>
  Once the portal is live, that green **Live** button is **not** a save button. Selecting it **unpublishes the portal** — the tooltip reads "Unpublish Client Portal" and you get "Portal unpublished successfully". Every patient is then facing a portal that no longer exists. To change a setting on a live portal, edit it and use the **Save Changes** button at the foot of the page; leave the green **Live** button alone unless you genuinely intend to take the portal down.
</Warning>

## What changes once you save

Publishing puts your address online. Nobody is signed in yet, because **two conditions must both hold before any one patient can get in**:

1. The hospital-wide switch on this tab, and
2. **that individual patient's own portal access**, set on their record.

A patient who cannot sign in almost always has the second one switched off, not the first. That is deliberate — publishing the portal must not hand an account to every person on the hospital's list.

Enabling the portal also enables **individual self-registration**, because those permissions default to on. If you want to invite people one at a time instead, open **Privacy** and turn self-registration off before you publish.

Elsewhere in the product, a patient record gains portal status, and documents you send become readable in the portal rather than only through an emailed link. Turning a feature tab off later removes it from the portal at once; it does not delete anything a patient already saw.

Only the owner can change any of this. Managers and accountants who can reach settings see the whole tab read-only.

## Check it worked

Copy the address from the hero card and open it in a private browser window. You should reach a branded sign-in page carrying your **Portal Name**, not a not-found error. Then enable portal access for one real patient and ask them to confirm they can sign in and see their next appointment.

## Common issues

<AccordionGroup>
  <Accordion title="The save button will not respond">
    Save is blocked until both **Portal Name** and **URL Slug** are filled in. Until the slug exists the hero card says "Set a URL slug in Branding to publish your portal". It is also blocked while the slug check is failing.
  </Accordion>

  <Accordion title="An Unlock the Client Portal panel covers everything">
    The portal starts on Starter: "The Client Portal is a premium feature available on our Starter, Essential and Team plans." See [Change your plan](/platform/plans/change-plan).
  </Accordion>

  <Accordion title="Messaging and Notifications have a small shield on them">
    Those two tabs need Essential or above. The rest of the portal works without them.
  </Accordion>

  <Accordion title="I can see the tab but nothing will change">
    Only the owner can edit portal settings. Everyone else with settings access sees it read-only.
  </Accordion>

  <Accordion title="My slug is rejected">
    Slugs must be lowercase letters, numbers and hyphens, must not be a reserved word, and must be unused across every workspace — not only yours. The indicator under the field names the rule that failed.
  </Accordion>

  <Accordion title="A patient says they cannot sign in">
    Check the second condition: open their record and confirm portal access is on for them. A published portal alone does not create accounts.
  </Accordion>
</AccordionGroup>

<StillStuck />
