## TL;DR

A Shopify app subscription charge only becomes active when the shop owner accepts it: if they never opened or accepted the charge, the subscription stays unapproved and billing never starts. Send the shop owner the confirmation URL again, confirm they accept the charge in their Shopify admin, and verify the subscription moves to active. Your app should handle the pending state gracefully until then.

```text
shopify app subscription not approved: shop owner never accepted the charge
```

## Use this when

- Shopify app subscription shows not approved
- Billing never started after a merchant installed your app
- You need to re-send the charge acceptance link

## Not for this skill when

- The subscription is active but a recurring charge failed
- The merchant cancelled an approved subscription
- You are debugging usage-based billing records

## Steps

1. Check the subscription status via the Shopify API: confirm it is pending, not active.
   Expected: You verify the charge was never accepted.
2. Retrieve the confirmation URL for the pending app subscription charge.
   Expected: You have the acceptance link.
3. Send the link to the shop owner and ask them to accept the charge in their Shopify admin.
   Expected: The owner can complete acceptance.
4. Poll or subscribe to webhooks for the subscription status change.
   Expected: You detect the moment it becomes active.
5. Gate premium features on the active status, with a clear pending message meanwhile.
   Expected: Merchants see why features are locked.

## Tool compatibility

Shopify Billing API app subscriptions; confirmation URL flow and subscription status webhooks.

## Variant phrasings

### shopify app charge not accepted merchant

The merchant-action angle.

### shopify subscription pending approval

The status-view phrasing.

### resend shopify app subscription confirmation url

The fix action as a search phrase.

## Why it happens

Shopify requires explicit merchant consent for recurring app charges: the app creates the charge, Shopify returns a confirmation URL, and only the shop owner's acceptance activates billing. This protects merchants from silent recurring billing. If the owner never visits the URL, perhaps they missed the email or the install flow skipped it, the subscription sits in pending forever and no charges occur. The app cannot self-approve; the human step is mandatory.

## Edge cases / pitfalls

- Confirmation URLs expire; generate a fresh one if the old link is dead.
- Test stores accept charges differently than production; verify the flow in a real merchant context.
- If the merchant already pays for a conflicting plan, the new charge may need the old one cancelled first.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_YIQv_P8BkagMBoY21YJT0Q
