Stripe's documentation covers the primitives well. What it doesn't tell you is how to combine them for a real multi-tenant SaaS product with seat-based pricing, usage overages, and a self-serve upgrade flow.
Model the org, not the user, as the customer
Your Stripe Customer should map to the tenant/organization, not the individual user who signed up. Get this wrong early and every subsequent billing feature becomes a migration.
Webhooks are your source of truth
Never trust client-side confirmation of a successful subscription change — always drive plan state changes off Stripe webhook events, with idempotent handlers keyed on the event ID.