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

# Seat Management

> Manage your team seats and control access to your agency account.

## What Are Seats?

In Recruitier, a **seat** represents one active team member slot in your agency. Each
recruiter who uses the platform requires their own seat. Seats are the unit by which your
agency subscription is billed -- the more seats you have, the more recruiters can work
simultaneously on the platform.

But seats are more than just access tokens. Each seat carries its own **credit allocation**
(5,000 credits per 30-day cycle) and its own **credit refresh timer**. This means credits
belong to the seat, not to the person sitting in it. This distinction has important
implications for how credits work when team members join, leave, or swap positions.

Think of seats like desks in an office: each recruiter needs their own desk to work. The
desk has a budget (credits) attached to it. When someone leaves, the desk stays with its
budget -- the next person who sits down inherits whatever is there.

## Understanding Seat Counts

Your agency tracks three seat numbers at all times:

| Metric               | Description                                                                                                                                                                 |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Total Seats**      | The total number of seats in your agency subscription. This is the maximum number of active recruiters you can have at any given time.                                      |
| **Active Seats**     | The number of seats currently occupied by team members (those with a user assigned). Each assigned seat contributes to this count.                                          |
| **Unassigned Seats** | The number of seats available for new team members. Calculated as Total Seats minus Active Seats. These seats are ready to be assigned when new members accept invitations. |

For example, if your agency has 10 total seats and 7 are occupied by active members, you
have 3 unassigned seats available for new recruiter invitations.

<Info>
  An "unassigned" seat is not the same as a "deleted" seat. Unassigned seats are active and
  available -- they just do not have a user currently assigned to them. They still have a
  credit balance and a credit refresh timer. This is important for understanding credit
  management.
</Info>

## Seat States

Each seat in your agency can be in one of three states:

| State          | user\_id         | is\_active | Description                                                              |
| -------------- | ---------------- | ---------- | ------------------------------------------------------------------------ |
| **Assigned**   | Set (has a user) | true       | An active member is using this seat. Contributes to active\_seats count. |
| **Unassigned** | null             | true       | Available for a new member. Has a credit balance and refresh timer.      |
| **Inactive**   | N/A              | false      | Deactivated through a subscription downgrade. Not counted in totals.     |

Understanding these states is key to managing your seats effectively. Most day-to-day
management involves assigned and unassigned seats. Inactive seats only appear when you
reduce your total seat count through billing changes.

## The Seat Management Card

The seat management card is visible on the **Members** page of the agency admin panel. It
provides a quick visual summary:

* A progress bar showing seat utilization with a percentage badge
* Three counts displayed side by side: **Active Seats**, **Unassigned**, and **Total Seats**
* Buttons to **Add Seats** or **Remove Seats** (remove is disabled when all seats are assigned)

This card updates in real time as you add members, remove members, or adjust your seat
count.

## Adding Seats

When your team grows and you need more capacity, you can add seats to your agency:

<Steps>
  <Step title="Navigate to the Members page">
    Go to the **Agency** section and select **Members** (or **Seat Management**).
  </Step>

  <Step title="Click Add Seats">
    Click the **Add Seats** button on the seat management card.
  </Step>

  <Step title="Enter the quantity">
    Specify how many additional seats you want to add. Each seat increases your total
    capacity by one and adds the per-seat cost to your subscription.
  </Step>

  <Step title="Confirm and pay">
    Review the updated seat count and the pro-rated cost. The additional seats are added
    immediately upon confirmation, and your billing is adjusted for the remainder of the
    current billing period.
  </Step>
</Steps>

New seats are added as **unassigned** seats. They become assigned when a team member is
invited and accepts, or when an admin activates their own seat.

<Note>
  Adding seats will adjust your subscription billing. The cost is **pro-rated** for the
  remainder of your current billing period. For example, if you add a seat halfway through
  a monthly billing cycle, you pay half the monthly per-seat rate for that first partial
  month. Full billing starts at the next cycle.
</Note>

## Removing Seats

If your team contracts or you have more seats than you need, you can remove unused seats:

<Steps>
  <Step title="Navigate to the Members page">
    Go to the **Agency** section and select **Members**.
  </Step>

  <Step title="Click Remove Seats">
    Click the **Remove Seats** button on the seat management card.
  </Step>

  <Step title="Enter the quantity">
    Specify how many seats you want to remove. You can only remove seats that are
    currently **unassigned** -- you cannot remove a seat that is occupied by an active
    member.
  </Step>

  <Step title="Confirm">
    Review the updated seat count and confirm the removal. The removed seats become
    inactive, and a billing credit is applied to your account for the unused portion.
  </Step>
</Steps>

