> ## Documentation Index
> Fetch the complete documentation index at: https://help.the-meridian.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Plan changes

When a merchant moves to another plan or cancels, Meridian decides when the change takes effect. An upgrade starts at once. A downgrade or a cancellation waits for the end of the period the merchant has already paid for, so nobody loses days they paid for, and the merchant can change their mind until then.

This covers plans billed through the Plan Builder. Subscriptions your app bills itself are not scheduled by Meridian.

## When a change takes effect

| The merchant | Takes effect |
| - | - |
| Subscribes with no paid plan (no subscription, or a free plan) | At once |
| Moves to a plan with a higher price, on the same billing interval | At once. Shopify prorates the current period |
| Moves to a different plan at the same price, even one with fewer features | At once |
| Moves to a plan with a lower price, on the same billing interval | At the end of the paid period |
| Moves from monthly to annual billing, at any price | At once |
| Moves from annual to monthly billing, at any price | At the end of the paid period |
| Cancels, or moves from a paid plan to a free plan | At the end of the paid period |
| Moves to another version of the current plan that takes nothing away | At once, whatever the price and the interval |

"Higher" and "lower" compare list prices before any [discount](https://help.the-meridian.ai/discounts.md): the monthly prices for a monthly choice, the yearly prices for an annual one. A merchant who pays less because of a discount code is still upgrading when the new plan's list price is higher.

A few situations make a change apply at once, whatever its direction:

* **The store is in a [free trial](https://help.the-meridian.ai/free-trial.md).** Nothing has been paid yet, so there is no period to keep. See [During a free trial](#during-a-free-trial).
* **The subscription is frozen.** Shopify is not collecting, so there is no paid period either.
* **The store's billing currency changed** since it subscribed. A move to another plan starts at once, billed in the new currency.
* **Shopify reports no end date** for the current period. Meridian applies the change at once rather than guess one.

### Annual plans

An annual subscription is paid a year ahead. A move to a cheaper annual plan, or from annual to monthly billing, waits for the end of that paid year, which can be up to 12 months away. A move from monthly to annual starts at once.

### Versions of the same plan

A switch to another [version](https://help.the-meridian.ai/create-a-plan.md#save-changes-as-a-new-version) of the merchant's current plan applies at once when the version takes nothing away: only the price is lower, or every term is the same or better by the rules in [Editing a plan with subscribers](https://help.the-meridian.ai/create-a-plan.md#editing-a-plan-with-subscribers). A cheaper version that also removes a feature, lowers a limit or an included quantity, or raises a usage rate is a downgrade like any other, and waits for the end of the paid period.

## The effective date

The change takes effect at the end of the current billing period, as Shopify reports it at the moment the merchant makes the change. Until that date the merchant keeps everything the current plan gives: features, limits, included usage and usage terms.

On the date, the new plan takes over. Its usage period starts on that date, so the merchant's allowance refreshes with the switch.

## Downgrades

1. The merchant picks a cheaper plan. Meridian creates the new subscription at Shopify for the next billing cycle, and the merchant approves it on Shopify's screen as usual.
2. Once approved, the downgrade is scheduled. The merchant stays on the current plan, and sees the date of the change on the [pricing page](https://help.the-meridian.ai/plans.md#a-scheduled-change) and the [account page](https://help.the-meridian.ai/account.md#a-scheduled-change).
3. On the date, the store moves to the new plan. Shopify bills it from that cycle on its own.

A merchant who declines the charge, or does not approve it within two days, stays where they were. Nothing is scheduled.

If the scheduled subscription ends at Shopify before the date, the downgrade cannot happen, and Meridian follows what Shopify still bills. While Shopify still bills the current plan, the store keeps it after the date, as if the merchant had never downgraded, and no automation fires. If Shopify bills nothing any more, the plan ends on the date like a cancellation, and [Subscription is cancelled](https://help.the-meridian.ai/subscription-cancelled.md) fires. Either way the store never loses access while a subscription is still billing.

## Cancellations and moves to a free plan

A cancellation needs no approval. It is scheduled as soon as the merchant confirms it, and the plan stays active until the end of the paid period. A move from a paid plan to a free plan is a cancellation too: the paid plan runs to the end of its period and the free plan starts on that date.

**24 hours before the date**, Meridian cancels the subscription at Shopify, so Shopify never bills the next renewal. It first bills any overage the store has run up. From that moment the cancellation can no longer be undone, but the store keeps its plan until the date.

A cancellation requested within those last 24 hours is cancelled at Shopify at once. The store still keeps its plan until the date, and the cancellation cannot be undone.

A store on a free plan has no Shopify subscription and no paid period, so cancelling it applies at once. Cancelling again while a cancellation is scheduled changes nothing and answers with the same scheduled change.

## Keeping the current plan

Until a scheduled change takes effect, the merchant can undo it with **Keep {plan}** on the pricing page or the account page.

| Scheduled | Keep {plan} |
| - | - |
| Cancellation, or move to a free plan | Undoes it, with nothing to approve. Available until 24 hours before the date |
| Downgrade, while Shopify still bills the current plan | Cancels the scheduled subscription at Shopify, with nothing to approve. Available until the date |
| Downgrade, after Shopify ended the current subscription | Creates a new subscription to the current plan, which the merchant approves on Shopify. Available until the date |

Shopify may end the current subscription as soon as the merchant approves a downgrade, or keep it running until the date. Meridian reads which one happened when the merchant clicks, and `scheduledChange.undo.requiresApproval` on [`entitlements.subscription`](https://help.the-meridian.ai/sdk-types#scheduled-change) tells your UI in advance.

When the merchant has to approve again, the new subscription repeats the terms they approved the first time: the same plan version (even one you have since switched to draft), price, currency rate, approved usage cap (not a raise still waiting for the merchant's approval), and the discount for the cycles it had left. It continues the same usage period, and Shopify bills nothing for it before the date already paid for. If the merchant never approves it, the downgrade still happens on the date.

A cancellation that replaced a scheduled downgrade goes back to that downgrade when undone, with the same date and nothing new to approve.

Once Meridian has cancelled at Shopify, **Keep {plan}** disappears. A merchant who clicks it on a page loaded earlier is told "Cancellations cannot be undone in the final 24 hours of the billing period." The merchant can still pick another plan, and can subscribe to the same plan again once the period has ended.

A click that arrives just after the date finds nothing left to undo: the change has taken effect. The pricing and account pages then refresh and show the store's new plan, or no plan after a cancellation.

After **Keep {plan}**, the pages wait until Meridian reports nothing scheduled before they show the result. See [the account page](https://help.the-meridian.ai/account.md#a-scheduled-change) for what the merchant sees meanwhile.

## Choosing again while a change is scheduled

The merchant's latest choice replaces the scheduled change. It is judged against the plan the store has now, exactly like a first request:

| Scheduled | The merchant then | Result |
| - | - | - |
| Downgrade to Basic | Upgrades to Premium | Premium starts at once, and the downgrade is dropped |
| Downgrade to Basic | Picks another cheaper plan | That plan replaces Basic, on the same date |
| Downgrade to Basic | Picks Basic again | Refused with `409 Already subscribed to this plan` |
| Downgrade to Basic | Cancels, or picks a free plan | The downgrade becomes a cancellation, on the same date |
| Cancellation | Picks a paid plan | A normal change from the current plan: an upgrade starts at once, a downgrade waits for the date |
| Cancellation | Picks a free plan | The free plan starts on the same date |

A choice that needs the merchant's approval replaces the scheduled change only once approved. If the merchant declines it, the scheduled change stays as it was. Picking the current plan again is refused the same way as picking the scheduled one: **Keep {plan}** is the way back.

When the merchant makes a new choice, **Keep {plan}** included, Meridian cancels at Shopify any approval screen left open from an earlier choice, and cancels it again if the merchant approves it later anyway. The one exception: if that late approval has already replaced the store's subscription at Shopify, Meridian keeps it as the merchant's latest choice, and it takes effect at once. A store is never left without a plan because an older screen was approved.

Uninstalling your app ends the subscription at once, as it always has, and drops any scheduled change with it.

### When a request has to wait

Meridian handles one plan change per store at a time. When the date of a scheduled change has passed and Meridian has not applied it yet, the next subscribe, cancel or **Keep** applies it first. If that cannot complete, or if another subscribe, cancel, **Keep** or cap change for the same store is still going through, the request is refused with "Another plan change for this store is still going through. Try again in a moment." Nothing has changed, and the merchant can simply try again. See [Errors](https://help.the-meridian.ai/sdk-errors.md#two-changes-at-the-same-time).

### Not paying twice

Sometimes the current subscription has already ended at Shopify when the merchant makes a new choice: inside the last 24 hours of a cancellation, or after Shopify ended it at the approval of a downgrade. The new subscription then starts at once, but Shopify bills nothing for it before the date the merchant has already paid up to. Shopify's approval screen can show those days as trial days.

They are not a trial for Meridian. They fire no trial automation, do not appear in the [Trials report](https://help.the-meridian.ai/analytics-trials.md), and do not use up the store's [one trial](https://help.the-meridian.ai/free-trial.md#one-trial-per-store). The date also carries over: a merchant who changes plan again before it is reached still pays nothing before it. You forgo the price difference for those days, and the merchant never pays twice for the same period.

## During a free trial

During a trial, downgrades and cancellations apply at once, like every other change.

A move to another paid plan keeps the trial going rather than restarting it. The store gets what the new plan would have given if the merchant had picked it on the first day: the new plan's trial length minus the trial days already used, never less than zero. The trial clock starts on the store's first trial day and never restarts.

For a merchant three days into a 14-day trial of Basic:

| Moves to | Trial on the new plan |
| - | - |
| Pro, no trial | None. Billing starts at once |
| Pro, 7-day trial | 4 days |
| Pro, 30-day trial | 27 days |

A cancellation or a move to a free plan during a trial applies at once, and the store's trial is spent: a later subscribe starts billing at once.

## What counts during a scheduled change

Until the date, the store counts on its current plan everywhere: [feature gates](https://help.the-meridian.ai/features.md), limits, the usage allowance and its overage, MRR, average revenue per subscriber, subscriber counts, [segments](https://help.the-meridian.ai/segments.md) and [discounts](https://help.the-meridian.ai/discounts.md).

* **Plan protections.** A store that has approved a scheduled downgrade counts as a live subscriber of its new plan from the approval, not from the date, and so does a store scheduled to move to a free plan. Both plans stay [locked](https://help.the-meridian.ai/create-a-plan.md#editing-a-plan-with-subscribers) and cannot be [deleted](https://help.the-meridian.ai/publishing-plans.md#deleting-a-plan) while that store holds them, because the merchant has already agreed to their terms.
* **Usage cap.** The merchant can raise the cap while Shopify bills the current subscription. In the last 24 hours of a cancellation, or after Shopify ended the subscription at the approval of a downgrade, there is no subscription at Shopify to raise it on, and the [account page](https://help.the-meridian.ai/account.md#raising-the-cap) says the subscription is not ready for cap changes. A raise the merchant has asked for but not approved yet stays valid while the current plan is kept: approving it on Shopify still applies it, and keeping the plan with nothing to approve does not drop it. When the plan change ends that subscription (on the date, or when a new subscription takes over from it, such as **Keep {plan}** with a new approval), the raise is dropped. It does not carry over: the new plan starts with its own cap, and the merchant asks again there. **Keep {plan}** repeats the cap the merchant had approved, never the raise.
* **Overage.** Usage over the allowance is billed on the current subscription as usual. When Shopify no longer bills that subscription (in the last 24 hours of a cancellation, or after Shopify ended it at the approval of a downgrade), or refuses the usage charge, the overage is recorded and not billed. It is never charged later.
* **CRM analytics.** [Revenue](https://help.the-meridian.ai/analytics-revenue.md), the [store list's](https://help.the-meridian.ai/dashboard.md) MRR and the other CRM analytics follow Shopify's own charge history. They record the switch when Shopify does, which can be when the merchant approves a downgrade rather than on the date, and a cancellation when Meridian cancels at Shopify, 24 hours before the date.

## Automations

| Trigger | For a scheduled change, it fires |
| - | - |
| [Cancellation is scheduled](https://help.the-meridian.ai/subscription-cancellation-scheduled.md) | When the merchant cancels or moves to a free plan, as soon as the cancellation is scheduled |
| Subscription is downgraded | On the date of a scheduled move to a cheaper plan or to one at the same price, and of a scheduled move to a free plan |
| Subscription is upgraded | On the date of a scheduled move from an annual plan to a dearer monthly plan |
| [Subscription is cancelled](https://help.the-meridian.ai/subscription-cancelled.md) | On the date of a scheduled cancellation, and of a scheduled downgrade that ends as a cancellation because Shopify bills nothing any more |

A change that applies at once fires its trigger at once, as before, and only one. Shopify reports the new subscription's activation and the old one's cancellation at the same moment, and Meridian reads them as one change whichever it processes first: the plan the store left never fires **Subscription is cancelled**. When the cancellation comes first, Meridian holds it for 5 minutes, waiting for the new subscription to activate. An activation that only comes after that reads as a store that cancelled and then reactivated. A scheduled change fires by the same direction its card shows on the [pricing page](https://help.the-meridian.ai/plans.md#starts-on), which compares monthly list prices (the yearly ones when either plan has no monthly price). A move from an annual plan to a dearer monthly plan is the one scheduled change that can cost more: it waits for the end of the paid year, then fires **Subscription is upgraded**. The approval of a scheduled change fires nothing, and neither does **Keep {plan}**.

A switch between versions of one plan fires by what changes, not by price. When only the price differs, it fires nothing: for the merchant it is the same plan at another price. A version that takes something away fires **Subscription is downgraded**, and one that only adds fires **Subscription is upgraded**.

## Building on it

The [pricing page](https://help.the-meridian.ai/plans.md#a-scheduled-change) and the [account page](https://help.the-meridian.ai/account.md#a-scheduled-change) show the scheduled change and the **Keep {plan}** button from SDK 3.2.0. Older SDKs show neither: the merchant sees the current plan until the date, with no sign of the change, so upgrade the SDK. From a 2.x SDK, the upgrade crosses 3.0, which changed how forwarded webhooks are verified. See [Forwarded webhooks](https://help.the-meridian.ai/sdk-webhooks.md#what-the-signature-covers).

For a UI of your own, everything is in the snapshot and the responses:

* `entitlements.subscription` holds the current period's end, the trial end, the scheduled change, and a preview of when a cancellation would take effect. See [Data types](https://help.the-meridian.ai/sdk-types.md#scheduled-change).
* Each plan's `changePreview` gives the direction and the timing of a move to it, per billing interval.
* `subscribe` and `cancelSubscription` answer with the timing they applied and the date.
* `undoScheduledChange()` is **Keep {plan}**, on [`useMeridian`](https://help.the-meridian.ai/sdk-use-meridian#keeping-the-current-plan) and on the [server client](https://help.the-meridian.ai/sdk-server-client.md#scheduled-changes).


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