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
-
A Cloudify customer previously canceled their cloud storage subscription, causing the subscription status to change to
Deactivated. -
Cloudify offers the customer the option to resume the subscription.
-
The customer confirms that they want to resume the subscription.
-
Cloudify calls the Reinstate Subscription Items endpoint to reactivate the selected subscription items.
-
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.
ImportantGet 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.
NoteYou can reactivate all subscription items or only selected items by specifying the corresponding item running numbers in the
Itemsarray.
Parameters
| Parameter | Type | Required | Example | Notes |
|---|---|---|---|---|
| SubscriptionId | str | Yes | S67560422 | The unique identifier of the subscription. |
| Items | array[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
| Parameter | Type | Required | Example | Notes |
|---|---|---|---|---|
| SubscriptionId | str | Yes | S67560422 | The unique identifier of the subscription. |
| NextBillingDate | datetime | Yes | 2026-07-30T12:01:00Z | The 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([" <br/><b>Reactivation</b><br/>Cloudify calls the <i>Reinstate Subscription Items</i> endpoint <br/> "]):::mainColor
--> B([" <br/><b>Updating the Billing Date</b><br/>Cloudify calls the <i>Update Next Billing Date</i> endpoint <br/> "]):::mainColor
--> C([" <br/><b>Billing</b><br/>Cleverbridge reactivates the subscription and resumes billing from the new billing date <br/> "]):::mainColor