Handling upgrades & downgrades
Loop supports billing for subscriptions where the products or pricing has changed.
Downgrading
Downgrading is straightforward regardless of payment method:
- Update the subscription in Stripe - Change the product to the lower tier
- No action needed in Loop - Loop automatically handles the billing change
This works the same whether the customer pays with fiat or crypto, as you're simply modifying the existing Stripe subscription.
When invoicing immediately for a downgrade, the customer might be owed a credit, which is added to their credit balance to be applied to future invoices. These future invoices may be for $0. Loop does not display $0 invoices on the company dashboard however on the customer portal we will show the $0 invoice.
Once the customer has an invoice that is greater than $1, Loop will process the payment. The $1 threshold is a Stripe limitation, Stripe will not bill for an invoice less than $1 and will roll the amount over to the next month until the bill is at least $1.
Upgrades
There are two scenarios:
- The customer has their payment method already set to pay in crypto with Loop and you'd like to change their subscription products (i.e., upgrade the customer from Plan A to Plan B)
- The customer does not have their payment method already set to pay in crypto with Loop and you'd like to modify the subscription and have them pay with Loop in the same action.
The customer is already paying with Loop and you'd like to change their subscription
Stripe is your billing and invoice generation system. Logic about the subscription products should live in Stripe. Thus, to modify a subscription, use Stripe's endpoints (docs). When a subscription is updated in Stripe, Loop will hear about it via Stripe webhooks and will updated the subscription in our system. The customer does not need another payment link as they are already set up to pay via Loop. Please refer to directions here on how to best handle this case.
The customer is not already paying in crypto with Loop and you'd like to modify and have them pay in crypto with Loop in the same action
For customers currently on a $0 (free) product
In this scenario, the customer/subscription is already created in Stripe and the subscription has a $0 product. When you want the customer to pay to upgrade, you create a Loop Checkout Session for the upgrade passing in the externalPriceID
of the paid tier that you want to upgrade the customer to, the externalSubscriptionId
and set the value for the upgradeSubscription
parameter to TRUE. Please refer to directions here on how to handle this case.
Loop will switch both the product and payment method in one step
For customers currently on a paid fiat product
You have two approaches for handling the upgrade:
Option A: Switch payment method first, then upgrade
- Create Loop checkout session - Pass the existing sub-id
- Customer completes checkout - Switches from fiat to crypto payment
- Update subscription in Stripe - Change to the new product tier
- Loop charges the customer on the next billing cycle
Option B: Upgrade first, then switch payment method
- Update subscription in Stripe - Change to the new product tier
- Create Loop checkout session - Pass the existing
sub-id
- Customer completes checkout - Switches to crypto payment
- Loop charges for the next billing cycle
For immediate payment (prorated upgrades): If your upgrade creates a prorated charge that needs immediate payment, add payInvoiceImmediately: true
to your checkout session.
This will:
- Finalize any draft invoices
- Set the due date to now
- Require payment during checkout
The existing subscription is always modified, never replaced.
Important Notes
- Never create multiple subscriptions - Always modify the existing Stripe subscription by using the
sub-id
. This ensures Loop knows which subscription to update - Fiat-to-crypto upgrades require a checkout session - This handles the payment method switch
Updated 8 days ago