We’ve encountered a change in how Shopify calculates delivery options (ie shipping rates) for subscriptions. Previously, if a product in a subscription contract carried a valid selling plan ID from a selling plan group that was associated with the subscription shipping profile, Shopify would return the correct subscription rate — even if the line’s variant wasn’t originally included in that specific selling plan group.
Recently, Shopify appears to have changed this behavior. Now, if the selling plan ID on the subscription line does not explicitly match one of the product’s available selling plans (at the moment of requesting delivery options), Shopify defaults to returning the general shipping profile’s rate instead of the subscription profile’s rate.
Steps to Reproduce (Case 1: Variant Swap)
-
Create two subscription plan groups (e.g. “Legacy Plan” and “New Plan”), each with distinct variants (e.g. “Legacy Variant” and “New Variant”).
-
Associate both plan groups with the same subscription shipping profile (give it a free rate and make sure the general profile is paid so that you can see the clear difference).
-
Create a subscription with Legacy Variant and Legacy Plan. Now you should have a subscription contract with one line that contains the Legacy Variant and the Legacy Plan Selling Plan Id
-
Request delivery options for the contract. Result: Subscription shipping profile rates returned. All good
-
Swap the variant ID on the new subscription contract’s line to that of New Variant but do not update the selling plan Id of the line.
-
Request the delivery options for the subscription.
-
Rate returned = general shipping profile, not subscription profile’s rate.
Steps to Reproduce (Case 2: Add-ons)
-
Create a subscription with variants tied to a subscription shipping profile. (basically - run through steps 1 through 3 above)
-
Request delivery options for the contract. Result: Subscription shipping profile rates returned. All good
-
Add a new line to the subscription with a variant that does not belong to any selling plan groups and use the selling plan id of the existing line (some merchants like to have variants that are only available as one-time add-ons to subscription customers so they don’t want to add them to selling plans and make them available as subscriptions on their shop).
-
Result: the add-on product may not actually belong to that specific selling plan group.
-
Request delivery options for the contract. Result: General shipping profile rates returned. (not good)
Expected Behavior (previous behavior)
If the selling plan ID belongs to a subscription plan group associated with a subscription shipping profile, Shopify should return the subscription profile’s rate — even if the specific product is not part of that plan group. This is the way it’s been since the creation of the subscriptions api as far as I can tell.
Actual Behavior (new behavior)
Shopify only returns the subscription shipping profile rate if the product/variant itself is associated with the selling plan’s group at the moment you request the delivery options. Otherwise, it falls back to the general shipping profile.
Impact
-
Swapping variants in a subscription causes major issues for shipping rate calculations
-
Add-ons also fall into this failure path, since the selling plan ID assigned to ensure subscription shipping is used is no longer accepted unless the product explicitly belongs to the plan.
-
Customers are being charged higher or incorrect shipping fees in cases that previously worked as intended.
Questions for Shopify
Can this behavior be reverted to the prior model, where selling plan ID + shipping profile association was sufficient for correct rate calculation?