Listing subscriptions
getSubscriptions(status, limit) returns the logged-in customer’s subscriptions.
Call it once per status you want to show.
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.
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”.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.
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 fromcancelThenNavigate.