Skip to content

Updating Active Subscriptions

Upselling is critical to a successful subscription business and now you can create a flow on your site for users to quickly upgrade. Customer subscriptions can be changed through the Customer Service admin by your representatives or using public APIs with an upgrade flow for your customers. Both of these options allow for immediate subscription product or price changes. There are also developer APIs available to schedule a price change after the current renewal cycle is complete.

Customer Service Admin Subscription Changes

At times your customer service agents will want to update a reader’s subscription as a retention effort or as a large price strategy change. Changes to one subscriber’s product or price can be made in the Customer Support Portal on the active subscription screen.

Website Subscription Changes

A key part of a subscription product strategy is helping customers upgrade to a higher tier product. There are two public APIs that can be used to build a user flow that will make a change to a customer active subscription granting them immediate entitlement. This can be used to upgrade customers to a high value product but also in a “save” flow to downgrade a product or price. As part of the subscription change, these APIs will provide the customer a refund for any remaining balance, and then charge the customer for the new subscription terms.

There are two main API endpoints that need to be used to make the subscription change, calculate a refund and the new charge amount.

  • InitializePriceUpdate: This will validate all details for change, calculate any refund amount, new charge amount based on the Subscription ID and Price Code that is passed. The respond will include the details below.

    {
    “initializedId”: “793cdad9-231e-4579-a3f0-3b5ace6f8c19″,
    “refundAmount” : 12.3,
    “chargeAmount” : 33.2,
    “taxAmount” : 3.2,
    “refundAmountMin” : 10.0,
    “chargeAmountMin” : 10.0,
    “refundAmountMet” : true,
    “chargeAmountMet” : true,
    “sameRenewalterms” : true,
    “nextRenewalDateUTC” : “2018-06-22T15:27:43.606Z”
    }
  • FinalizePriceUpdate: This will execute the change with the already calculated refund and charge amount based on the Subscription ID and Initialized ID (from initializePriceUpdate) that are passed in. The response will include the details below.

    {
    “subscriptionID”: 123,
    “productSKU” : “SKU”,
    “productName” : “productName”,
    “priceCode” : “PRI001″,
    “nextEventDateUTC” : “2018-06-22T15:27:43.606Z”
    }

For a Price Code to be eligible for a price change by an end user it will need to be set as “change eligible” in the Price details screen. This can be done for all Prices, even ones that are part of a Published offer.

Price details sales

An example flow for an upgrade path can be found in the Developers guide to setting up a Paywall.

Based on the type of change made to the active subscription renewal terms there are two options for the next renewal date, refund and new charge:

  1. Change Subscription and keep the same renewal terms: (month to month, year to year)
  2. Change product/price and move to different renewal terms: (monthly to yearly, yearly to weekly, compare number of weeks & days as different terms, example 30 days to 10 days, 2 weeks to 4 weeks)

Arc XP has additional APIs to update active subscriptions. To learn more, see Change price for subscription.

Server to Server and Bulk Subscription Changes

Prices increase and your subscription strategy needs to be adjust with the market. The pricing tiers provides flexibility when creating short term promotional rates and increases but for wider strategy updates more tools are needed. We provide 2 API endpoints for clients to do a mass price change and move subscribers to a new price rate. These APIs can be used to update an individual subscription using the Subscription ID or bulk updates using the Product and Start Date.

Individual Subscriptions

  • The endpoint PUT …/sales/api/v1/subscription/{id}/pricechange is used to update the product and price for the specific Subscription ID.
  • A future date, effectiveDate, is required and will be used to schedule when the price change can be processed. The change goes into affect on the first renewal after this date.
  • The Product SKU and Price Code are used to set the new price rate. The Price must be added and linked to the Product prior to starting the price update and applying it the subscriptions for the change to process.
  • The initial price rate cycle index is 0. The first rate, index 0, will be used if no cycle is entered. A different cycle can be entered by using 1 as the second tier, 2 as the third.

This API allows clients to connect with propensity systems that can select the Subscribers most likely to accept a price increase.

Bulk updates

  • The endpoint POST …/sales/api/v1/batchpricechange is used to update the product and price for multiple subscriptions based on their current Product, Price and the date they started. This endpoint can be used for updating all customers who have been subscribers of a specific product for a length of time.
  • The Started Before Date, from SKU and from Price Code determines what subscriptions are impacted by the update.
    • Product SKU and codePrice need to be associated for the change to process
  • A future date, effectiveDate, is required and will be used to schedule when the price changes can be processed. Each change will go into affect on their first renewal after this date.
  • The To Product SKU and To Price Code are used to set the new subscription details. The Price must be added and linked to the Product prior to starting the price update and applying it the subscriptions for the change to process.
  • The initial price rate cycle index is 0. The first rate, index 0, will be used if no cycle is entered. A different cycle can be entered by using 1 as the second tier, 2 as the third.

Client Communication
Three WebSocket Events are sent at different intervals when a price change is scheduled; Price Change Scheduled, Upcoming Price Change (sent 14 days prior to price change), Update SKU PriceCode. These can be used to communicate with your customers on the pending price change.

Considerations:

  • Changing price only applies to “paid” subscriptions. “cancelled”, “terminated”, “free” and “linked” subscriptions cannot have a price change. Only an active or suspended subscription can have its price changed.
  • The new price should be equal to or higher than zero. Note: Paypal doesn’t accept zero-dollar price change renewals.
  • When several changes are made over the same price, these changes are queued and will be applied in order. For now, the only way to remove the values from this queue is using Private APIs.
  • If a change price is scheduled for a batch of users, this will only affect those subscriptions that exist when the price change is requested.

Additional details on using these APIs can be found in the Subscriptions APIs .

Refunds Calculations for Subscription Changes

When making an update to an active product or price in the Customer Service Admin, if the change is to take effect immediately, a refund will sometimes need to be given to the customer for the remainder of the balance. More details of the Customer Service Admin functionality are available in the How to use customer service admin in Arc XP subscriptions guide, under the Subscriptions section.

The system will provide a suggested prorated refund amount based on the amount that was paid during that billing cycle. The prior refunds are considered in the calculation for the suggested refund amount. If the subscription is in the middle of a payment cycle then a prorated amount will be suggested using the calculation below. Tax is included as part of all calculations and all time calculations are to the millisecond.

suggestedRefund = (lastPaymentAmount) * [remainingTimeOnCurrentCycle / totalTimeCurrentCycle]

After the refund and new price charge, the subscription renewal will continue based on the new price terms. The next charge will happen based on the new price terms schedule.