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

# Roles & Permissions

> Understand the different roles and what each can access in Recruitier.

## Role Types

Recruitier's agency system uses four distinct roles to manage access and permissions.
Each role serves a specific purpose within the agency hierarchy, and understanding them
is essential for setting up your team correctly.

### Owner

The **Owner** is the person who created the agency by subscribing to an Agency plan.
There is exactly one owner per agency, and this role cannot be transferred or assigned
to another user. The owner has unrestricted access to everything in the agency,
including billing, subscription management, settings, member management, and all
administrative functions.

In practice, the owner functions the same as an Admin but with the additional ability
to manage billing and subscription settings (adding/removing seats, changing plans,
viewing invoices). This billing access is exclusive to the Owner role.

### Admin

An **Admin** manages the agency without occupying a recruiter seat. Admins can view
the agency dashboard, manage members (invite, remove), access shared resources, view
team analytics, and review team projects. However, they do not have their own recruiter
workspace -- they cannot upload candidates, run searches, save jobs, or send outreach.

The Admin role is ideal for agency managers, directors, or operations staff who oversee
the team but do not recruit directly. Because they do not occupy a seat, they do not
consume a credit allocation and do not add to the agency's seat costs.

### Admin Member

An **Admin Member** is an admin who has activated their seat. They have full
administrative access **plus** a complete recruiter workspace. This is the most
comprehensive role -- it combines team management capabilities with hands-on
recruitment tools.

An Admin Member occupies one of the agency's seats and receives their own credit
allocation (5,000 credits per 30-day cycle). They can switch back to the Admin role
at any time by deactivating their seat, freeing it for another team member.

<Info>
  The Admin Member role is the recommended role for "player-coach" managers who both
  manage their team and actively recruit. It gives them full visibility into team
  performance alongside the tools they need to do their own recruitment work.
</Info>

### Member

A **Member** is a standard recruiter on the team. Members have full access to all
recruitment features (candidates, searches, jobs, outreach, projects) and can use
shared agency resources (tones of voice, pitch decks, outreach flows). They cannot
access administrative functions like the agency dashboard, member management, team
analytics, or team projects.

Members are invited by an admin and join the agency through the invitation flow. They
receive their own seat with a 5,000 credit per month allocation.

## Permission Matrix

The following table shows exactly what each role can access:

| Feature                 | Owner | Admin | Admin Member | Member |
| ----------------------- | ----- | ----- | ------------ | ------ |
| **Agency Management**   |       |       |              |        |
| Agency Dashboard        | Yes   | Yes   | Yes          | No     |
| Team Analytics          | Yes   | Yes   | Yes          | No     |
| Member Analytics        | Yes   | Yes   | Yes          | No     |
| Invite Members          | Yes   | Yes   | Yes          | No     |
| Remove Members          | Yes   | Yes   | Yes          | No     |
| Revoke Invitations      | Yes   | Yes   | Yes          | No     |
| Manage Seats            | Yes   | Yes   | Yes          | No     |
| View Team Projects      | Yes   | Yes   | Yes          | No     |
| Manage Shared Resources | Yes   | Yes   | Yes          | No     |
| Agency Settings         | Yes   | Yes   | Yes          | No     |
| Billing & Subscription  | Yes   | No    | No           | No     |
| **Recruitment Tools**   |       |       |              |        |
| Upload Candidates       | No    | No    | Yes          | Yes    |
| Run Job Searches        | No    | No    | Yes          | Yes    |
| Save Jobs               | No    | No    | Yes          | Yes    |
| Client Discovery        | No    | No    | Yes          | Yes    |
| Send Outreach           | No    | No    | Yes          | Yes    |
| Create Projects         | No    | No    | Yes          | Yes    |
| Use Shared Resources    | No    | No    | Yes          | Yes    |
| Use Personal Tags       | No    | No    | Yes          | Yes    |
| **General**             |       |       |              |        |
| Personal Settings       | Yes   | Yes   | Yes          | Yes    |

<Note>
  The key distinction is between **administrative access** (managing the team) and
  **recruiter access** (using the platform for recruitment work). Only Admin Member
  and Member roles have recruiter access because they occupy seats. The Owner and
  Admin roles without activated seats can only manage -- they cannot recruit.
</Note>

## The Role Hierarchy

The roles follow a clear hierarchy:

