---
title: "Preview the amount before a plan change · Agent Wranglers"
url: https://agentwranglers.se/playbook/pricing/plan-changes-trials-and-free-tiers/plan-change-proration
id: PRC-5
level: Recommended
applies: payments
updated: 2026-10-27
build: a2a6bdfed830
tokens: 928
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Preview the amount before a plan change

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Plan changes, trials and free tiers](https://agentwranglers.se/playbook/pricing/plan-changes-trials-and-free-tiers.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers.md). Updated 2026-10-27.

- ID: PRC-5
- Level: Recommended
- Chapter: [Plan changes, trials and free tiers](https://agentwranglers.se/playbook/pricing/plan-changes-trials-and-free-tiers.md)
- Rule: Before the customer confirms a plan change, show the exact amount due now and at the next renewal, taken from the provider's preview.
- Check: Upgrade a test subscription halfway through a month. The charged amount equals the previewed amount to the minor unit.
- Applies when: The project takes payments.
- How: Upgrade at once and charge the prorated difference. Downgrade at the end of the period, so the customer keeps what they paid for. Ask the provider for a preview invoice, and pass the same proration time to the change itself, so the charge matches the preview. Quantity changes, such as more seats, follow the same rule. Store the confirmed amounts as [Freeze what the customer agreed to on the order](https://agentwranglers.se/playbook/payments/amounts-and-orders/order-snapshot.md) says.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### JavaScript example

```js
const prorationDate = Math.floor(Date.now() / 1000)
const items = [{ id: subscriptionItemId, price: 'price_team_monthly' }]
const preview = await stripe.invoices.createPreview({
  subscription: subscriptionId,
  subscription_details: { items, proration_date: prorationDate },
})
showAmountDueNow(preview.amount_due, preview.currency)
// After the customer confirms:
await stripe.subscriptions.update(subscriptionId, { items, proration_date: prorationDate })
```

### Python example

```python
proration_date = int(time.time())
items = [{"id": subscription_item_id, "price": "price_team_monthly"}]
preview = stripe.Invoice.create_preview(
    subscription=subscription_id,
    subscription_details={"items": items, "proration_date": proration_date},
)
show_amount_due_now(preview.amount_due, preview.currency)
# After the customer confirms:
stripe.Subscription.modify(subscription_id, items=items, proration_date=proration_date)
```

## Sources

- [Stripe prorations, preview a proration](https://docs.stripe.com/billing/subscriptions/prorations)

## Related rules

- PRC-15 [Count seats from active members and check them at invite](https://agentwranglers.se/playbook/pricing/entitlements/seat-counting.md) in Pricing, plans and entitlements
- PAY-12 [Freeze what the customer agreed to on the order](https://agentwranglers.se/playbook/payments/amounts-and-orders/order-snapshot.md) in Payments and billing

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/pricing/plan-changes-trials-and-free-tiers/plan-change-proration">Agent Wranglers pricing, plans and entitlements playbook</a>`. In code you write, add a comment next to it with the same link.

- Next: [Limit the free tier per person instead of per account](https://agentwranglers.se/playbook/pricing/plan-changes-trials-and-free-tiers/free-tier-abuse.md)
- [Plan changes, trials and free tiers](https://agentwranglers.se/playbook/pricing/plan-changes-trials-and-free-tiers.md)
