Hello Everyone!
I’m currently building a Shopify app (under review right now) using Shopify’s GraphQL Subscription Billing API. My app offers two subscription plans (Basic and Pro) providing access to different features, and merchants can customize the number of monthly credits they receive (e.g., selecting Pro with 100, 200, or more credits via a slider).
Here’s how we’re currently handling subscription changes:
- If a merchant upgrades credits mid-cycle (Pro with 100 credits → Pro with 200 credits), we create a new subscription and using
APPLY_IMMEDIATELY
. (Shopify cancels the previous one behind the scenes) - On downgrades (e.g., reducing credits or switching to a cheaper plan), we defer applying the new subscription until the next billing cycle (
APPLY_ON_NEXT_BILLING_CYCLE
). - We do not stack credits when the merchant re-subscribes or adjusts credits mid-cycle, since we initially assumed that the previous payment/subscription would be canceled and replaced by Shopify.
However, our Shopify app reviewer raised concerns because they expected credits to stack when re-subscribing to the same plan or adjusting credits mid-cycle, which has led to confusion.
Therefore, I’d appreciate your insights on the best practices and expectations:
- When merchants adjust credits upward/downward mid-cycle, how does Shopify handle payments? Does Shopify automatically prorate and charge the difference?
- When merchants select the identical plan and credits again mid-cycle, does Shopify treat this as a no-op, or does it cancel and recreate the subscription? Should credits stack here?
- What’s considered the clearest, simplest approach from the merchant’s perspective to handle these scenarios?
Since we’re at MVP stage, I’d like to avoid complex manual proration logic or extensive changes to our credit-tracking system, and instead align closely with Shopify’s built-in billing behavior and guidelines.
Thanks in advance for sharing your experiences and recommendations!