Skip to main content

Seat-based billing model

Seat-based billing is modeled at the billing account level. The account pays for the team, and each active billing user under the account consumes one seat.

Configuration​

Define seat packaging in billing plan or catalog metadata:

{
"seat_limit": {
"mode": "fixed",
"limit": 5
}
}

For quantity-based subscriptions:

{
"seat_limit": {
"mode": "per_unit",
"seats_per_unit": 1
}
}

Provider sync writes the effective value to billing_accounts.seat_limit.

Runtime behavior​

Runtime requests still include both X-Principal-Id and X-User-Id. Vluna resolves them to a billing account and billing user. The guard rejects disabled/deleted billing users, but it does not count seats on every request.

Seat capacity is enforced when active billing users are created or restored:

  1. Billing account owns seat_limit.
  2. Active billing users consume seats.
  3. Disabled/deleted billing users do not consume seats.
  4. seat_limit = null means unlimited.
  5. Downgrades can make an account over limit without disabling existing users.

Next​