<Warning>
  You cannot remove seats that are currently occupied by active team members. To free up
  a seat, you must first remove the member who is using it (which unassigns the seat),
  then remove the now-unassigned seat. This two-step process prevents accidentally
  removing active users.
</Warning>

## Seat Activation for Admins

Agency admins have a unique capability: they can choose whether to occupy a seat or not.
This is managed through the **seat activation** feature.

### Activating Your Admin Seat

If you are an agency admin and want to also work as a recruiter (running searches, managing
candidates, sending outreach), you can activate your seat:

1. Look for the **Activate Seat** banner on your admin dashboard or the Members page.
2. Click **Activate Seat**.
3. Your role changes from **Admin** to **Admin Member**.
4. One of your unassigned seats is now occupied by you.
5. You gain access to the full recruiter workspace alongside your admin tools.
6. You receive the seat's credit allocation (with a refresh if the seat is eligible).

### Deactivating Your Admin Seat

If you want to stop using a recruiter seat and return to admin-only mode:

1. Navigate to the Members page or your profile settings.
2. Click **Deactivate Seat**.
3. Your role changes from **Admin Member** back to **Admin**.
4. The seat you were using becomes unassigned and available for another team member.
5. You retain full admin access but lose the recruiter workspace.

<Tip>
  Deactivating your seat is useful if you are primarily a team manager and do not need to
  run searches or manage candidates yourself. It frees up a seat (and its credit allocation)
  for a recruiter who needs it more. You can always reactivate later if you need to jump
  back into recruiting.
</Tip>

## Seat Activation Banners

Throughout the admin interface, you may see banners prompting you to activate or manage
seats:

* **"Activate your seat"** -- Appears when you are an admin without an active seat,
  reminding you that you can activate one if you want recruiter access.
* **"No seats available"** -- Appears when all seats are occupied and you try to invite
  a new member. You will need to add more seats before proceeding.
* **"Seats available"** -- Shows the number of unassigned seats, indicating capacity for
  new team members.

## How Seats Relate to Credits

The relationship between seats and credits is fundamental to understanding agency billing:

* Each seat receives **5,000 credits per 30-day cycle**
* Credits belong to the **seat**, not to the user assigned to it
* Each seat has its own independent `last_credit_refresh_at` timestamp
* When 30+ days have elapsed since the last refresh, the seat is eligible for a new 5,000 credits
* Unassigned seats retain their credit refresh timer -- it does not pause or reset

This seat-based credit model means:

| Scenario                                       | What Happens to Credits                                                   |
| ---------------------------------------------- | ------------------------------------------------------------------------- |
| New member joins and is assigned a seat        | Member gets the seat's current credit balance, plus a refresh if eligible |
| Member leaves and seat is unassigned           | Seat retains its credits and timer. Credits are not lost.                 |
| Different member is assigned to the seat later | New member inherits the seat's current credit balance and timer           |
| Seat's 30-day timer expires while unassigned   | Timer continues running. Next assigned user gets the refresh.             |

<Warning>
  The credit refresh timer is deliberately preserved when a seat is unassigned. This
  prevents an exploitation pattern where an admin could unassign and reassign a seat
  to trigger extra credit refreshes. The timer runs continuously regardless of seat
  assignment status.
</Warning>

## How Seats Relate to Billing

Seats are the primary billing unit for agency subscriptions:

| Billing Aspect        | How It Works                                                                                            |
| --------------------- | ------------------------------------------------------------------------------------------------------- |
| **Base cost**         | Each seat has a per-month cost based on your plan (monthly: $225, quarterly: $191/mo, yearly: \$157/mo) |
| **Adding seats**      | Pro-rated charge for the remainder of the current billing cycle                                         |
| **Removing seats**    | Billing credit applied for the unused portion of the current cycle                                      |
| **Credit allocation** | Each active seat receives 5,000 credits per 30-day refresh cycle                                        |

For complete details on how seat-based billing works, including prorated charges and
plan comparisons, see [Team Billing](/billing/team-billing).

## Best Practices

* **Right-size your seats** -- Do not buy more seats than you need. You can add more
  instantly at any time with pro-rated billing, so there is no benefit to over-provisioning.
  Excess seats cost money even if no one is using them.
* **Remove members before removing seats** -- If a team member leaves, first remove them
  from the agency (which unassigns their seat), then remove the seat if you do not plan
  to replace them. This two-step process keeps things clean.
* **Monitor utilization** -- Check the seat management card regularly. If you have seats
  that are paid for but unassigned for more than a billing cycle, consider removing them
  to save costs.
* **Plan for growth** -- If you know you will be hiring soon, add seats a day or two before
  you send invitations. This makes the invitation process seamless.
