Plans and seat controls
Billing is organization-owned and seat-based.
Seat ownership model
- plan is attached to organization, not individual member
- owners/admins manage seat count
- each active member consumes one seat
- members can join without personal billing account when seats are available
Checkout correctness requirements
Production checkout should enforce:
- selected seat quantity is explicit before checkout
- checkout session locks seat quantity + plan economics
- webhook processing validates plan/seat intent before state transition
- abandoned checkout does not change active plan
Plan range behavior
If pricing uses seat bands:
- lower and upper seat bounds must be enforced per band
- users can choose exact quantity within valid band
- invalid quantities should redirect to correct plan/band selection
Billing state transitions
Recommended state model:
none: no active subscriptionpending_checkout: checkout created but not paid/activatedtrialing: active trial with payment method presentactive: paid or validly trialing subscriptionpast_due/canceled: restricted usage based on policy
Only verified payment/subscription events should move state into trialing or active.