Skip to main content
A subscription management page lists a customer’s plans and lets them cancel one. This page is the only place a cancellation reason can come from, so it is worth building properly: without it your churn reporting can only ever say “Not specified”. Enable Manage first in Merchant settings → Customer care. Without it the helpers below return nothing.

Listing subscriptions

getSubscriptions(status, limit) returns the logged-in customer’s subscriptions. Call it once per status you want to show.
Each subscription carries original_transaction_id, which identifies it to every call below. Keep it on the button.

Asking why, before cancelling

cc.getManageData(transactionId) returns what the customer is allowed to do, including exit_survey_reasons - the list to put in your dropdown.
If the merchant has not configured its own list, you get the standard set: These keys are identifiers, not copy. Show your own wording to the customer and send the key back. temporary_pause and too_much_product are worth watching: both usually mean the plan interval is wrong rather than the product being wrong, and both are recoverable with a retention offer.

Cancelling, with the reason attached

Pass the selected reason as the second argument. This is the step that is easy to miss, and missing it silently costs you the whole survey - the cancellation still succeeds, so nothing looks broken, and every row in your Cancel Reasons report reads “Not specified”.
Use ef.sub.cancel(reason) instead if you want to stay on the page and handle the result yourself. Both accept the reason; both work without it.

Offering something before they go

If retention offers are enabled, getManageData also returns offers. An offer can be matched to the reason the customer picked, so a price complaint gets a discount and an oversupply complaint gets a longer interval.
See Retention Offers for configuring them.

Checking it worked

Cancel a test subscription, choose a reason, then open Reports → Subscriptions and look at the Cancel Reasons card. The reason should appear by name within a minute or two. If it says “Not specified”, the reason is not reaching the server. In almost every case that is the second argument missing from cancelThenNavigate.