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

# Client contacts and portal access

> Record a client's contacts, invite them to the client portal, and choose exactly which of that client's projects each contact can see.

A client has two kinds of contact, and they are not the same thing.

| Kind                   | What it is                                                 | Where it lives                              |
| ---------------------- | ---------------------------------------------------------- | ------------------------------------------- |
| **Contact list entry** | A name, role, email and phone. A phone book, nothing more. | The **Contacts** section of the client form |
| **Portal contact**     | A real login that can sign in and see shared projects      | The **Portal access** panel                 |

Adding someone to the contact list does **not** give them access. Only a portal invite does.

## Contact list entries

These are the people you email and call. Each row holds **Name**, **Role**, **Email** and **Phone**.

<Steps>
  <Step title="Open the client">
    Click the client in **Clients**.
  </Step>

  <Step title="Click Add contact">
    A new numbered row appears.
  </Step>

  <Step title="Fill in the fields">
    Only the name matters – a row without one is discarded on save.
  </Step>

  <Step title="Click Save changes">
    You see **"Client saved."**
  </Step>
</Steps>

Use **Remove** on a row to delete it. This never affects a portal login.

## Portal contacts

The **Portal access** panel sits below the client form. It exists because a portal login must belong to a client company – you cannot invite a bare portal user with no company.

The panel does three things:

1. Invites a new contact for **this** client.
2. Lists who has joined and who still has an open invite.
3. Lets you tick which of this client's projects each contact can see.

### Invite a contact

<Steps>
  <Step title="Open the client page">
    You need the **Manage clients** capability.
  </Step>

  <Step title="Enter the contact email">
    Type it into **Contact email**. It must be a valid address.
  </Step>

  <Step title="Click Invite contact">
    You see **"Invite sent to …"**. The role is fixed to **Client** – you cannot pick a different one here.
  </Step>

  <Step title="Copy the link if you need it">
    **Copy invite link** puts the latest invite URL on your clipboard, and the link is shown under **Latest invite link**. Use it if the email is slow or blocked.
  </Step>
</Steps>

<Note>
  When the contact accepts, they automatically get access to **every project this client currently has**. Projects added later are granted when you tick them, or when the project is moved to this client.
</Note>

The full invite and acceptance flow is documented at [/portal/invite-a-client-contact](/portal/invite-a-client-contact).

### Contacts list

Below the invite form:

* **Joined contacts** show their name and email, followed by a checkbox for every project of this client.
* **Pending contacts** show the invited email and an **Invite pending** badge.

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

If nobody has been invited, you see *"No portal contacts yet. Invite one above."*

### Per-project access

Each joined contact has a checklist of this client's projects. Tick a project to grant access. Untick it to revoke.

Changes apply immediately – there is no save button. The list updates the moment the change lands.

<Warning>
  Unticking a project takes the contact's access away at once. They lose the project, its tasks and its shared documents from their portal. Nothing is deleted, and re-ticking restores access.
</Warning>

## When the Client portal app is off

If an owner or admin switches the **Client portal** app off:

* The invite form disappears. You cannot create a login that cannot be used.
* A notice explains: *"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."*
* Existing contacts and their project checkboxes stay listed, and you can still **untick** a project.

Taking access away is deliberately never harder than giving it.

## Plan gating

The client portal is a **Pro** feature. On Free the app is visible but locked behind a paywall. See [/concepts/plans-and-features](/concepts/plans-and-features).

Every portal contact is a login, so each one counts toward your seat total – the same as a staff member. See [/team/seats-and-billing](/team/seats-and-billing).

## Example

Priya Raman gives Bluebird Coffee visibility into their work.

1. She opens **Bluebird Coffee** and enters `ruth@bluebirdcoffee.com` under **Contact email**.
2. She clicks **Invite contact**. The toast reads *"Invite sent to [ruth@bluebirdcoffee.com](mailto:ruth@bluebirdcoffee.com)."*
3. The panel shows Ruth under **Contacts** with an **Invite pending** badge.
4. Ruth accepts. She now appears as a joined contact with both Bluebird projects ticked – **Website Redesign** and **Monthly Retainer**.
5. Northwind is not ready to share the retainer, so Priya unticks **Monthly Retainer**. Ruth now sees Website Redesign only.

## Permissions

| Action                         | Capability       |
| ------------------------------ | ---------------- |
| Edit the contact list          | `client.manage`  |
| See the Portal access panel    | `client.manage`  |
| Invite a portal contact        | `client.manage`  |
| Tick a project for a contact   | `project.manage` |
| Untick a project for a contact | `project.manage` |

Portal contacts themselves hold **zero** internal capabilities. They see only what is explicitly shared with their company.

## What happens next

* A pending invite counts as access. It occupies a seat and appears in your invitation list until it is accepted or revoked.
* Once accepted, the contact signs in and sees only their client's shared projects. See [/portal/what-clients-can-see](/portal/what-clients-can-see).
* Moving a project to a different client re-derives portal access automatically – the new client's contacts gain it, the old client's lose it.

## Common questions

<AccordionGroup>
  <Accordion title="What is the difference between a contact and a portal contact?">
    A contact is a name in the client's phone book. A portal contact is a login. Adding the first does not create the second.
  </Accordion>

  <Accordion title="Can I invite a portal contact from the team page instead?">
    No. A portal contact must be tied to a client company, so the invite has to start from that client's page. The server refuses a client invite that carries no company.
  </Accordion>

  <Accordion title="Can a portal contact see other clients?">
    Never. A contact only ever reaches projects belonging to their own client company, and only those you tick.
  </Accordion>

  <Accordion title="Can a portal contact see costs or margins?">
    No. Cost and margin figures are stripped before they leave the server for a portal login.
  </Accordion>

  <Accordion title="How do I remove someone completely?">
    Untick every project to cut their reach, then remove the membership from the team roster. See [/portal/remove-portal-access](/portal/remove-portal-access).
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Problem                              | Cause                              | Fix                                                                                                                            |
| ------------------------------------ | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| No **Portal access** panel           | You lack `client.manage`           | Ask an admin for **Manage clients**                                                                                            |
| Invite form is missing, notice shown | The Client portal app is off       | An owner or admin turns it on in **Settings → Apps**                                                                           |
| "Enter a valid email address."       | The address is malformed           | Check for a typo or stray space                                                                                                |
| Checkboxes will not tick             | You lack `project.manage`          | Ask an admin, or have a project manager do it                                                                                  |
| Invite email never arrived           | Delivery problem                   | Use **Copy invite link** and send it yourself. See [/troubleshooting/email-not-arriving](/troubleshooting/email-not-arriving). |
| "This client has no projects yet."   | Nothing is assigned to this client | Create a project and pick this client, or move an existing one                                                                 |

## Related guides

<CardGroup cols={2}>
  <Card title="Invite a client contact" icon="user-plus" href="/portal/invite-a-client-contact">
    The full portal invite flow.
  </Card>

  <Card title="What clients can see" icon="eye" href="/portal/what-clients-can-see">
    The portal firewall, in detail.
  </Card>

  <Card title="Remove portal access" icon="user-minus" href="/portal/remove-portal-access">
    Cut a contact off cleanly.
  </Card>

  <Card title="Client details" icon="pencil" href="/clients/client-details">
    The rest of the client page.
  </Card>

  <Card title="Seats and billing" icon="credit-card" href="/team/seats-and-billing">
    Why portal contacts count as seats.
  </Card>
</CardGroup>
