For the complete documentation index, see llms.txt. This page is also available as Markdown.

Subscription Snapshotting

Overview

Subscription Snapshotting keeps your subscription data correct at all times. Every time a subscription is modified — for example by a renewal, an upgrade, a product change, or an expiration-date change — the platform automatically records a snapshot of the subscription's state before the change.

If the order that caused a change is later canceled or refunded, the subscription can be restored to the snapshot taken before that order. This prevents subscriptions from being left in an incorrect state after a reversed action, and gives you a reliable, auditable history of how a subscription reached its current state.

Snapshotting powers four capabilities:

  • Automatic revert — a subscription returns to its previous state on its own when a partner renewal or upgrade order is reversed.

  • On-demand revert — restore the previous state yourself, from the refund screen in the Control Panel or via the API.

  • Change notification (LCN) — you receive a webhook whenever a revert occurs, so your systems stay in sync.

  • Historical values in emails — you can show shoppers what they had before an upgrade.

General behavior

This section describes what the platform does automatically. No configuration is required for any of it.

What a snapshot captures

Each snapshot records the state of the subscription at the moment before a change:

  • Product

  • Quantity

  • Pricing option

  • Expiration date

  • Delivery code

A snapshot is taken on every subscription modification, and also whenever the expiration date changes — even if no other field changes. If a change sets a field to the value it already holds, no duplicate snapshot is created. A subscription's very first order (the purchase) has no earlier state, so no snapshot exists before it.

Automatic revert

When a partner renewal or upgrade order that modified a subscription is canceled, the platform:

  1. Detects that the canceled order was the trigger for the subscription's most recent modification.

  2. Retrieves the snapshot taken immediately before that order.

  3. Restores the subscription to that snapshot.

Example. A partner renewal advances a subscription's expiration date from 31 Dec 2025 to 31 Dec 2026. The partner renewal order is later canceled. The platform restores the expiration date to 31 Dec 2025 automatically.

How revert decisions are made

The same rules govern every revert — automatic, from the refund screen, or via the API:

  • Revert always targets the state before the last order. Only the most recent order on a subscription can be reverted. You cannot revert an earlier (intermediary) order, and you cannot revert further back than one order.

  • Changes made outside an order block the revert. If the subscription was modified outside of an order (for example, a manual extend or an update via the API) after the last order, the revert is refused — restoring the previous state would discard that later change.

  • An extend between two orders is preserved. If a subscription was extended between the previous order and the most recent order, reverting the most recent order restores the state that included the extend — the extend itself is not undone.

  • A past expiration date is allowed. If restoring the previous state results in an expiration date that is now in the past, the revert still proceeds — this is expected when reversing an early renewal.

  • One revert per order. After a revert, no further revert is possible on that subscription until a new order is placed.

  • No snapshot, no revert. The first order on a subscription, and subscriptions that predate this feature, have no earlier snapshot; no revert occurs.

What a revert restores — and what it doesn't

A revert restores the subscription fields captured in the snapshot — product, quantity, pricing option, and expiration date — and records the reversal, together with the reason provided, in the subscription's history. Some related data behaves differently:

  • Upgrades that created a new subscription. If the reverted order was an upgrade configured to generate a new subscription, the revert cancels the newly generated subscription and re-enables the original one. The change notification you receive carries the details of the reactivated original subscription.

  • Promotions with a fixed number of recurring charges. Reverting a renewal returns that billing cycle to the promotion's counter — the shopper does not lose one of their discounted cycles. However, if the promotional price had already ended (its last discounted cycle was consumed), the revert does not re-activate it.

  • Delivered activation codes. Codes already delivered to the shopper (for example, from a static code list) are not retracted or re-issued by a revert. If code validity matters to your product, handle deactivation on your side when you receive the revert notification.

Change notification (LCN)

Whenever a revert occurs — automatic or on-demand — the platform can dispatch a LICENCE_REVERTED_TO_SNAPSHOT webhook to your configured endpoint. The payload contains:

  • The subscription reference

  • The restored field values (product, quantity, pricing option, expiration date, delivery code)

  • A dispatchReason value indicating why the revert happened

The notification is sent only if you have enabled the trigger (see Control Panel behavior → Enable the revert notification). If your endpoint is unreachable, delivery is retried according to the standard LCN retry policy.

Historical values in email templates

Snapshotting makes previous subscription values available as variables you can add to your email templates:

Variable
Available in
Shows

OLD_PRODUCT_NAME

Order Confirmation email (after an upgrade)

The product the shopper had before the upgrade

OLD_QUANTITY

