> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fusioncore.us/llms.txt
> Use this file to discover all available pages before exploring further.

# Setting Up the Renewal Options Page

> Place the Renewal Options page so members can renew a subscription that has no renewal order yet, choosing their renewal product, subscription plan, and auto-renew setting.

## Overview

The **Renewal Options** page lets a portal member renew a subscription **before** a renewal order exists. The member picks the product they are renewing into, picks a subscription plan, decides whether to auto-renew, and the page creates the renewal Order and hands them straight to checkout.

It works alongside the nightly [renewal job](https://docs.fusioncore.us/end-user-guides/subscriptions/subscription-renewal/index.md). Where the job has already generated a renewal Order, the member reviews and pays it on the **Renew Subscription** page. Where it has not, this page builds the Order from the member's own choices — so **Renew** works throughout the renewal window.

> [!NOTE]
>
> The page is `fsPortalRenewalOptions` in the unmanaged **Portal Components** package. It reads eligible renewal products from Subscriptions (`FCORE_MEM`) and prices from Commerce (`FCORE_PAY`). Because the package is unmanaged you can customize it — but **clone** the component before changing its code, or a package upgrade will overwrite your edits.

## Prerequisites

* The [Subscription Hub](https://docs.fusioncore.us/end-user-guides/portal/subscription-hub/setting-up-the-subscription-hub.md) is already on a portal page.
* Each subscription product has a renewal window configured — **Renew Anytime**, or **Renew X Days Before Expiry** / **Renew X Days After Expiry**.
* The products a subscription may renew into exist, are **active**, and have at least one active [subscription plan](https://docs.fusioncore.us/end-user-guides/subscriptions/subscription-plans/linking-plans-to-products.md) linked.
* The Business Unit has **Portal Checkout Page Path** (`FCORE_PORTAL__Portal_Checkout_Page_Path__c`) set — the page hands off to it. See [Configuring the Business Unit's Portal Checkout Page](https://docs.fusioncore.us/end-user-guides/portal/checkout-lwc/configuring-the-business-units-portal-checkout-page.md).

## Add the Renewal Options Page

**1. Create the page**

In Experience Builder, create a new page for renewals — for example **Renewal Options** — and drag the **FS Portal - Renewal Options** component onto it.

The component has no properties to configure. It reads which subscription to renew from the `id` URL parameter (the Purchase Activity UUID), which the Subscription Hub and Manage Subscription pass automatically.

**2. Point the Subscription Hub at the page**

On the **FS Portal - Subscription Hub** component, set **Renewal Options Page URL** (`renewalOptionsPageUrl`) to the page you just created.

> [!WARNING]
>
> This property is required and defaults to `/`. While it is left at `/`, the hub hides the **Renew** button for every subscription that would route to the Renewal Options page — members simply see no way to renew, with no error.

**3. Point Manage Subscription at the page**

On the **FS Portal - Manage Subscription** component, set **Renewal Options** (`renewalOptionsURL`) to the same page, alongside the existing **Renew Subscription** and **Cancel Subscription** paths. The **Renew Now** button inside Manage Subscription routes the same way the hub does.

**4. Publish**

Click **Publish** to make the page live.

## Where the Renew Button Goes

The **Renew** button has two destinations. fusionCore decides which one applies per subscription.

The button appears only when **all** of the following are true:

* **Is Within Renewal Time Frame** (`FS_PORTAL_Is_Within_Renewal_Time_Frame__c`) on the Purchase Activity is true.
* **Renewal Status** (`FCORE_MEM__Renewal_Status__c`) is`Pending`.
* The Purchase Activity **Status** is `Active` or `Expired`.
* The member's contact role is in the product's **Manage Subscription** (`FS_PORTAL_Manage_Subscription__c`) setting.
* The destination page URL is configured — that is, not left at `/`.

When it appears, this is where it leads:

| Subscription state | Destination |
| - | - |
| No renewal Order, **Renewal Status** = `Pending` | **Renewal Options** page |
| Renewal Order exists, and is neither Activated nor Draft | **Renew Subscription** page |
| Renewal Order exists, and is Activated or Draft | No button |
| No renewal Order, **Renewal Status** is anything other than `Pending` | No button |

> [!NOTE]
>
> For the **Renew Subscription** side of that split — where the member reviews the renewal document and pays — see [Managing and Renewing Subscriptions in Subscription Hub](https://docs.fusioncore.us/end-user-guides/portal/subscription-hub/managing-and-renewing-subscriptions-in-subscription-hub.md).

## Control the Renewal Window

**Is Within Renewal Time Frame** is a formula field — you never set it directly. It is true when the subscription is not cancelled, its product is **not** flagged **Is Not Renewable** (`FCORE_MEM__Is_Not_Renewable__c`), and **any** of these holds:

| Product field | Effect |
| - | - |
| **Renew Anytime** (`FS_PORTAL_Renew_Anytime__c`) | Renewal is available at all times. The two day-count fields are ignored. |
| **Renew X Days Before Expiry** (`FS_PORTAL_Renew_X_Days_Before_Expiry__c`) | Renewal opens this many days before the subscription's **End Date**. |
| **Renew X Days After Expiry** (`FS_PORTAL_Renew_X_Days_After_Expiry__c`) | Renewal stays available this many days after the **End Date**. |

> [!WARNING]
>
> This is the portal renewal window and it is **separate** from the plan's **Renewal Days** (`FCORE_MEM__Renewal_Days__c`), which governs the nightly renewal batch job. A subscription can be inside one window and outside the other. Set the product fields deliberately rather than assuming the batch job's window applies.

## Control What Members Can Renew Into

The choices on the page come from [Renewal Paths](https://docs.fusioncore.us/end-user-guides/subscriptions/subscription-renewal/renewal-paths.md). For the subscription's current product, fusionCore collects every `Renewal_Path__c` where:

* **Original Product** (`Original_Product__c`) matches the subscription's product,
* **Renewal Product** (`Renewal_Product__c`) is **active**, and
* **Condition** (`Condition__c`) is blank, or its [Condition](https://docs.fusioncore.us/end-user-guides/products/conditions/index.md) record evaluates to true for this member.

If no path qualifies, the page offers a single option: renewing into the **current product**. So a product with no renewal paths at all still renews cleanly.

Each option then carries the renewal product's **active** subscription plans, and the plan flagged as default for that product (`Product_Subscription_Plan__c.Is_Default__c`, where the plan itself is active).

Set **Renewal Direction** (`Renewal_Direction__c`) on each path to `Upgrade` or `Downgrade` to badge it on the page and place it in the display order. Leave it blank for paths you do not want labelled.

> [!TIP]
>
> Conditions are how you keep the page honest — a member should only ever see options they actually qualify for. A path whose condition cannot be evaluated is skipped and logged, so the member sees fewer options rather than an error.

## What the Page Does Not Do

* **Prices on renewal page exclude tax.** Every price on the page is pre-tax. Tax is calculated at checkout.
* **Portal members cannot create installment plans.** Only staff users can. Plan-driven auto-charge is the only member-facing recurring option.
* **The page does not change an existing renewal Order.** If one already exists, the member is routed to the **Renew Subscription** page instead.

## Limitations and Common Pitfalls with Renewal Options

* **Renewal Options Page URL left at `/`.** The hub hides **Renew** entirely for subscriptions that would route here — it does not fall back to the old renew page. Set the property, then re-test as a member.
* **Renewal Options not set on Manage Subscription.** The hub tile works but the **Renew Now** button inside Manage Subscription disappears. Both components need the path.
* **The renewal product is inactive.** An inactive `Renewal_Product__c` is dropped from the options list silently. If every path is dropped, the member is offered the current product instead — which may not be what you intended.
* **A product with more than one active default plan.** fusionCore picks one deterministically (the lowest plan Id), so the page never breaks, but which plan a member lands on becomes hard to explain. Query for products with more than one active default `Product_Subscription_Plan__c` and clean them up.
* **No Business Unit checkout path.** The member can choose and confirm, but the handoff URL is malformed and checkout never loads. Set **Portal Checkout Page Path** on the Business Unit.
* **Members can reach the page only through Subscription Hub or Manage Subscription page.** Opened directly, with no `id` parameter, it reports `Purchase Activity Id cannot be blank`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.