* **Use admin seat activation strategically** -- If you only recruit part-time, activate
  your seat during busy periods and deactivate during management-heavy periods. This
  flexibility is unique to the Admin role.

## Advanced

### How Seats Work Under the Hood

Each seat is stored as its own entity with the following key fields:

| Field                    | Description                                              |
| ------------------------ | -------------------------------------------------------- |
| `id`                     | Unique identifier for the seat                           |
| `agency_id`              | The agency this seat belongs to                          |
| `user_id`                | The user assigned to this seat (null if unassigned)      |
| `is_active`              | Whether the seat is active (true) or deactivated (false) |
| `credits`                | The current credit balance on this seat                  |
| `last_credit_refresh_at` | When credits were last refreshed on this seat            |

### Seats Are Never Deleted

A critical implementation detail: seats are **never deleted** from the database. When you
"remove" a seat through the UI, it is marked as inactive (`is_active = false`). The seat
record persists with its history. This approach preserves audit trails and prevents data
integrity issues.

When seats are "added," new seat records are created (during subscription purchase or
upgrade). Seats are only created through the billing flow, never through the member
management flow. This ensures that every seat corresponds to a paid subscription unit.

### Seat Creation vs. Assignment

There is an important distinction between seat creation and seat assignment:

* **Seat creation** only happens during subscription purchase or when adding seats through
  billing. This is the moment a new seat entity is created in the database.
* **Seat assignment** happens when a member accepts an invitation or when an admin
  activates their seat. This updates the seat's `user_id` field but does not create a
  new seat.

This separation means that member management (invite, remove) operates on existing seats,
while billing management (add seats, remove seats) creates or deactivates seat entities.

### Credit Refresh Mechanics

The credit refresh follows these exact rules:

1. Check if `current_date - last_credit_refresh_at >= 30 days`
2. If yes, add 5,000 credits to the seat's balance
3. Update `last_credit_refresh_at` to the current date
4. The refresh happens when a user performs a credit-consuming action (not on a schedule)

The refresh is triggered lazily -- there is no background job that refreshes credits. When
a seated user performs an action that consumes credits, the system first checks if a
refresh is due and applies it before deducting the action cost.

### Connection to Member Removal

When a member is removed from the agency:

1. The seat's `user_id` is set to null (seat becomes unassigned)
2. The seat's `is_active` remains true (seat is available)
3. The seat's `credits` balance is preserved
4. The seat's `last_credit_refresh_at` is preserved
5. The agency's `active_seats` counter is decremented

The preserved credit and timer state means the next person assigned to this seat
inherits the exact credit situation. This prevents gaming the system through rapid
member cycling.

### Connection to Billing (Stripe)

Seat additions and removals trigger Stripe subscription updates:

* **Adding seats**: Creates a pro-rated invoice line item for the additional seats
* **Removing seats**: Applies a credit to the customer's Stripe balance
* **Plan changes**: When switching between monthly/quarterly/yearly, all seats are
  recalculated at the new rate

The Stripe webhook handler processes these changes and updates the agency's seat count
accordingly.

### Edge Cases

* **All seats occupied, admin wants to activate**: The admin must add a new seat first
  or remove an existing member to free a seat before activating their own.
* **Single-seat agency**: An agency can have as few as one seat. If the admin is the
  only user and they deactivate their seat, the agency has one total seat and zero
  active seats.
* **Rapid assignment cycling**: If a seat is unassigned and reassigned within the same
  30-day window, no extra credit refresh occurs because the timer was never reset.

### Power-User Tips

* **Track credit refresh dates.** Know when each seat's credits refresh so you can plan
  high-credit-usage activities (like bulk searches or outreach campaigns) to start just
  after a refresh.
* **Use unassigned seats strategically.** If you know a new hire is starting next month,
  keep a seat unassigned rather than removing it. The seat accumulates time toward its
  next credit refresh, and the new hire may receive fresh credits on day one.
* **Monitor seat utilization ratio.** If your active-to-total seat ratio is below 80%
  for more than a month, you are paying for unused capacity. Consider removing excess seats.

## Related

<CardGroup cols={2}>
  <Card title="Inviting Members" href="/agency/inviting-members">
    Send invitations to fill your seats.
  </Card>

  <Card title="Roles & Permissions" href="/agency/roles-permissions">
    Understand how seats relate to roles.
  </Card>

  <Card title="Agency Overview" href="/agency/overview">
    Learn about the full agency feature set.
  </Card>

  <Card title="Agency Dashboard" href="/agency/dashboard">
    Monitor how your team uses their seats.
  </Card>
</CardGroup>
