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

# The team members roster

> Read the workspace roster – its columns, statuses, filters and row menus – then invite someone, add a person directly, or remove them safely.

**Team members** is the roster of everyone with access to your workspace, plus
everyone waiting on an invitation. It is where you add people, change what they
are, and take them out again.

Open it at **Settings → Team Members**, or go to
`/{workspaceSlug}/settings/team-members`.

## Who can open this screen

Everyone. The roster is not hidden from anybody in the workspace.

What you can **do** on it is a different question. Each action carries its own
capability, and controls you cannot use are not shown.

| Action                  | Capability          | Who holds it by default       |
| ----------------------- | ------------------- | ----------------------------- |
| Send an invite          | `member.invite`     | Owner, Admin, Project Manager |
| Add a person directly   | `member.create`     | Owner, Admin                  |
| Change someone's role   | `member.changeRole` | Owner, Admin                  |
| Remove someone          | `member.remove`     | Owner, Admin                  |
| Revoke a pending invite | `invite.revoke`     | Owner, Admin, Project Manager |

## The page header

Above the roster sit the seat count and the two ways to add a person.

### The seat count

When your plan has a seat limit, the header shows where you stand, itemised. For
example: `3 of 3 seats – 2 members, 1 pending invite`.

The breakdown separates staff, client-portal contacts and pending invitations,
because all three take a seat.

<Warning>
  **An open invitation is access.** An invite you have sent but nobody has accepted
  still counts toward your seat limit, exactly like an active person. The Free plan
  allows 3.
</Warning>

If you are at the limit, clicking **Invite teammate** or **Add member** opens the
upgrade dialog instead of the form. The block is stated before you fill anything
in, not after.

Being over the cap is never punished. A 5-person workspace that drops to Free
keeps all 5 people working. The limit only bounds the next person you add.

### The two buttons

There are two doors onto the roster, and they are genuinely different acts.

| Button              | What it does                                                              | Capability      |
| ------------------- | ------------------------------------------------------------------------- | --------------- |
| **Invite teammate** | Offers access to an email address and waits for them to accept.           | `member.invite` |
| **Add member**      | Creates the person outright, with their role, rates and groups filled in. | `member.create` |

A Project Manager sees only **Invite teammate**, because that is the only one they
may use.

## The roster table

One table holds active members and standalone invitations together. The **Status**
column tells them apart.

| Column      | What it shows                                                                                                                                            |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Name        | Their picture, their name as a link to their record, and their email underneath. Your own row is marked **(you)**. A row with no email reads "No email". |
| Employee ID | Your own staff or payroll number for them, or a dash.                                                                                                    |
| Groups      | One badge per group they belong to, primary group first, or a dash.                                                                                      |
| Role        | Their role as a badge.                                                                                                                                   |
| Status      | Where they stand on access.                                                                                                                              |

Use the **Search members…** box to filter. It matches both names and email
addresses. Click a column header to sort by it. The list pages when it gets long.

An empty roster tells you to use **Invite teammate** to add someone.

### What the statuses mean

The Status column is about **access**, not about being on the roster.

| Status          | Meaning                                                                                        |
| --------------- | ---------------------------------------------------------------------------------------------- |
| **Active**      | They have signed in at least once.                                                             |
| **Invited**     | They are on the roster and have an email address, but have not claimed their account yet.      |
| **No login**    | They are on the roster with no email address at all. This is a supported state, not a mistake. |
| **Deactivated** | Somebody switched their access off. They stay on the roster and keep their history.            |
| **Pending**     | A standalone invitation. Nobody is on the roster for this address yet.                         |

<Note>
  A person you added without an email folds their invitation into their own row
  once you give them one. They are one person, listed once – never a member row and
  an invite row for the same human.
</Note>

## Invite a teammate

<Steps>
  <Step title="Click Invite teammate">
    The **Invite a teammate** dialog opens.
  </Step>

  <Step title="Enter their email">
    An address that is not valid is refused with "Enter a valid email address."
  </Step>

  <Step title="Pick a role">
    The picker offers every role in your workspace except Owner and Client. It
    opens on **Member**.
  </Step>

  <Step title="Click Send invite">
    The invite goes out by email and a confirmation message names the address.
  </Step>

  <Step title="Share the link if you prefer">
    **Copy invite link** copies the same secure link the email carries. The panel
    below the buttons shows it as **Latest invite link**.
  </Step>
