Annual plan downgrade - Graphql status?

ko-lem
Shopify Partner
15 0 7

I'm reading this https://shopify.dev/apps/billing/subscriptions/annual#plan-changes and I'm wondering if there is a way to see this deferred status and the subscription cycle end date through the Graphql.

 

For example, if a merchant downgrades from a $200/year to $10/month subscription - GraphQL shows the $200/year plan as cancelled and the $10/month plan as active. This is a bit confusing since I expect the $200/year to still be active and the $10/month to be in a deferred status (and switch to active next year). Especially since my app should really still be giving the features of the $200/year "cancelled" plan until it officially ends.

Replies 3 (3)

shogun_hugo
Shopify Partner
5 0 4

We are also seeing this in 2023. Any thoughts, Shopify?

 

How can we know what yearly subscriptions are deferred vs active?

 

According to the documentation, with the "standard" behaviour, updates should replace the current subscription when the new subscription is more expensive. Otherwise, the replacement is deferred.

We are not seeing this. Instead, it seems that Shopify "cancels" the current yearly subscription and adds a new "active" one, even when that amount is lower. Then the billing period carries over to the new one. This can be repeated many times.

 

This is what happened after I downgraded a running $25 yearly plan to a $17 one in production:

{"id"=>30433181995,
  "name"=>"build",
  "price"=>"17.00",
  "billing_on"=>"2024-08-11",
  "status"=>"active",
  "activated_on"=>"2023-08-14",
...

{"id"=>30432756011,
  "name"=>"grow",
  "price"=>"25.00",
  "billing_on"=>nil,
  "status"=>"cancelled",
  "activated_on"=>"2023-08-14",
  "test"=>false,
  "cancelled_on"=>"2023-08-14",
...


Hence, we can't tell which yearly subscription should remain active. Should the paid yearly subscription remain "active"  until the end of its billing cycle, and any deferred subscriptions have a new state, e.g. "deferred"?

 

What do you advise Shopify?

How did you tackle this @ko-lem ?

shogun_hugo
Shopify Partner
5 0 4

Shopify – These are the mains issues:

 

  • Live and test charges need to act the same. We shouldn't be required to use live charges to test the replacement behaviour. That defeats the purpose of having test charges.
  • Charges are not a useful model for us to track subscriptions/plans. They have distinct purposes. Shopify only cares about when charges are due. We care about which plans are active and which ones are deferred.
  • Documentation is contracting itself.

Your documentation states that:

The existing recurring app charge is canceled and replaced by the new charge when the merchant approves it.

If a merchant switches from an annual plan with a higher price to an annual plan with a lower price, or from an annual plan to a 30 day plan, then the charge for the new plan is deferred until the current plan’s subscription cycle is complete.

Here, it's mentioned that charges are replaced immediately, and it's the billing of the charge that is deferred. That's what we are seeing.

However, the GQL documentation states:

Cancels the merchant’s current app subscription immediately and replaces it with the newly created app subscription, with the exception of the following scenarios where replacing the existing app subscription will be deferred until the start of the next billing cycle.

Here, it's said that “replacing” will be deferred. This is confusing and incorrect. One says charges are replaced, whereas this one says it depends. It turns out the GQL documentation is incorrect. The replacement happens regardless. It’s the billing that is deferred.

ko-lem
Shopify Partner
15 0 7

It's still an existing issue. But it doesn't bother me since that app doesn't have any paying customers 😂