Our React + Node web app offers monthly subscriptions using stripe under the hood, and we'd like to give users the ability to toggle between auto-pay yes or no for their next month, using a simple toggle switch with the stripe API being called when toggled:
Toggling auto-renew doesn't impact the user's current status on our web app (if subscribed, then stay subscribed), rather it simply impacts whether or not the user is billed at the end of the month (and by extension, their access ability on our platform).
Stripe API seems to offer a few ways to handle this:
- upgrade & downgrade subscriptions https://stripe.com/docs/billing/subscriptions/upgrade-downgrade
- cancel subscriptions https://stripe.com/docs/billing/subscriptions/cancel
- pause payment collection https://stripe.com/docs/billing/subscriptions/pause
We are currently using upgrade & downgrade subscription, and are downgrading users to a subscription with a price of $0 when they do not want to auto-pay for next month:
router.post('/toggle_auto_pay', async function (req, res) {
try {
const { isAutoPay } = req.body;
const subscription = await stripe.subscriptions.retrieve('sub_123456789876');
// these are stripe price keys e.g. 'price_123456etc'
let newPrice = isAutoPay === true ? STRIPE_40_PRICE : STRIPE_0_PRICE;
stripe.subscriptions.update('sub_123456789876', {
items: [
{
id: subscription.items.data[0].id,
price: newPrice,
},
],
proration_behavior: 'none', // we do not want to bill or prorate users on toggle
});
res.status(200).json({ subscription });
} catch (err) {
console.log('err: ', err);
res.status(500).json({ statusCode: 500, message: err.message });
}
});
We are having two issues with this:
- When a users subscription is toggled from $0 back to $40 / month, the user is automatically charged $40, and their monthly billing period is updated to the current moment + 1 month from now.
- When a user is set to $0, stripe still appears to generate and send an invoice each month to the user.
Our question is:
- is it possible to not charge the user or change their monthly billing when updating to a new subscription?
- would we be better off using
pause payment collectionrather thanupgrade & downgrade subscription? Not sure what the proper stripe practice would be here.

