All packsSaaS Billing + Tax CoreSolve
stripe subscription schedule already exists error downgrade
One active schedule per subscription, and downgrades need one
Stripe allows exactly one active subscription schedule per subscription; a second downgrade throws unless the pack updates the existing schedule in place (D10).
What goes wrong
A downgrade is naturally modeled as a Stripe subscription schedule: keep the current plan until period end, then switch. Stripe allows exactly one active schedule per subscription, though -- a customer who downgrades twice, or upgrades after already scheduling a downgrade, hits a flat API error the second time a schedule gets created.
Why agents get it wrong
subscriptionSchedules.create() doesn't warn about the one-schedule limit until a second call hits it, and the fix isn't a try/catch -- it's carrying whether a schedule already exists through the entire plan-change flow so the code updates it in place instead of creating a new one, which is a data-flow change, not an error-handling patch.
What SaaS Billing + Tax Core pre-decides
D10 has the plan-change route retrieve the live subscription first specifically to read its schedule field, thread existingScheduleId into planChangeAction(), and update an existing schedule in place rather than create a second one. Upgrades additionally release any pending downgrade schedule before applying, since Stripe errors if you touch items on a schedule-managed subscription directly.
Source: ARCHITECTURE.md D10