Plans and seat controls
Billing is organization-owned and seat-based.
Seat ownership model
- plan is attached to organization, not individual member
- workspace owner manages billing, checkout, cancellation, and plan changes
- delegated operators can manage people and teams without owning billing
- each active member consumes one seat
- members do not need their own billing account, but the organization must have an active plan before additional members can be added
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:
inactive: no plan selected yet or 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
Operational expectation:
- a brand-new workspace should start in
inactivewith no selected plan - checkout intent alone must not make the workspace look subscribed
- only verified payment/subscription events should move state into
trialingoractive