OneShot

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).

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

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

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

Related problems