Allow users to upgrade, change, or cancel subscription #75

Closed
opened 2026-07-31 07:07:06 -07:00 by westfarn · 0 comments
Owner

Summary

Let users upgrade, change, or cancel their subscription from the product (Account / billing UX), not only via opaque Stripe flows.

Context

  • Account already has Billing with Stripe Customer Portal (Manage subscription) and checkout for unpaid users.
  • Plan & usage lives on Account; users will expect clear actions next to limits (upgrade when capped, change plan, cancel).

Goals

  1. Upgrade — discover higher plans, compare quotas/price, start upgrade checkout or portal flow.
  2. Change plan — switch between public selectable plans (upgrade/downgrade) with clear confirmation of quota/price changes and when they take effect.
  3. Cancel — cancel subscription (end of period vs immediate per product policy), with confirmation and post-cancel access messaging.

Proposed approach

  • Prefer Stripe Customer Portal / Checkout where possible for PCI and dunning.
  • Surface primary CTAs on Account (Usage card + Billing): Upgrade / Change plan / Cancel.
  • If portal covers change+cancel today, improve in-app copy and deep-links; add plan comparison UI if portal alone is insufficient.
  • Coordinate with backend finance APIs (list plans, create checkout for plan change, portal session).

Acceptance criteria

  • Paid user can open a clear path to upgrade to a higher plan.
  • Paid user can change to another selectable plan (or documented limitation if Stripe portal-only).
  • Paid user can cancel; UI states remaining access until period end (or immediate, if product chooses).
  • Complimentary / no-checkout users see appropriate messaging (no fake cancel).
  • Errors and loading states handled; analytics events for upgrade/change/cancel intents.

Out of scope (unless needed)

  • Admin-granted plan overrides UX
  • Refunds / proration policy docs beyond linking Stripe
## Summary Let users upgrade, change, or cancel their subscription from the product (Account / billing UX), not only via opaque Stripe flows. ## Context - Account already has Billing with Stripe Customer Portal (`Manage subscription`) and checkout for unpaid users. - Plan & usage lives on Account; users will expect clear actions next to limits (upgrade when capped, change plan, cancel). ## Goals 1. **Upgrade** — discover higher plans, compare quotas/price, start upgrade checkout or portal flow. 2. **Change plan** — switch between public selectable plans (upgrade/downgrade) with clear confirmation of quota/price changes and when they take effect. 3. **Cancel** — cancel subscription (end of period vs immediate per product policy), with confirmation and post-cancel access messaging. ## Proposed approach - Prefer Stripe Customer Portal / Checkout where possible for PCI and dunning. - Surface primary CTAs on Account (Usage card + Billing): Upgrade / Change plan / Cancel. - If portal covers change+cancel today, improve in-app copy and deep-links; add plan comparison UI if portal alone is insufficient. - Coordinate with backend finance APIs (list plans, create checkout for plan change, portal session). ## Acceptance criteria - [ ] Paid user can open a clear path to upgrade to a higher plan. - [ ] Paid user can change to another selectable plan (or documented limitation if Stripe portal-only). - [ ] Paid user can cancel; UI states remaining access until period end (or immediate, if product chooses). - [ ] Complimentary / no-checkout users see appropriate messaging (no fake cancel). - [ ] Errors and loading states handled; analytics events for upgrade/change/cancel intents. ## Out of scope (unless needed) - Admin-granted plan overrides UX - Refunds / proration policy docs beyond linking Stripe
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ai_ml_operations/chat_web_app#75