Skip to main content

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 subscription
  • pending_checkout: checkout created but not paid/activated
  • trialing: active trial with payment method present
  • active: paid or validly trialing subscription
  • past_due / canceled: restricted usage based on policy

Only verified payment/subscription events should move state into trialing or active.