SUBSCRIPTION_CONTRACT_PAUSED in Shopify — State Mismatch Fix
Root cause
SUBSCRIPTION_CONTRACT_PAUSED occurs when a Shopify SubscriptionContract has its status set to PAUSED — either by merchant action, customer portal request, or a subscription app bug — while the corresponding Recharge subscription remains ACTIVE. When Shopify's contract is PAUSED, no billing attempts are generated from Shopify's side, but Recharge may still be configured to attempt charges. The mismatch means charges either fail silently or Recharge shows a healthy subscription while no revenue is being collected.
Symptoms
- • Shopify subscription contract status shows PAUSED unexpectedly
- • Recharge Admin shows subscription as ACTIVE but no charges are being collected
- • Billing attempts are not created for subscriptions that should be active
- • Customer is receiving orders but subscription shows PAUSED in Shopify Admin
- • Revenue stops for affected subscriptions without merchant-facing notification
How to fix it
Query Shopify Admin API for unexpectedly PAUSED contracts
In Shopify Admin GraphQL, query subscriptionContracts filtered by status: PAUSED. Review the list for subscriptions that should be actively billing. Check the updatedAt timestamp and any associated notes to determine whether the pause was intentional.
Open in admin →Cross-reference PAUSED Shopify contracts with Recharge
For each PAUSED Shopify contract, check the corresponding Recharge subscription status. If Recharge shows ACTIVE but Shopify shows PAUSED, you have a state mismatch. In Recharge Admin, find the customer and subscription to confirm the discrepancy.
Open in admin →Determine whether the pause was intentional
Check your subscription app audit logs or customer portal records to determine if a customer requested a pause or if a merchant intentionally paused the contract. If the pause was customer-requested or merchant-intentional, update Recharge to match the PAUSED state. If the pause was unintentional, proceed to step 4.
Reactivate via subscriptionContractUpdate mutation
For unintentional pauses, call the Shopify Admin GraphQL subscriptionContractUpdate mutation with status: ACTIVE to resume billing. Also verify Recharge subscription state is ACTIVE and aligned. After reactivation, manually trigger a subscriptionBillingAttemptCreate for any missed billing cycles.
Frequently asked questions
What is the difference between a PAUSED and a CANCELLED subscription contract in Shopify?
PAUSED means billing is temporarily suspended but the subscription agreement is intact — it can be reactivated via subscriptionContractUpdate with status: ACTIVE. CANCELLED means the billing agreement has permanently ended and cannot be reactivated. A new subscription contract must be created if the customer wants to resume.
Why would a Shopify subscription contract become PAUSED without merchant action?
Possible causes include a subscription app bug that incorrectly calls subscriptionContractUpdate with PAUSED status, a customer pause request processed by the subscription app's customer portal, or a platform-level billing issue that auto-pauses contracts. Check your subscription app's webhook and API activity logs for unexpected subscriptionContractUpdate calls.
How do I reactivate a PAUSED Shopify subscription contract?
Call the Shopify Admin GraphQL subscriptionContractUpdate mutation with the contract ID and status: ACTIVE. After reactivation, create a new billing attempt using subscriptionBillingAttemptCreate to collect any missed cycles. Also update the Recharge subscription to ACTIVE if it drifted during the PAUSED period.
Can a subscription be PAUSED in Shopify but ACTIVE in Recharge at the same time?
Yes, this is one of the most common cross-stack state mismatches. Shopify's contract is PAUSED so no billing attempts are generated from Shopify's side. Recharge still shows ACTIVE because it did not receive a state update. Revenue collection stops while Recharge's dashboard misleadingly shows a healthy subscription.
Detect this error automatically
Free cross-stack scan finds all billing errors in 60 seconds.
Run Free Scan →