</Steps>

The person lands straight in this workspace when they accept. An invite lasts
**7 days**.

**Owner is never invitable.** Ownership is only ever handed over by an existing
owner, on a person's record.

**Client contacts are invited elsewhere.** A portal contact has to be tied to a
client company, so they are invited from that client's own page, never from here.

## Add a member directly

Use this when you already know everything about the person, or when they do not
need to sign in at all.

<Steps>
  <Step title="Click Add member">
    The **Add a team member** dialog opens.
  </Step>

  <Step title="Fill in who they are">
    A picture is optional. **First name** is required. **Last name** is optional.
  </Step>

  <Step title="Decide about email">
    **Email (optional)** is exactly that. Fill it in and they get an invite. Leave
    it blank and they become a real member who cannot sign in.
  </Step>

  <Step title="Pick a role and groups">
    **Role** offers every role except Owner and Client, and opens on **Member**.
    **Groups** is a multi-select – the first group you pick is their primary one.
  </Step>

  <Step title="Set their rates">
    **Billing rate / hour** and **Cost rate / hour** are in your workspace's base
    currency. Enter an amount like `120` or `120.50`.
  </Step>

  <Step title="Open More details if you need it">
    Job title, employment type, employee ID, joining date and termination date.
  </Step>

  <Step title="Click Add member">
    The confirmation says whether an invite went out, or that they cannot sign in
    until you add an email.
  </Step>
</Steps>

### The fields

| Field               | Notes                                                                                                     |
| ------------------- | --------------------------------------------------------------------------------------------------------- |
| Picture             | Optional. Attached when the person is created.                                                            |
| First name          | Required.                                                                                                 |
| Last name           | Optional.                                                                                                 |
| Email               | Optional. Blank means no sign-in.                                                                         |
| Role                | Required. Owner and Client are never offered.                                                             |
| Groups              | Only shown if the workspace has groups and you hold `member.changeRole`. First pick is the primary group. |
| Billing rate / hour | Only shown if you hold `rate.manage`.                                                                     |
| Cost rate / hour    | Only shown if you hold `rate.manage` **and** `rate.viewCost`.                                             |
| Job title           | Under **More details**. Free text, for example `Senior Designer`.                                         |
| Employment type     | **Employee**, **Contractor** or **Part time**. Drives capacity and cost reporting, never permissions.     |
| Employee ID         | Your own staff or payroll number. Must be unique in this workspace.                                       |
| Joining date        | Optional.                                                                                                 |
| Termination date    | HR record only. It never removes their access. Cannot be before the joining date.                         |

The form only shows you what you may actually set. Someone without rate
permissions never sees the rate fields, rather than seeing fields that would be
refused when they save.

<Note>
  **A person with no email is a real member.** They appear in reports, they can
  have time logged for them, they can carry rates and a schedule. The one thing
  they cannot do is sign in. This is how you put offline staff and freelancers on
  the books.
</Note>

## Row actions

Each row has a three-dot menu at the end. What is in it depends on the row.

### On a member

| Item                      | What it does                                                                  |
| ------------------------- | ----------------------------------------------------------------------------- |
| **Open record**           | Goes to their full record.                                                    |
| **Add email & invite**    | Only for someone with no email. Adds an address and sends them an invite.     |
| **Resend invite**         | Only when they have an open invite. Sends a fresh link and kills the old one. |
| **Revoke invite**         | Only when they have an open invite. Withdraws the link.                       |
| **Remove from workspace** | Takes them out. Greyed out on your own row.                                   |

### On a pending invitation

| Item              | What it does                                                                   |
| ----------------- | ------------------------------------------------------------------------------ |
| **Resend invite** | Sends the invitation again to the same address.                                |
| **Change role**   | Re-points the open invite at a different role. Greyed out for client contacts. |
| **Revoke invite** | Cancels the invitation.                                                        |

## The dialogs

