Clear payment method

Jackie Jackson's Avatar

Jackie Jackson

16 Aug, 2017 06:58 PM

Hi, Was wondering if there is a way to "clear" user's payment method, but leave him running on his current subscription until next renewal (that is where you'd detect the lack of payment method and downgrade the user)

Thank you.

  1. Support Staff 1 Posted by Meghan Turner on 16 Aug, 2017 09:05 PM

    Meghan Turner's Avatar

    Hi Jackie,

    Once a customer has a payment method on file, that payment method can only be replaced with a different payment method, not removed entirely.

    However, if I know more about the problem you're trying to solve, I may be able to suggest an alternative solution. Are using you Cheddar to determine who should have access to your platform and are trying to give a canceled customer access to your platform for a limited period of time after cancellation? If so, do you anticipate that the customer will want to reactivate after being canceled? Or is the customer changing to a different plan at the end of the billing period? Any information you can provide about your use case would be helpful! Thanks, Jackie.


  2. 2 Posted by Jackie Jackson on 17 Aug, 2017 02:59 PM

    Jackie Jackson's Avatar

    The idea here is to let user remove his payment method but remain with his current subscription until it is about to renew. In the end, user did pay for a whole month and he should be able to receive full service regardless of whether he wants to have payment method on file or no.

    As for whether customer will want to re-add payment method - we don't know. He might do so. He might add same payment method or a different one. In both cases it is desirable to introduce as few interruptions to user's subscription as possible.

    In our platform, user's permissions are determined by his subscription plan code.

  3. Support Staff 3 Posted by Meghan Turner on 17 Aug, 2017 08:11 PM

    Meghan Turner's Avatar

    Hi Jackie,

    Thanks for the additional information. Depending upon what you'd like to happen to the customer's subscription after their billing cycle ends, you have a couple of options.

    If the goal here is to simply remove the payment method, but keep the customer active (i.e. not canceled) until they add a different payment method, you can set the customer's payment method to external on their Edit Subscription page in the user interface or via the API. External payments are typically used to indicate to Cheddar that the customer is paying via a source that isn't connected to your Cheddar product account (for example, the customer is paying you via check instead of credit card). In this case, it allows you to remove the customer's credit card from their Cheddar account without canceling their subscription. However, it is important to note that if a customer's payment method is external, Cheddar will always assume that their recurring bill is paid and will never auto-cancel the customer.

    If the goal is to cancel the customer's subscription at the end of the billing cycle, you'll need to setup a process to do that. Cheddar was designed with automated recurring billing in mind, so we aim to make it as simple as possible for you to continue charging a customer who has a valid payment method unless they decide they'd like to cancel their subscription. As such, Cheddar doesn't auto-cancel a customer's subscription unless their payment method is invalid, but you do have the option to cancel the customer yourself either manually in the user interface or via the API if they choose not to renew their subscription by the end of their next billing cycle.

    To simplify this process, I'd suggest using the subscription billable hook. The billable hook fires when an invoice becomes due, but before it's transacted which gives your application the opportunity to make changes to the invoice or customer record before the invoice runs. In this case, when the customer's next invoice is due, it will mark the end of the period that they've paid for, so when your listener receives the subscription billable hook for this customer, you can cancel their subscription in Cheddar before their next invoice runs. Once they're canceled, the customer will need to add a payment method (can be the same payment method as before or a different method) to reactivate their account.

    Would either of these solutions (or perhaps a mixture of both) work for you, Jackie, or are there other factors in your use case that I'm not taking into consideration?


  4. 4 Posted by Jackie Jackson on 17 Aug, 2017 08:26 PM

    Jackie Jackson's Avatar

    Hi Meghan.

    Thank you for detailed explanation. However, this flow brings a lot of complications as in this case we'd have to track payment method on our end and, in fact, duplicate portion of your functionality.

    Best (but not desirable) solution for us here would be to just stick with your flow and let user know that his subscription will be cancelled as soon as he removes his payment method. This will be more stable, straightforward and less error-prone.

    Thank you.

  5. 5 Posted by Jackie Jackson on 03 Sep, 2017 01:33 PM

    Jackie Jackson's Avatar

    Meghan, getting back to this discussion, if we decide to go with billable hook and cancel subscription on our end, does it mean that user will have to pay for an outstanding invoice as well when he decide to reactivate subscription?

    For example, say user paid for January, somewhere in the middle he removes his payment method and we transition him onto external payment method. At the end of January we receive subscriptionBillable hook from you. At this point, an outstanding invoice is created for February (right?). We notice that user still doesn't have valid payment method and we cancel his subscription. Invoice for February is still due. Now, when user wants to reactivate his subscription on, say, April, he will be charged for February and April, which is incorrect.

    I was looking for a way to waive an outstanding invoice in your system and, frankly, didn't find one. Wonder wat would be the right way to handle situation in the scenario above, where your should only be charged for January and April.

  6. 6 Posted by Jackie Jackson on 03 Sep, 2017 02:15 PM

    Jackie Jackson's Avatar

    Also i'm struggling to find in api reference how to set payment method to external. Can you please provide some info on this as well or send some links to api reference?

  7. Support Staff 7 Posted by Meghan Turner on 05 Sep, 2017 04:07 PM

    Meghan Turner's Avatar

    Hey Jackie,

    In the scenario you described, where the user is canceled after their January invoice becomes due, yes the January invoice would remain outstanding on their account unless the invoice is waived or the customer pays the invoice on reactivation. To waive an invoice via the API, you can add a custom credit to the outstanding invoice to offset all charges bringing the invoice total to $0 and then run the outstanding invoice. You can also waive an invoice in the user interface by visiting the customer's account page, going into the invoice you'd like to waive, click 'waive invoice' at the bottom of the page, and then run the invoice.

    To create or edit a customer to add an external payment method via the API the only required params are:

    "code": "[unique identifier of the customer, only required for `customers/new`]"
    "firstName": "[customer first name]"
    "lastName": "[customer last name]"
    "email": "[customer email address]" 
    "subscription" {
              "planCode": "[only required on `customers/new` call or if changing the customer's pricing plan when editing billing method]"
              "method": "[external]"
              "gatewayToken": "[when payment method is external, this can be whatever you'd like]" 
              "ccFirstName": "[payer's first name]"
              "ccLastName": "[payer's last name]"

    The value for the subscription[method] param should set to external. The value for the subscription[gatewayToken] param for customers on an external method can be whatever you'd like. Some merchants use this param to store a information about the customer's record in an external system (like their account number in Quickbooks, for example).

    Hope that helps, Jackie, but let me know if you have any additional questions!


  8. 8 Posted by Jackie Jackson on 05 Sep, 2017 04:15 PM

    Jackie Jackson's Avatar

    Some clarification here: we use prepayment (that is, payment is made when billing period starts), so in example above user already paid for January.
    Now it's time for new billing cycle - first of February. At this point user is already on external payment method and we don't want to bill him for February. If i understand correctly - you will create an outstanding invoice for February that is to be paid either on February or at next subscription reactivation. However, this is incorrect behaviour in our case, as user doesn't get paid services for February.

    According to your documentation, if we add credit to user's invoice and run outstanding invoice, it will be treated by cheddar as successful payment and user will remain on paid plan. For scenario described above this is also an invalid behaviour as we don't want user to remain on paid subscription because in reality he didn't pay for it.

    The only solution i see here is to add credit to waive an invoice, run outstanding invoice and then terminate user's subscription. Am i thinking correct here? Is there some different way to achieve this (one that wouldn't require us doing three separate transactions)

  9. Support Staff 9 Posted by Meghan Turner on 06 Sep, 2017 09:39 PM

    Meghan Turner's Avatar

    Hi Jackie,

    If i understand correctly - you will create an outstanding invoice for February that is to be paid either on February or at next subscription reactivation.

    Correct. If the January 1 invoice has been paid, there will be a pending invoice due on February 1. If the February 1 invoice becomes due (the billable hooks fires after the invoice becomes due, but before it's transacted) and isn't paid before the customer is canceled, the outstanding invoice will remain on the customer's account and will either need to be waived or paid on reactivation.

    According to your documentation, if we add credit to user's invoice and run outstanding invoice, it will be treated by cheddar as successful payment and user will remain on paid plan.

    Also correct, so you'll need to cancel the customer after waiving and running the invoice.

    The only solution i see here is to add credit to waive an invoice, run outstanding invoice and then terminate user's subscription. Am i thinking correct here? Is there some different way to achieve this (one that wouldn't require us doing three separate transactions).

    This solution would definitely work, although you may want to keep in mind how using the external method for this use case (to replace a credit card or paypal account on the customer record) might effect your system in the future if you decide to use the external method feature as it was intended (continuing to manage subscription information in Cheddar for customers who are paying with a method outside of Cheddar, like by invoice).

    The only other option I can think of is to change the way your access logic works to allow a customer with a canceled subscription temporary access to your platform until their already pending billing date passes. In our example, the customer cancels their account on January 15th, but you continue to give them access until February 1 (which would be the billingDateTime of their most recent invoice). This would allow you to skip the process of putting the customer on an external method and cancel the subscription right away, rather than waiting until their next invoice becomes due.

    However, this would only work if you're using the Cheddar customer record to determine when a customer should be allowed access to your platform and the logic needed to make this determination might be somewhat complex since you'd need to anticipate a variety of potential scenarios where a canceled customer might try to access the platform. If you do want to explore this option further, I'd recommend taking a look at the xml response for a few of your canceled customers to see the information contained in the customer record that you could use to create this logic. I think the canceledDateTime, billingDateTime of the most recent invoice, and cancelType params will be useful to you, but depending on how you'd like to design your logic, there could be other params, like planCode you'd like use as well.

    Happy to answer any questions you might have about either of these options!


  10. Marcela Poffald closed this discussion on 11 Apr, 2018 04:06 PM.

Comments are currently closed for this discussion. You can start a new one.

Keyboard shortcuts


? Show this help
ESC Blurs the current field

Comment Form

r Focus the comment reply box
^ + ↩ Submit the comment

You can use Command ⌘ instead of Control ^ on Mac