Our apps are currently still using the legacy Billing API. We are planning to migrate, but for now we’re waiting and closely following the related discussions and challenges around the migration process.
One of the stores using our app recently contacted us requesting a refund for an active annual subscription. Based on our previous experience, when we issue a refund and the merchant later reinstalls the app, Shopify may process another refund automatically. To avoid this, we decided that the merchant should reinstall the app and select a monthly plan instead. To our surprise, the merchant did not receive a refund for the annual subscription.
We are aware of the new API that provides the current subscription status:
To investigate, we queried the subscription data for this shop using our app:
{
"appId": "gid://shopify/App/43187142657",
"shopId": "gid://shopify/Shop/78932181304"
}
And received the following response:
{
"data": {
"activeSubscription": {
"shop": {
"id": "gid://shopify/Shop/78932181304"
},
"cancelAtEndOfCycle": true,
"trialEndsAt": "2025-04-10T21:06:26Z",
"currentBillingCycle": {
"startTime": "2026-04-10T21:06:26Z",
"endTime": "2027-04-10T21:06:26Z"
},
"items": [
{
"handle": null,
"description": "",
"price": {
"__typename": "FlatRatePrice",
"active": false,
"currency": "USD",
"amount": "69.99"
},
"discount": null,
"usage": null
}
],
"pendingUpdate": null,
"legacySubscriptionId": "gid://shopify/AppSubscription/34630533432",
"billingPeriod": "ANNUAL"
}
}
}
However, this does not appear to be correct, because the merchant has already activated a monthly subscription:
We’re trying to understand why there is a discrepancy between the API response and the actual subscription selected by the merchant. In our appSubscriptionCreate mutation, we use the default value for replacementBehavior, which is STANDARD. Could this be the cause of the issue?
Separately, we also believe that when an app is uninstalled and the subscription is cancelled, the subscription should be terminated immediately rather than remaining active until the end of the billing cycle.