<AccordionGroup>
  <Accordion title="Add email & invite">
    Headed **Invite** with the person's name. One **Email** field, then **Send
    invite**. Their tracked time, rates and groups stay exactly as they are – only
    an address is added. This fills a blank, it never changes an existing address.
  </Accordion>

  <Accordion title="Change role (on a pending invite)">
    Headed **Change role for** the address. One **Role** picker, then **Save**.
    They get the new role when they accept, and their existing invite link keeps
    working. Owner and Client are not offered. A client contact's role belongs to
    the client page it came from, so the item is disabled for them.
  </Accordion>

  <Accordion title="Revoke invite">
    A confirmation that names the address and explains that anyone already on the
    roster stays on it. They only lose the ability to claim a login until you
    invite them again. This cannot be undone.
  </Accordion>

  <Accordion title="Remove member">
    A confirmation headed **Remove** with the person's name. It states they lose
    access to the workspace immediately and that it cannot be undone.
  </Accordion>
</AccordionGroup>

## The member record

Clicking a person's name opens their record at
`/{workspaceSlug}/settings/team-members/<id>`. The page header shows their
picture, name, role badge, email and – when something is outstanding – their
access status.

Sections run across the top. A section only appears if you can actually read it,
so you never land on a tab that dead-ends.

| Section           | What is on it                                                                                                        | Who sees it                                                           |
| ----------------- | -------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| **Profile**       | Picture, display name, role picker, and the Remove and Access controls                                               | Anyone who can open the record                                        |
| **Employment**    | Job title, employment type, employee ID, joining and termination dates, groups, manager, and the clock in/out switch | `member.changeRole`                                                   |
| **Rates**         | Their billing and cost rates over time                                                                               | `rate.viewBilling`                                                    |
| **Schedule**      | The working schedule assigned to them                                                                                | `schedule.manage`                                                     |
| **Time off**      | Leave balances and manual adjustments                                                                                | `leave.viewOthers` and this person in your scope, or your own record  |
| **Location**      | Whether location rules apply to them                                                                                 | `location.manage`                                                     |
| **Notifications** | Their notification choices                                                                                           | `member.changeRole` and this person in your scope, or your own record |

Your own record is always yours. Reading someone else's needs
`member.changeRole`, otherwise the page says you do not have permission.

<Note>
  Two of these sections need **capability and scope**. Holding `leave.viewOthers`
  does not mean this particular person is inside your supervision scope. Both have
  to pass, which is why the tab can be missing even when you hold the permission.
</Note>

### On the Profile section

* **Display name** – how they appear in this workspace. Leave it blank to use
  their account name.
* **Role** – change what they are. Disabled unless you hold `member.changeRole`,
  with a line explaining why.
* **Access** – a **Can open this workspace** switch. Turning it off stops them
  signing in without removing them or anything they have logged. The confirmation
  offers an undo.
* **Transfer ownership** – only shown to an Owner. Hands the workspace to this
  person and drops you to Admin. You cannot undo it yourself.
* **Remove from workspace** – a destructive button that opens a confirmation. Not
  shown on your own record.

## Remove a member

<Steps>
  <Step title="Open the three-dot menu, or their record">
    Choose **Remove from workspace**, or use the red button on their Profile
    section.
  </Step>

  <Step title="Read the confirmation">
    It names the workspace and states that their logged time, rates and history
    are kept, and that the removal cannot be undone.
  </Step>

  <Step title="Click Remove member">
    A "Member removed." message confirms it.
  </Step>
</Steps>

### What happens to their work

| What                        | What happens                                                                           |
| --------------------------- | -------------------------------------------------------------------------------------- |
| Tracked time                | Kept. Every entry stays on its task and project, and stays in reports.                 |
| Rates                       | Kept. Historic cost and revenue still calculate correctly.                             |
| Timesheets and approvals    | Kept, including anything already approved.                                             |
| Their access                | Ends immediately, on every device.                                                     |
| Their pending invitation    | Revoked in the same step, because an open invite is access.                            |
| People who reported to them | Their manager field is cleared, so the org chart never points at somebody who is gone. |

<Warning>
  Removal is not reversible. To bring them back you invite them again, which starts
  a new membership.
</Warning>

### Owners have to hand over first

The last Owner can never be removed, and only an existing Owner may remove an
account that holds the Owner role.

If Maya Ellis is leaving Northwind Studio, she uses **Transfer ownership** on
Tom Whitfield's record first. Once Tom is the Owner, Maya can be removed.

You also cannot remove yourself from this screen. **Remove from workspace** is
greyed out on your own row.

## Example

Northwind Studio is on Free, with 3 seats.

