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

# Invite a client contact to the portal

> Give a client a portal login from their client record, pick which projects they can open, and understand why a portal invite always needs a client company.

You invite a portal contact from the **client record**, not from your team settings. Open the client, scroll to **Portal access**, enter their email, and send the invite.

That is the only place a portal invite can start, because a portal contact must belong to a client company.

## Why the invite starts on the client record

A portal contact is not a general login. Everything they can see is derived from the company they belong to – their projects, their invoices, their comments.

A portal login with no client company would have nothing to show and no boundary to enforce. So the rule is built into the server:

<Warning>
  A client invite with no client company is rejected. So is a client company on a non-client invite. You cannot send a portal invite from the **Invite teammate** dialog in team settings – the role list there excludes **Client** on purpose.
</Warning>

## Before you start

| Requirement                         | Why                                                                 |
| ----------------------------------- | ------------------------------------------------------------------- |
| The **Client portal** app is on     | Contacts cannot sign in while it is off, so new invites are refused |
| Your workspace is on **Pro**        | Client portal is a Pro feature                                      |
| You have a spare seat               | A portal contact uses a seat like a staff member                    |
| The client record exists            | The contact is attached to it                                       |
| The client has at least one project | Otherwise there is nothing to grant                                 |

## How to invite a client contact

<Steps>
  <Step title="Open the client">
    Go to **Clients** and click the client company – for example **Bluebird Coffee**.
  </Step>

  <Step title="Find the Portal access section">
    Scroll to **Portal access**. It sits below the client's details.

    The section explains itself: `Invite this client's contacts to the portal and choose which of their projects they can see. New contacts get access to every project of this client automatically.`
  </Step>

  <Step title="Enter the contact's email">
    Type the address in the **Contact email** field. The placeholder shows the expected shape, `contact@client.com`.
  </Step>

  <Step title="Send the invite">
    Click **Invite contact**. The button reads **Sending…** while it works.

    You get a toast confirming `Invite sent to ruth@bluebirdcoffee.com.`
  </Step>

  <Step title="Share the link, if you want to">
    A **Latest invite link** block appears with the invite URL. Click **Copy invite link** to put it on your clipboard and send it yourself.
  </Step>
</Steps>

The role is fixed. You do not pick it – a contact invited here is always a **Client**.

## What happens next

1. The contact appears under **Contacts** with an **Invite pending** badge.
2. When they accept, they get a login and move up into the contacts list with their name and email.
3. On accepting, they are automatically given access to **every current project of that client**.
4. They land on `/northwind/portal` the next time they sign in.

## Choosing which projects a contact sees

Once a contact has joined, their card shows a checkbox for each of the client's projects. Tick to grant, untick to revoke. The change saves straight away – there is no separate save button.

If the client has no projects yet, you see: `This client has no projects yet. Assign a project to this client to grant access.`

<Tip>
  You rarely need these checkboxes. Access follows the project's client automatically. Use them when one contact should be kept off a specific piece of work.
</Tip>

## Example

Priya Raman is setting up the Bluebird Coffee portal at Northwind Studio.

<Steps>
  <Step title="Open Bluebird Coffee">
    Priya goes to **Clients → Bluebird Coffee**.
  </Step>

  <Step title="Invite Ruth">
    Under **Portal access** she types `ruth@bluebirdcoffee.com` and clicks **Invite contact**.
  </Step>

  <Step title="Ruth accepts">
    Ruth clicks the link, signs in, and gets access to **Website Redesign** and **Monthly Retainer** – both Bluebird Coffee projects.
  </Step>

  <Step title="Priya narrows it">
    The Monthly Retainer work is sensitive this quarter, so Priya unticks **Monthly Retainer** on Ruth's card. Ruth now sees only **Website Redesign**.
  </Step>
</Steps>

## Options and settings

| Control                | What it does                                                      |
| ---------------------- | ----------------------------------------------------------------- |
| **Contact email**      | The address the invite goes to. Must be a valid email.            |
| **Invite contact**     | Sends the invite. Reads **Sending…** while in flight.             |
| **Copy invite link**   | Copies the most recent invite URL. Disabled until you send one.   |
| **Latest invite link** | Shows the URL of the invite you just sent.                        |
| **Contacts**           | Everyone who joined, plus everyone with an open invite.           |
| Per-project checkbox   | Grants or revokes one project for one contact. Saves immediately. |

## Permissions

The whole **Portal access** panel only renders if you hold `client.manage`. Someone without it does not see the section at all.

| Action                                 | Capability       | Roles that hold it by default |
| -------------------------------------- | ---------------- | ----------------------------- |
| See and use the Portal access panel    | `client.manage`  | Owner, Admin, Project Manager |
| Tick or untick a project for a contact | `project.manage` | Owner, Admin, Project Manager |

## Common questions

<AccordionGroup>
  <Accordion title="Can I invite a client from Settings → Team Members?">
    No. The **Invite teammate** dialog excludes the Client role. A portal contact must be tied to a client company, so the invite has to start on that company's record.
  </Accordion>

  <Accordion title="Can I invite more than one contact per client?">
    Yes. Invite each address in turn. Every contact gets their own login and their own project checkboxes.
  </Accordion>

  <Accordion title="Does a portal contact need an email address?">
    Yes. A staff member can be added without one, but a portal contact cannot – the email is how they reach the portal. Trying it returns `A client contact needs an email address, because that's how they reach the portal.`
  </Accordion>

  <Accordion title="How long is the invite link valid?">
    Seven days. After that it stops working and you send a new one.
  </Accordion>

  <Accordion title="Does the invite count as a seat before they accept?">
    Yes. An outstanding invitation counts toward your seat total, because an open invite is access.
  </Accordion>

  <Accordion title="What if the client portal is switched off?">
    The invite form is hidden. You see: `The client portal is turned off, so contacts can't sign in and no new ones can be invited. Existing access is kept and can still be removed below. An owner or admin can turn it back on in Settings → Apps.`
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Problem                                    | Cause                                                    | Fix                                         |
| ------------------------------------------ | -------------------------------------------------------- | ------------------------------------------- |
| No **Portal access** section on the client | You do not hold `client.manage`                          | Ask an owner or admin                       |
| The invite form is missing                 | The Client portal app is off                             | Turn it on in **Settings → Apps**           |
| The invite is refused                      | You are on Free, or out of seats                         | Upgrade to Pro, or free a seat              |
| `Enter a valid email address.`             | The address is malformed                                 | Check for typos and spaces                  |
| The contact joined but sees nothing        | The client has no projects, or every project is unticked | Assign a project to the client, or tick one |

## Related guides

<CardGroup cols={2}>
  <Card title="What clients can see" icon="eye" href="/portal/what-clients-can-see">
    Exactly what is visible once they are in.
  </Card>

  <Card title="Portal projects" icon="folder" href="/portal/portal-projects">
    How project access is decided.
  </Card>

  <Card title="Remove portal access" icon="user-minus" href="/portal/remove-portal-access">
    Take a contact's access away.
  </Card>

  <Card title="Client contacts" icon="users" href="/clients/client-contacts">
    Contacts on a client record.
  </Card>

  <Card title="Seats and billing" icon="credit-card" href="/team/seats-and-billing">
    Why a portal contact costs a seat.
  </Card>

  <Card title="Pending invitations" icon="mail" href="/team/pending-invitations">
    How open invites work.
  </Card>
</CardGroup>
