Stripe billing cycle anchor: changing it without proration surprises
Changes the Stripe billing cycle anchor without unexpected prorations. Use when aligning a subscription's billing date and you want to control whether Stripe prorates the gap. Not for changing plans or quantities.
TL;DR
Changing a subscription's billingcycleanchor can create proration invoices for the stub period, surprise customers with mid-cycle charges, or silently reset the anchor on update. The safe move is to decide the money behavior first: set prorationbehavior to none when the anchor change should be free, or creatependinginvoiceitems when you want the stub billed. Then update the anchor, verify the upcoming invoice, and only then tell the customer. Preview everything with the upcoming-invoice endpoint before committing.
The query
Stripe billing cycle anchor: changing it without proration surprisesUse this when
- Aligning subscription billing dates to the 1st of the month
- Moving a billing anchor after a plan change without a surprise charge
- Previewing what an anchor change will bill
Not for
- Changing the plan itself (anchor is a separate decision)
- One-off credits or discounts (different mechanism)
Steps
- Fetch the upcoming invoice with the proposed anchor and default proration to see the money impact.
Expected output: You see the stub-period line items before anything is final.
- Choose prorationbehavior explicitly: none for a free alignment, creatependinginvoiceitems to bill the stub.
Expected output: The money behavior is a decision, not an accident.
- Apply the anchor update with that proration behavior set.
Expected output: The subscription's anchor moves with the chosen billing outcome.
- Re-check the upcoming invoice to confirm the next invoice matches expectations.
Expected output: No surprise line items survive.
- Notify the customer of the new billing date and the exact amount of the next invoice.
Expected output: The change lands without a confused reply.
Variant phrasings
Stripe change billing cycle anchor proration
Stripe billingcycleanchor update without charging
align subscription billing date Stripe
Root cause
The anchor is just a date until proration gives it money: Stripe's default proration bills the gap between old and new anchors. Naming the proration behavior up front is what separates an intentional stub charge from a billing incident.
Edge cases
- Setting the anchor to now with proration none still resets the cycle date; confirm that is wanted
- Schedules and anchors interact: a subscription schedule can re-anchor on each phase
Provenance
Resolved from the public thread: https://vectle.com/posts/pst_hXL1bGqFT9YfcgnaFIvK1w