Order Confirmation email (after an upgrade)

The quantity before the upgrade

OLD_PRICING_OPTION

Order Confirmation email (after an upgrade)

The pricing option before the upgrade

All of these variables degrade gracefully: if the source data is not available (for example, on a non-upgrade order, or a subscription with no prior snapshot), the variable renders as an empty string — it never blocks or breaks the email.

OLD_PRODUCT_NAME in the Auto-Renewal Reminder email is a different, pre-existing variable. The snapshot-sourced variables above apply to the Order Confirmation (payment receipt) email only.

Control Panel behavior

This section describes what you can configure and do in the Control Panel.

Enable the revert notification

To receive a webhook whenever a subscription is reverted:

  1. Go to IntegrationsLCN.

  2. Locate the Reverted to previous snapshot trigger.

  3. Scroll down and click on the Update button.

From that point on, every revert on your account dispatches a LICENCE_REVERTED_TO_SNAPSHOT notification to your endpoint. The setting applies to your whole account and can be turned off at any time.

Show previous values in the Order Confirmation email

To show shoppers what they had before an upgrade:

  1. Go to Marketing ToolsEmail Editor.

  2. Open the template you want to edit.

  3. Insert one or more of OLD_PRODUCT_NAME, OLD_QUANTITY, OLD_PRICING_OPTION where you want them to appear.

  4. Save and preview.

On the next upgrade order, the confirmation email shows both the previous and the new values (for example, "Previous plan: Standard, 1 seat" alongside "New plan: Professional, 1 seat"). On non-upgrade orders, these variables render empty.

Reverting a subscription when you refund an order

When you refund the last order placed on a subscription — a renewal or an upgrade — you can restore the subscription to the state it had before that order, as part of the same refund:

  1. Open the order in the Control Panel and choose Request refund.

  1. On the refund screen, if the subscription is eligible, a Revert to initial subscription values option appears in the product table. It is pre-checked for full refunds.

  2. A tooltip shows exactly what will change — for the product, expiration date, quantity, and pricing option; it lists the current value and the value it will revert to.

  1. Review the changes and submit the refund.

The refund is processed and the subscription is restored to its state before the last order. If you have the revert notification enabled, a LICENCE_REVERTED_TO_SNAPSHOT webhook with the restored values is dispatched to your endpoint.

You can uncheck the option to refund without touching the subscription — for example, to let the shopper keep the extended expiration date.

When the option is hidden or not selectable:

  • The order is a purchase (the first order on the subscription) — there is no earlier state to revert to.

  • A revert was already performed on this subscription and no new order has occurred since — reverting further back is not supported.

  • An extend (or another change made outside an order) occurred after the last order — the subscription was modified outside an order, so restoring the previous state would discard that change.

  • The subscription has no snapshot for the last order (for example, a subscription created before this feature was released) — there is nothing to revert to.

Important!

Chargebacks

A chargeback by itself does not revert a subscription. When 2Checkout processes a chargeback as a refund of the subscription's last order, the standard revert rules above apply.

Revert via API

You can trigger the same revert programmatically, supplying the subscription reference, the reference of its last order, and a mandatory reason that is written to the subscription's history. See Revert a subscription in the API reference — the API documentation is published separately.

Troubleshooting

The “Revert to initial subscription values” option is not showing on the refund screen. Expected in these cases: the order being refunded is a purchase (first order — no earlier state exists); a revert was already performed and no new order has occurred since; the subscription was modified outside an order after the last order; the subscription predates this feature and has no snapshot; or the refund is partial (editing quantity or amount disables the revert). Also, the revert cannot be selected together with Cancel subscription or Stop automatic billing.

A revert request via the API is rejected. Most commonly, the subscription was modified outside an order after the last order — restoring the previous state would discard that later change. Resolve the later change first, or handle the correction manually. See the error table on the Revert a subscription API reference page.

The reverted expiration date is in the past. This is expected when you reverse an early renewal — restoring the previous state naturally restores the earlier expiration date. The platform accepts past expiration dates for revert operations.

An old-value email variable (OLD_PRODUCT_NAME, OLD_QUANTITY, OLD_PRICING_OPTION) shows nothing. The variable had no source data to display: the order was not an upgrade, or the subscription has no prior snapshot. This is safe — the variable simply renders empty and the email is sent normally.

I did not receive a revert webhook. Confirm the Reverted to previous snapshot trigger is enabled under Integrations → LCN and that your endpoint URL is correct and reachable. Failed deliveries are retried per the standard LCN retry policy.

Last updated

Was this helpful?