> For the complete documentation index, see [llms.txt](https://docs.peakcommerce.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.peakcommerce.com/product/customer-self-service/subscription-management/customer-subscription-management.md).

# Customer Subscription Management

**My Subscriptions** is the heart of the customer portal — it's where your customers manage what they've bought without contacting support. Giving customers a clean, self-service way to upgrade, add on, renew, or cancel reduces support load, speeds up expansion revenue, and gives customers the control they expect from a modern subscription product.

## What customers can do

The page lists each active subscription with its plan, add-ons, price, billing period, and renewal date. From there, depending on what you've enabled, a customer can:

* **Change plan** — upgrade or downgrade to a different plan. Timing (immediate vs. end-of-term), proration, and which plans are offered are governed by your [business rules](/product/rules-and-customizations/rules-overview/creating-and-managing-rule-sets.md).
* **Add or remove add-ons** — adjust optional products on the subscription.
* **Renew** — extend a termed subscription.
* **Cancel** — start a cancellation, optionally routed through a [retention experience](/product/customer-self-service/subscription-management/customer-retention-journey.md) that captures the reason and offers a save (discount, pause, or downgrade) before the cancellation completes.

## What the order summary shows

When a customer changes plans, an **order summary** sits alongside the plan picker and updates **live** with every edit — select a different base plan, adjust a quantity tier, toggle an add-on, and the summary recalculates immediately. It's organized as a clear before → after story in three zones:

<figure><img src="/files/7dXMzimRF5YMvZYTFAtc" alt="The customer portal change-plan page with plan cards on the left and a live order summary on the right showing current products, the resulting products with per-line price changes, and the prorated amount due today"><figcaption><p>Changing a plan in the customer portal — the order summary shows what the customer has now, what they'll have, per-line changes, and the real prorated <strong>Due today</strong>.</p></figcaption></figure>

* **Products you have now** — a read-only snapshot of the current base plan and add-ons at today's prices, totalled as **Current monthly**. This zone never changes while the customer edits, so there's always a stable "before" to compare against.
* **Products you'll have** — the resulting lineup after the change: the new (or kept) base plan, retained add-ons, and anything newly added. Each line shows its resulting monthly price with a per-line change indicator — a **New** badge for additions, or a **+/−** amount showing exactly how much that line moves versus today's bill (add-ons priced as a percentage of the plan re-price automatically when the base changes). Every changed line has its own **remove** control, and a removed current add-on stays visible struck-through with an **Undo** link, so any edit can be reversed before confirming. The zone totals to a **New monthly** subtotal, and a timing banner states whether the change is an upgrade (**effective today, prorated for this cycle**) or a downgrade (**starts next billing period, nothing due today**) — or, when the customer is editing a plan that's already scheduled to start later, a neutral notice instead (see below).
* **Due today** — the real, prorated amount that will be charged now, calculated live by your billing system's order preview for the days remaining in the current cycle (tax included). It reads **$0** when nothing has changed — and also for downgrades, during a free trial, and **whenever the customer is editing an already-scheduled plan**, since nothing is charged today in any of those cases. While the preview is being calculated the summary says so rather than showing a misleading full-month figure, and if live pricing is briefly unreachable, the exact amount is confirmed before the customer pays.

### When a plan is already scheduled

Sometimes a subscription has a plan **queued to start later** — most commonly a paid plan waiting behind a free trial, or a change already committed for the next term. The portal renders that queued state explicitly rather than pretending it's the current plan:

* In the plan picker, the queued plan's card shows a **clock badge — "Starts {date}"** — instead of a Current badge, and its card action reads **Scheduled** rather than a select button.
* In the order summary, the "after" zone's heading changes: it reads **"Already scheduled"** when the customer hasn't edited anything, and **"Your schedule will be"** once edits are pending — in both cases captioned **"Starts {date}"**.
* When the customer does make an edit, a **neutral banner** appears: *"Your scheduled plan is changing · still starts {date} · nothing due today."* It's deliberately not styled as an upgrade or a downgrade — it's neither, because the edit changes what happens on the scheduled date, not today's bill.
* **Due today is $0 whenever the customer is editing a scheduled plan** — unconditionally. No proration applies, because nothing changes before the start date.
* Edits target the **scheduled** plan, not the one still running: confirming swaps what starts on the scheduled date while the current plan runs untouched until then, and the swap **keeps the original start date**.

After the customer confirms, a completion screen confirms the change — **"Your plan is updated"**, naming the new plan (and quantity tier, when relevant) and letting them know a **receipt is on its way by email** — with a button back to My Subscription.

## Cancelling — and changing your mind

Most cancellations are **scheduled, not instant**: the subscription ends at a future effective date (typically the end of the current term), and the customer keeps full access until then. The portal is built to make that state — and the way back out of it — unambiguous.

### "Scheduled for {date}" — what the customer sees

When a cancellation is scheduled for a future date, the subscription card shows **"Scheduled for {date}"** directly under its status badge. This caption is doing real work: the billing system reports a future-dated cancellation as **Cancelled immediately**, even though service continues for weeks or months. Without the date, a customer who cancelled effective end-of-term would see "Cancelled" today and reasonably conclude they've already lost access. The caption is what tells them access continues until that date. (Once the effective date has passed, the cancellation is historical and the date no longer shows — the subscription is simply cancelled.)

### Revoking a scheduled cancellation

Customers change their minds — and while the cancellation hasn't taken effect yet, there's a genuine window to keep them. If you've enabled it on your [retention journey](/product/customer-self-service/subscription-management/customer-retention-journey.md), an eligible customer sees a **revoke strip** on the subscription card during that window: *"Cancellation scheduled for {date} — service continues until then. You can still revoke this cancellation"*, with a one-click **Revoke Cancellation** button. What happens next depends on the account's state:

* **Eligible** — clicking the button opens a confirm dialog that lays out exactly what revoking means: the subscription (by number), the scheduled cancellation date and how many days remain, and the resulting state (**Active**, auto-renewing on that date, on the current plan and price). An **eligibility checklist** confirms the two preconditions are met — all invoices paid, and the cancellation not yet effective — and notes the action is recorded on the account timeline. No new order or charge is created; confirming simply removes the scheduled cancellation.
* **Blocked — unpaid invoice** — if any invoice on the account is unpaid, the button is disabled and the strip shows the **outstanding amount** with a link to **Billing & Invoices** (see [account management](/product/customer-self-service/account-management/customer-account-management.md)) so the customer can settle up and come back. Once the balance is paid, the revoke unblocks.
* **Blocked — billing can't be read** — if the portal can't verify invoices right now, revoking is **withheld rather than guessed** (fail-closed). The strip says billing can't be verified; the customer can retry once it's reachable. An unreadable gate never reads as "eligible."
* **Success** — after confirming, the strip flips to a confirmation: the cancellation is revoked, the subscription **stays active and auto-renews** on its normal date, and the action was recorded on the account timeline.

After a revoke, the subscription simply **continues on its current plan and terms** — same price, same renewal date, nothing re-provisioned and nothing charged.

**Good to know about revoking:**

* The window is real: a cancellation is revocable **only while its effective date is in the future**. The billing system enforces the same window when the revoke is committed, so there's no race at the boundary.
* Revoking has its **own permission** — **Revoke Scheduled Cancellation** — independent of Cancel Plan, so being able to cancel doesn't automatically mean being able to un-cancel (or vice versa). Unlike the on/off Change and Cancel grants it has **three levels**: **no access** (the default) hides the revoke experience entirely, **view** shows the cancellation-scheduled banner — including why a revoke is currently blocked — but no button, and **manage** shows the **Revoke Cancellation** button. See [portal action permissions](/product/using-peakcommerce/profiles-and-permissions/portal-action-permissions.md).
* If the strip doesn't appear at all: the feature isn't enabled on the retention journey (it's off by default), the billing integration doesn't support it, or the customer's profile grants **no access** (or only **view**) on Revoke Scheduled Cancellation — in those cases the card shows the standard pending-cancellation banner instead.

## How it's powered

Each action runs as a configurable [Customer Self-Service journey](/product/journeys-and-pages/journey-basics/journeys-overview.md), so you control the steps, pages, and the [commerce actions](/product/journeys-and-pages/journey-steps/commerce-actions.md) that execute the change in your billing system (and write it back to PeakCommerce). The portal binds each button to the right journey by its [purpose](/product/journeys-and-pages/journey-settings/journey-purpose.md) (`change_plan`, `cancellation`), so you can redesign or rename a journey without breaking the link.

> **Builder note — wire the commit actions, or Confirm commits nothing.** The confirm button on the summary step only *advances the journey*. The plan change itself is committed by the **commerce actions configured on that confirm/summary step** — `record_order` + `update_order`. If those actions aren't configured there, confirming sails through to the completion screen **without changing the subscription**. Also remember that journeys run their **published snapshot**: after changing a journey's configuration, republish it for the change to take effect for customers.

## Who can do what

Which actions appear is controlled by the customer's profile. **Change Plan** and **Cancel Plan** are [separate permissions](/product/using-peakcommerce/profiles-and-permissions/portal-action-permissions.md), so you can, for example, let a customer cancel but route upgrades through a CSR, or offer a read-only "managed customer" who can view and pay but not change anything.

## Good to know

* Self-service actions write through to your billing system in real time; a failed external call surfaces to the customer rather than silently dropping.
* A subscription only shows the actions its journeys and the customer's permissions allow — if a button is missing, check the journey's purpose binding and the profile's portal-action permissions.

## Related

* [Customer Retention Journey](/product/customer-self-service/subscription-management/customer-retention-journey.md)
* [Customer Portal Overview](/product/customer-self-service/overview/customer-portal-overview.md)
* [Journeys overview](/product/journeys-and-pages/journey-basics/journeys-overview.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.peakcommerce.com/product/customer-self-service/subscription-management/customer-subscription-management.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
