Reactivate a Subscription Item

Overview

This guide shows you how to implement the Reinstate Subscription Items and Update Next Billing Date endpoints to reactivate all items in a deactivated subscription.

Use case

  1. A Cloudify customer previously canceled their cloud storage subscription, causing the subscription status to change to Deactivated.

  2. Cloudify offers the customer the option to resume the subscription.

  3. The customer confirms that they want to resume the subscription.

  4. Cloudify calls the Reinstate Subscription Items endpoint to reactivate the selected subscription items.

  5. Immediately after reactivation, Cloudify calls the Update Next Billing Date endpoint to set a new billing date based on the reactivation date.

Result

The Cleverbridge platform reactivates the selected subscription items and resumes recurring billing on the updated next billing date.

Implement API endpoints

Before you start

Make sure that:

  • The subscription has the status Deactivated.
  • Each subscription item to be reactivated belongs to an actively sold product.

🚧

Important

Get the customer's consent before making changes to a subscription.

To avoid chargebacks and customer inquiries, it is also essential that you coordinate all price increases with Client Experience.

In the European Economic Area (EEA), Strong Customer Authentication (SCA) is required for recurring electronic payments when the amount changes. This means that some of your customers will have to authenticate their payment, which in turn might impact the renewal success rate.

For more information, see Best Practices: Obtain Customer Consent.



Step 1: Reinstate the subscription items

Use the Reinstate Subscription Items endpoint to reactivate multiple subscription items.

📘

Note

You can reactivate all subscription items or only selected items by specifying the corresponding item running numbers in the Items array.

Parameters

ParameterTypeRequiredExampleNotes
SubscriptionIdstrYesS67560422The unique identifier of the subscription.
Itemsarray[int]Yes[1,2,3,4]Array of subscription item running numbers identifying the items to reactivate.

Request

curl --location 'https://rest.cleverbridge.com/subscription/reinstatesubscriptionitems' 
--header 'Content-Type: application/json' 
--header 'Accept: application/json' 
--header 'Authorization: Basic YOUR_BASE64_ENCODED_CREDENTIALS' 
--data '{
  "SubscriptionId": "S67560422",
  "Items": [1,2,3,4]
}'
import http.client
import json

conn = http.client.HTTPSConnection("rest.cleverbridge.com")
payload = json.dumps({
  "SubscriptionId": "S67560422",
  "Items": [
    1,
    2,
    3,
    4
  ]
})
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Basic YOUR_BASE64_ENCODED_CREDENTIALS'
}
conn.request("POST", "/subscription/reinstatesubscriptionitems", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var https = require('follow-redirects').https;
var fs = require('fs');

var options = {
  'method': 'POST',
  'hostname': 'rest.cleverbridge.com',
  'path': '/subscription/reinstatesubscriptionitems',
  'headers': {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Authorization': 'Basic YOUR_BASE64_ENCODED_CREDENTIALS'
  },
  'maxRedirects': 20
};

var req = https.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function (chunk) {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });

  res.on("error", function (error) {
    console.error(error);
  });
});

var postData = JSON.stringify({
  "SubscriptionId": "S67560422",
  "Items": [
    1,
    2,
    3,
    4
  ]
});

req.write(postData);

req.end();
Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.post("https://rest.cleverbridge.com/subscription/reinstatesubscriptionitems")
  .header("Content-Type", "application/json")
  .header("Accept", "application/json")
  .header("Authorization", "Basic YOUR_BASE64_ENCODED_CREDENTIALS")
  .body("{\n  \"SubscriptionId\": \"S67560422\",\n  \"Items\": [1,2,3,4]\n}")
  .asString();

JSON Body

{
    "SubscriptionId": "S67560422",
    "Items": [
        1,
        2,
        3,
        4
    ]
}

Response

{
    "ResultMessage": "OK"
}

Step 2: Update the next billing date

Use the Update Next Billing Date endpoint to set a new next billing date based on the reactivation date.

Parameters

ParameterTypeRequiredExampleNotes
SubscriptionIdstrYesS67560422The unique identifier of the subscription.
NextBillingDatedatetimeYes2026-07-30T12:01:00ZThe new billing date for the subscription. Must be in the future.

Request

curl --location 'https://rest.cleverbridge.com/subscription/updatenextbillingdate' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Basic YOUR_BASE64_ENCODED_CREDENTIALS' \
--data '{
  "NextBillingDate": "2026-07-30T12:01:00Z",
  "SubscriptionId": "S67560422"
}'
import http.client
import json

conn = http.client.HTTPSConnection("rest.cleverbridge.com")
payload = json.dumps({
  "NextBillingDate": "2026-07-30T12:01:00Z",
  "SubscriptionId": "S67560422"
})
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Basic YOUR_BASE64_ENCODED_CREDENTIALS'
}
conn.request("POST", "/subscription/updatenextbillingdate", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
var https = require('follow-redirects').https;
var fs = require('fs');

var options = {
  'method': 'POST',
  'hostname': 'rest.cleverbridge.com',
  'path': '/subscription/updatenextbillingdate',
  'headers': {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Authorization': 'Basic YOUR_BASE64_ENCODED_CREDENTIALS'
  },
  'maxRedirects': 20
};

var req = https.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function (chunk) {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });

  res.on("error", function (error) {
    console.error(error);
  });
});

var postData = JSON.stringify({
  "NextBillingDate": "2026-07-30T12:01:00Z",
  "SubscriptionId": "S67560422"
});

req.write(postData);

req.end();
Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.post("https://rest.cleverbridge.com/subscription/updatenextbillingdate")
  .header("Content-Type", "application/json")
  .header("Accept", "application/json")
  .header("Authorization", "Basic YOUR_BASE64_ENCODED_CREDENTIALS")
  .body("{\n  \"NextBillingDate\": \"2026-07-30T12:01:00Z\",\n  \"SubscriptionId\": \"S67560422\"\n}")
  .asString();

JSON Body

{
    "NextBillingDate": "2026-07-30T12:01:00Z",
    "SubscriptionId": "S67560422"
}

Response

{
    "ResultMessage": "OK"
}

Diagram

flowchart LR
  classDef mainColor fill:#ffffff,color:#555555,stroke:#96C34B,stroke-width:2px;

  A(["&nbsp;&nbsp;<br/><b>Reactivation</b><br/>Cloudify calls the <i>Reinstate Subscription Items</i> endpoint&nbsp;&nbsp;<br/>&nbsp;"]):::mainColor
    --> B(["&nbsp;&nbsp;<br/><b>Updating the Billing Date</b><br/>Cloudify calls the <i>Update Next Billing Date</i> endpoint&nbsp;&nbsp;<br/>&nbsp;"]):::mainColor
    --> C(["&nbsp;&nbsp;<br/><b>Billing</b><br/>Cleverbridge reactivates the subscription and resumes billing from the new billing date&nbsp;&nbsp;<br/>&nbsp;"]):::mainColor