```
Owner (billing + all admin + optional seat)
  |
  +-- Admin (all admin, no seat)
        |
        +-- Admin Member (all admin + seat + recruitment)
        |
        +-- Member (seat + recruitment, no admin)
```

* The **Owner** sits at the top with all permissions including billing
* **Admins** have management permissions but no recruiter workspace
* **Admin Members** have everything -- management plus recruitment
* **Members** have recruitment permissions only

This hierarchy ensures that management capabilities and recruitment capabilities
are clearly separated, while the Admin Member role provides a bridge for those who
need both.

<Warning>
  An Admin without an activated seat cannot use any recruitment features. They cannot
  search for jobs, save opportunities, or send outreach. If you need to recruit, you
  must activate your seat to become an Admin Member. This is by design -- seats
  represent paid capacity, and recruitment tools require a seat allocation.
</Warning>

## Switching Between Admin and Admin Member

If you are an Admin Member, you experience both the admin panel and the recruiter
workspace. The interface adapts to show you:

* The **admin navigation** in the Agency section, with access to the dashboard,
  members, analytics, shared resources, and team projects
* The **recruiter navigation** everywhere else, with access to candidates, searches,
  jobs, clients, and outreach

You do not need to manually switch between views -- the interface displays the
appropriate options based on the section you are in. The Agency section shows admin
tools, while the rest of the application shows recruiter tools.

To switch from Admin Member back to Admin (freeing up your seat):

1. Navigate to the Members page
2. Click **Deactivate Seat**
3. Your role changes from Admin Member to Admin
4. Your seat becomes available for another team member

To switch from Admin to Admin Member (activating a seat):

1. Navigate to the Members page or respond to the "Activate Seat" banner
2. Click **Activate Seat**
3. An available unassigned seat is assigned to you
4. Your role changes from Admin to Admin Member
5. You receive the seat's credit allocation

## How Roles Are Assigned

### During Agency Creation

When you create an agency (by subscribing to an Agency plan), you are automatically
assigned the **Owner** role. You start as an Admin (without a seat) and can activate
your seat to become an Admin Member if you also want to recruit.

### During Invitation Acceptance

When a team member accepts an invitation, they are automatically assigned the
**Member** role. They receive a seat, their credit allocation, and begin with the
standard member permissions. All invited members start as Members -- they cannot be
invited directly as Admins.

### Changing Roles

Currently, role changes work as follows:

| Transition            | How                                | Who Can Do It                       |
| --------------------- | ---------------------------------- | ----------------------------------- |
| Admin -> Admin Member | Activate seat                      | Self-service (the admin themselves) |
| Admin Member -> Admin | Deactivate seat                    | Self-service (the admin themselves) |
| Member -> Admin       | Not currently supported through UI | Contact support                     |
| Admin -> Member       | Not a standard transition          | N/A                                 |

<Tip>
  If you are the agency owner and also want to recruit, activate your seat to become
  an Admin Member. This gives you the best of both worlds -- full admin control,
  billing management, and a personal recruiter workspace all in one role.
</Tip>

## Best Practices for Role Management

* **Keep admin access limited** -- Not everyone needs admin access. Only people who
  need to manage the team, view analytics, or handle shared resources should have
  admin roles. Most team members should be Members.
* **Use Admin (without seat) for managers** -- If someone only manages the team and
  does not recruit, keep them as an Admin to avoid consuming a paid seat.
* **Admin Member for player-coaches** -- If a manager also recruits, the Admin Member
  role gives them everything they need without requiring two accounts.
* **Review roles periodically** -- As your team evolves, make sure roles still match
  responsibilities. A recruiter who gets promoted to team lead might need admin access.
* **Document your role assignments** -- Keep a simple record of who has which role
  and why. This helps when onboarding new admins or when team structure changes.
* **Limit Owner role awareness** -- Since the Owner role cannot be transferred, make
  sure the person who creates the agency will be a long-term stakeholder. Do not
  create the agency from a temporary or test account.

## Advanced

### How Roles Work Under the Hood

Roles are stored in the UserAgency junction table that links users to agencies. Each
record contains:

* **user\_id** -- The user this role assignment belongs to
* **agency\_id** -- The agency the user is part of
* **role** -- The role type: ADMIN, ADMIN\_MEMBER, or MEMBER

The Owner role is determined by the `admin_id` field on the Agency entity itself,
not through the UserAgency table. This makes the owner-agency relationship immutable
at the agency level.

