# Team management

Invite members, pick a role, scope access per project and language, and handle role changes, removals, ownership transfer and the audit log.

Canonical: https://comvi.io/docs/platform/team-management

Each member has an organization role, an optional project assignment, and optional language
restrictions. The full permission matrix is on [Roles & permissions](/docs/platform/roles-permissions).

## Invite a member

1. Open **Organization → Members** in the sidebar and click **Invite member**.

2. Enter their email address and pick an organization role.

3. Leave **Restrict to project** on *All projects* for organization-wide access, or pick
   one project. With a project picked, **Restrict to languages** appears: tick the languages
   they should work on, or leave it empty for all.

4. Click **Send invitation**. The join link is valid for 7 days. Someone who already has a
   Comvi account is added immediately and gets a notification email instead.

Organization-wide members count against the plan's member limit: 2 on the free plan, 5 on
early adopter, plus 1 per member add-on. Going over returns "Member limit reached". Members
scoped to a single project do not count.

| Role | Edit values | Approve values | Edit keys and settings | Manage members | Deploy |
|---|:---:|:---:|:---:|:---:|:---:|
| **Owner** | ✓ | ✓ | ✓ | ✓ | ✓ |
| **Manager** | ✓ | ✓ | ✓ | ✓ | ✓ |
| **Editor** | ✓ | ✓ | ✓ | | |
| **Translator** | ✓ | | | | |
| **Viewer** | | | | | |

## How access resolves

When a member opens a project, their effective role is the first that applies:

1. A **project assignment** for this project. The effective role is the lower of that role
   and their organization role.
2. Their **organization role**, if they are organization-wide with no assignment here.
3. **No access** otherwise.

An assignment narrows access and never raises it: a Manager can be made Editor on one
project, but a Viewer cannot be made Translator. Nobody can grant a role above their own or
change their own role.

Language restrictions live on the project assignment. A restricted member still sees the
other languages for reference but cannot edit them. Owners and Managers cannot be
restricted. Set restrictions on the invite, or later under **Settings → Project Access**
with **Change role & languages**.

## Common setups

- **Small in-house team.** Developers as **Editor**, the PM as **Manager**, both
organization-wide. The first translator joins as **Translator**, restricted to the project
and their language.
- **Freelance translator.** **Translator**, **Restrict to project** set to the project,
their locale ticked under **Restrict to languages**. Remove them from the organization
when the contract ends; their comments and history stay attributed to their account.
- **Translators and reviewers.** Translators as **Translator**, reviewers as **Editor**,
and the Content Deploy status filter set to **Translated**, otherwise drafts ship. See
[Translator and reviewer workflow](/docs/platform/recipes/translator-review-workflow).
- **Agency running client projects.** One organization per client. Staff as **Manager**,
the client stakeholder as **Viewer**, external translators as **Translator** scoped to a
project and their languages.
- **Read-only stakeholder.** **Viewer**, organization-wide or restricted to one project.

## Manage members

- **Change a role.** **Organization → Members**, the row menu, **Change role**.
**Preview impact** in that dialog shows the effective permissions before and after.
- **Resend or cancel an invitation.** Pending invitations sit in the same list.
**Resend invitation** sends a fresh email without extending the 7-day window and is
disabled once it has expired; cancel an expired invitation and invite again.
- **Remove a member.** The row menu, **Remove member**. They lose access to every project
immediately. History, comments and audit entries stay attributed to their account.
- **Audit log.** The **Audit Log** card below the members list records role changes,
invitations and removals, filterable by action type and searchable by name.

## Transfer ownership

1. Open **Organization → Members** as the current Owner.

2. Click **Transfer Ownership** in the header.

3. Pick a member with organization-wide access and confirm.

The new Owner takes the role and the previous Owner becomes a Manager. A member with only a
project-level membership is refused with "Ownership can only be transferred to an
organization-wide member"; give them organization-wide access first.

> **An organization always keeps one Owner**
>
> The last Owner cannot be removed or demoted, and an Owner cannot be removed at all while
> a paid subscription is linked to the organization. Transfer first.

## Next steps

- [Roles & permissions](/docs/platform/roles-permissions): Permission matrix and override rules.
- [Translation lifecycle](/docs/platform/translation-lifecycle): Who can move a value through which status.
- [API keys](/docs/platform/api-keys): Machine credentials for the CLI, CI and automation.
