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:
- Billing account owns
seat_limit. - Active billing users consume seats.
- Disabled/deleted billing users do not consume seats.
seat_limit = nullmeans unlimited.- Downgrades can make an account over limit without disabling existing users.
Next
- Seats reference: Seats
- Packaging and limits: Limits and policies