OneShot

All packsSaaS Billing + Tax CoreSolve

stripe customer portal subscription update bypass proration

The customer portal's own defaults bypass your proration rules

If Stripe's customer portal is left free to change plans, its default proration bypasses D10/D11's carefully decided rules entirely. The pack disables it (D16).

3 of 3 runs passedOne decision inside SaaS Billing + Tax Core (nextjs-prisma-postgres).

What goes wrong

Stripe's hosted customer portal can let customers change their own plan -- convenient, except that path uses Stripe's own default proration behavior, not whatever asymmetric upgrade/downgrade rules the app carefully built (D10, D11). A customer using the portal to change plans gets billed differently than one using the app's own checkout flow, for the same action.

Why agents get it wrong

Enabling subscription_update in the portal configuration looks like a feature toggle -- "let customers self-serve plan changes" -- rather than a decision that routes billing-critical logic around every proration and entitlement rule the rest of the app enforces. Nothing in the portal configuration API warns that turning this on creates a second, inconsistent path to the same outcome.

What SaaS Billing + Tax Core pre-decides

D16 explicitly disables subscription_update in the portal configuration, while leaving invoice_history, payment_method_update, and subscription_cancel (at period end, no mid-cycle proration) enabled. Plan and seat changes are only possible through the app's own API routes, where D10/D11's rules actually run -- the portal is scoped to what it can safely self-serve.

Source: ARCHITECTURE.md D16

Coming soon — $149Full receipt and details for SaaS Billing + Tax Core

Related problems