About the billing API access scope

Topic summary

Developers are encountering issues accessing Shopify’s Billing API mutations, specifically appSubscriptionCreate, appSubscriptionCancel, and appPurchaseOneTimeCreate.

Core Problem:

  • Users receive “Access denied” errors when attempting to use billing mutations through GraphQL Explorer
  • The error message points to access scope issues but doesn’t clarify the required permissions

Root Cause Identified:
The Billing API is restricted to public apps only. Custom or private apps cannot use these billing endpoints, regardless of access scopes requested.

Key Error Message:
“Apps without a public distribution cannot use the Billing API”

Current Status:
The discussion remains open with no official solution for custom app scenarios. Developers seeking to implement billing functionality must ensure their app has public distribution status in the Shopify ecosystem.

Related community threads confirm this limitation is a known restriction rather than a configuration issue.

Summarized with AI on November 2. AI used: claude-sonnet-4-5-20250929.

I needs to use all three APIs.

What API access does my app need, and what access scope should I request from the store?

Thank you for your help.

https://shopify.dev/docs/api/admin-graphql/2024-07/mutations/appSubscriptionCreate
https://shopify.dev/docs/api/admin-graphql/2024-07/mutations/appSubscriptionCancel
https://shopify.dev/docs/api/admin-graphql/2023-10/mutations/appPurchaseOneTimeCreate

I am curious about this answer now. When I run the mutations through GraphQL Explorer. I get

{
  "errors": [
    {
      "message": "Access denied for appPurchaseOneTimeCreate field.",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "appPurchaseOneTimeCreate"
      ],
      "extensions": {
        "code": "ACCESS_DENIED",
        "documentation": "https://shopify.dev/api/usage/access-scopes"
      }
    }
  ],
  "data": {
    "appPurchaseOneTimeCreate": null
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 10,
      "actualQueryCost": 10,
      "throttleStatus": {
        "maximumAvailable": 2000,
        "currentlyAvailable": 1990,
        "restoreRate": 100
      }
    }
  }
}
1 Like

Any update on this matter? I have the same problem.

After searching a little more, it might be possible that you’re getting this error because your app is not a public app.

When I was trying out my mutation on my app, I was getting no data:

Array ( [appPurchaseOneTimeCreate] => Array ( [appPurchaseOneTime] => [confirmationUrl] => ) )

so I added

userErrors {

field

message

}

to my mutation to have more information. Then I could see this message displaying: Apps without a public distribution cannot use the Billing API.

See these threads:

Hope it helps.