### Role-Seat Coupling

The relationship between roles and seats follows strict rules:

| Role                            | Seat Required?        | Credits?                   |
| ------------------------------- | --------------------- | -------------------------- |
| Owner (without seat activation) | No                    | No                         |
| Admin                           | No                    | No                         |
| Admin Member                    | Yes (occupies a seat) | Yes (5,000/month via seat) |
| Member                          | Yes (occupies a seat) | Yes (5,000/month via seat) |

When an Admin activates their seat, the system:

1. Finds an available unassigned seat in the agency
2. Assigns the admin's user\_id to the seat
3. Changes the role in UserAgency from ADMIN to ADMIN\_MEMBER
4. Checks the seat for credit refresh eligibility
5. Increments the agency's `active_seats` counter

When an Admin Member deactivates their seat:

1. Sets the seat's user\_id to null (unassigned)
2. Changes the role from ADMIN\_MEMBER back to ADMIN
3. Preserves the seat's credit balance and refresh timer
4. Decrements the agency's `active_seats` counter

### Member Removal Protection

Two critical constraints prevent problematic member removals:

* **Cannot remove the agency owner**: The owner must always exist. Since ownership
  cannot be transferred, removing the owner would leave the agency without billing
  management capability.
* **Cannot remove the last admin**: There must always be at least one user with admin
  capabilities. If the only admin is also the owner, they are doubly protected.

These constraints are enforced at the service layer and cannot be bypassed through the API.

### Connection to Shared Resources

Role determines shared resource permissions:

* **Admin/Admin Member**: Can create, edit, and delete shared resources. These are
  marked with `is_shared = true` and `agency_id = agency_id`.
* **Member**: Can view and use shared resources but cannot modify them. Members see
  shared resources in their selection dropdowns alongside their personal resources.

### Connection to Analytics

Role determines analytics visibility:

* **Admin/Admin Member**: Can access the agency dashboard, team leaderboard, and
  individual member analytics. Can view outreach statistics, credit usage, and
  activity logs for any team member.
* **Member**: Can see their own activity data through their personal dashboard but
  cannot access other members' analytics or the team-level dashboard.

### Connection to Billing

Only the **Owner** role has billing access:

* View subscription details and invoices
* Change subscription plan (monthly/quarterly/yearly)
* Add or remove seats (which triggers Stripe subscription updates)
* Manage payment methods
* View credit allocation and usage across all seats

Admins and Admin Members can manage seats through the member management interface
but cannot access billing details or change the subscription plan directly.

### Business Rules for Credit Allocation

Credits are allocated to **seats**, not to roles. This means:

* A Member and an Admin Member with the same seat age receive the same credits
* The Admin role (without seat) has zero credit allocation
* Credit refresh is based on the seat's `last_credit_refresh_at`, not the user's
  join date or role assignment date
* Changing from Admin Member to Admin does not affect the seat's credits -- they
  are preserved for the next user assigned to that seat

### Power-User Tips

* **Assign Admin Member role sparingly.** Each Admin Member consumes a seat. If you
  have 5 seats and 2 are used by Admin Members who rarely recruit, you are effectively
  limiting your recruiting capacity. Keep admin-only seats for people who actively need
  to recruit.
* **Use the permission matrix during onboarding.** When explaining Recruitier to new
  team members, share the permission matrix so they understand what they can and cannot
  access. This prevents confusion and reduces "why can't I see the dashboard?" questions.
* **Plan role transitions.** If a Member is being promoted to a management role, plan
  the transition: they will need admin access but should keep their recruiter workspace.
  The Admin Member role is the natural fit for this scenario.
* **Audit role assignments quarterly.** Check if any Admins should be Admin Members
  (or vice versa) based on their actual activity. A non-recruiting Admin Member is
  wasting a seat; a management-active Member might benefit from admin visibility.

## Related

<CardGroup cols={2}>
  <Card title="Seat Management" href="/agency/seat-management">
    Understand how seats relate to roles.
  </Card>

  <Card title="Inviting Members" href="/agency/inviting-members">
    Learn how roles are assigned during onboarding.
  </Card>

  <Card title="Agency Dashboard" href="/agency/dashboard">
    See what admins can access on the dashboard.
  </Card>

  <Card title="Shared Resources" href="/agency/shared-resources">
    Understand resource permissions by role.
  </Card>
</CardGroup>