<Steps>
  <Step title="Maya invites Sarah">
    Maya (Owner) clicks **Invite teammate**, enters Sarah Lin's address, leaves
    the role on **Member**, and sends it. The header now reads `2 of 3 seats`,
    counting Maya and Sarah's open invite.
  </Step>

  <Step title="Maya adds Ana directly">
    Ana Ferreira is a freelance copywriter who does not want a login. Maya clicks
    **Add member**, enters her name, leaves the email blank, picks
    **Contractor**, and sets a billing rate of `80` and a cost rate of `55`.
  </Step>

  <Step title="Ana appears as No login">
    Ana is on the roster with the **No login** status. Sarah can log time against
    Ana's copywriting tasks, and Ana's hours show in reports at \$80 an hour.
  </Step>

  <Step title="The workspace hits the cap">
    The header reads `3 of 3 seats`. Clicking **Invite teammate** now opens the
    upgrade dialog rather than the invite form.
  </Step>

  <Step title="Ana later needs a login">
    Maya opens Ana's three-dot menu, picks **Add email & invite**, and enters her
    address. Ana's rates, groups and logged time all stay exactly as they were.
  </Step>
</Steps>

## Common questions

<AccordionGroup>
  <Accordion title="Why is someone listed twice?">
    They should not be. A person added directly who is then invited keeps one row,
    with their invitation managed from their own three-dot menu. A separate
    **Pending** row means nobody is on the roster for that address yet.
  </Accordion>

  <Accordion title="Why can't I invite an Owner?">
    Ownership is never handed out at invite time. Only an existing Owner can grant
    it, through **Transfer ownership** on a person's record.
  </Accordion>

  <Accordion title="How do I invite a client contact?">
    From that client company's own page, not from here. A portal contact has to be
    tied to a client, and an invite with no company is refused.
  </Accordion>

  <Accordion title="Does a client contact use a seat?">
    Yes. A portal contact is a login like any other. The seat label lists them
    separately so the number is never a surprise on your invoice.
  </Accordion>

  <Accordion title="What is the difference between deactivating and removing?">
    Deactivating switches their access off but leaves them on the roster, and it
    can be switched back on. Removing takes them off the roster and cannot be
    undone.
  </Accordion>

  <Accordion title="Does a termination date remove someone's access?">
    No. It is a record for your own HR purposes. Access ends only when you switch
    it off or remove them, so you can enter a leaving date in advance without
    locking anybody out.
  </Accordion>

  <Accordion title="Can I remove myself?">
    Not from this screen. **Remove from workspace** is disabled on your own row.
    Leave the workspace from your own account instead.
  </Accordion>
</AccordionGroup>

## Troubleshooting

| Problem                                   | What to check                                                                                        |
| ----------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| The **Add member** button is missing      | You hold `member.invite` but not `member.create`. Adding a person directly is Owner and Admin only.  |
| Clicking a button opens an upgrade dialog | You are at your seat limit. Remove someone, revoke an unused invitation, or upgrade.                 |
| "Couldn't remove that member"             | You may lack `member.remove`, or this is the last Owner. Transfer ownership first.                   |
| The email address is refused              | Somebody else in the workspace is already using it.                                                  |
| The employee ID is refused                | Employee IDs have to be unique in the workspace.                                                     |
| A section is missing on someone's record  | You either lack the capability, or that person is outside your supervision scope. Both have to pass. |

## Related guides

<CardGroup cols={2}>
  <Card title="Invite a member" icon="envelope" href="/team/invite-a-member">
    The invite flow end to end, and what the person sees.
  </Card>

  <Card title="Add a member directly" icon="user-plus" href="/team/add-a-member-directly">
    Putting offline staff and freelancers on the roster.
  </Card>

  <Card title="The member record" icon="id-card" href="/team/member-record">
    Every section on one person's page.
  </Card>

  <Card title="Remove a member" icon="user-minus" href="/team/remove-a-member">
    What survives a removal, and how to hand over ownership.
  </Card>

  <Card title="Seats and billing" icon="credit-card" href="/team/seats-and-billing">
    What counts as a seat and when the next person is blocked.
  </Card>

  <Card title="Roles" icon="key" href="/settings/roles">
    Build the roles you assign on this screen.
  </Card>
</CardGroup>
