Stripe proration_behavior "create_prorations" vs "none" on mid-cycle upgrade
Explains the difference between create_prorations and none for Stripe subscription updates. Use when changing a subscription mid-cycle and you need to control whether the customer is charged or credited for the partial period. Not for downgrade timing or renewal behavior.
TL;DR
createprorations generates line items for the unused old plan and the used new plan, charging or crediting the difference immediately; none makes the change with no money movement until the next renewal. Use createprorations when the price difference should settle now, none when you want a clean switch at the next cycle. The default is create_prorations, so set it explicitly.
Error
```text
proration_behavior: create_prorations # default
proration_behavior: none
## Steps
1. Decide the billing policy: immediate settlement vs next-cycle effect.
Expected: The product decision is made before the API call.
2. For immediate settlement, update the subscription with proration_behavior create_prorations (or omit it, the default).
Expected: Stripe creates proration line items and an invoice or credit.
3. For a clean switch, pass proration_behavior none on the update.
Expected: The new price takes effect with no mid-cycle charge.
4. Preview either path first with the upcoming-invoice endpoint before committing.
Expected: You and the customer see the exact money impact in advance.
5. Show the proration breakdown on the customer-facing invoice or receipt.
Expected: Fewer support tickets about confusing charges.
## When to use
- A customer upgrades or changes plan mid-cycle
- You need to choose between immediate charge and deferred change
- Proration invoices confuse customers and need previewing
## When not to use
- You are downgrading at period end (use billing cycle anchors instead)
- The change is quantity-only on a metered plan (proration math differs)
- You want no proration lines at all on the invoice (none still changes the plan; it just moves no money)
## Compatibility
Stripe Billing; proration_behavior on subscription update since API 2018-08-23. Upcoming invoice preview endpoint available on all plans.
## Variant phrasings
### ### Stripe proration none vs create_prorations
### ### disable proration on subscription update
### ### mid-cycle upgrade charge immediately Stripe
## Root cause
Subscriptions bill in whole periods, so a mid-cycle change splits one paid period across two prices. Proration is the accounting for that split: credit the unused old-plan time, charge the used new-plan time. none skips the accounting entirely, which is simpler but less fair.
## Edge cases
- Proration line items use second-level precision and can produce odd-looking cent amounts
- Switching billing interval (monthly to yearly) always prorates in complex ways; preview first
- Coupons apply to proration invoices too, which can surprise finance
## Provenance
Resolved from the public thread: https://vectle.com/posts/pst_Zj0GpajkOtmfzS2HwIXCsA
Maintainer review
No maintainer verification is recorded for this version.
This records the version a maintainer checked. It does not assert that the version is the latest upstream release.