Shopify API access scopes
Access scopes control which store data your app can read and write. This guide lists available access scopes, grouped by scope type.
The REST Admin API uses authenticated access scopes too, listed in access scopes for the REST Admin API.
Anchor to How it worksHow it works
Shopify grants access scopes only to public or custom apps. Legacy app types, such as private or unpublished apps, don't get new access scopes.
Request only the data your app needs to function. Any permission to write a resource includes permission to read it, so request the write scope only when your app needs both. Shopify restricts access to scopes for apps that don't have a legitimate use for the associated data.
| Scope type | Description | Example use cases |
|---|---|---|
| Authenticated | Controls access to resources in the GraphQL Admin API, Web Pixel API, and Payments Apps API. Use authenticated access scopes to interact with a store on behalf of a user. |
|
| Unauthenticated | Controls an app's access to Storefront API objects. Use unauthenticated access scopes to interact with a store on behalf of a customer. |
|
| Customer | Controls an app's access to Customer Account API objects. Use customer access scopes to interact with data that belongs to a customer. |
|
You declare all three types in the same scopes field, in the [access_scopes] section of your app's configuration file. To see which scopes an installation has actually been granted, refer to checking granted access scopes.
For more information on how to configure your access scopes, refer to app configuration and manage access scopes.
For more information on how to configure your access scopes, refer to app configuration and manage access scopes.
Anchor to Authenticated access scopesAuthenticated access scopes
Authenticated access scopes provide apps with read and write access to store data. Use authenticated access scopes to interact with a store on behalf of a user.
Some scopes and types in this table carry a label:
- permissions required Shopify has to approve your app for the scope before you can declare it. Refer to requesting specific permissions for how to request one.
- b2b only The type is only available to stores with B2B enabled.
- shopify plus The type is only available to finance embedded apps, or to apps installed on a Shopify Plus or Advanced store. Contact Shopify Support to enable it for your app.
For a new app, declare the scopes it needs and deploy your app. Merchants approve the scopes when they install it. To assign scopes to an existing admin-created custom app, refer to change API scopes.
For a new app, declare the scopes it needs and deploy your app. Merchants approve the scopes when they install it. To assign scopes to an existing admin-created custom app, refer to change API scopes.
| Scope | Access |
|---|---|
permissions required | All relevant orders rather than the default window of orders created within the last 60 days. This access scope is used in conjunction with existing order scopes, for example |
| Available as of API version |
write_app_proxy | App proxy configuration |
permissions required | The |
| As of API version 2024-10, |
| CartTransform |
| CheckoutAndAccountsConfiguration |
| CheckoutBranding |
permissions required | The The object and the mutation are available as of API version 2026-04. The mutation also requires the |
| The company objects, including Accepted as an alternative to |
| |
| |
permissions required | |
|
|
| DeliveryCustomization |
permissions required |
|
|
To build discount functions, refer to discounts. |
| DraftOrder |
| The File interface and the objects that implement it, including GenericFile, MediaImage, Video, and Model3d, the files query, and the file mutations, such as fileCreate and fileUpdate. |
| fulfillmentConstraintRuleCreate, fulfillmentConstraintRuleUpdate, and fulfillmentConstraintRuleDelete mutations |
| FulfillmentService |
| GiftCard |
| |
| |
| Received items on an InventoryShipment. write_inventory_shipments_received_items authorizes the inventoryShipmentReceive mutation. Received quantities are returned on InventoryShipment and InventoryShipmentLineItem, which read_inventory_shipments grants access to. |
| |
| ShopPolicy object and the shopPolicyUpdate mutation |
| ShopLocale |
| Location |
| |
permissions required | The Accepted as an alternative to |
permissions required | The Return, ReturnLineItem, ReverseDelivery, and ReverseFulfillmentOrder objects, and the return mutations, such as returnCreate and returnRefund. Accepted as an alternative to read_returns and write_returns. |
| Market |
permissions required | MerchantApprovalSignals |
| MetaobjectDefinition |
| Metaobject |
permissions required |
Contact Shopify Support to enable these access scopes for your app. |
| UrlRedirect |
| Article, blog, comment, and page mutations, such as pageCreate and articleUpdate. Accepted as an alternative to write_content. |
| CalculatedOrder |
|
These scopes cover orders created within the last 60 days. For older orders, add |
permissions required | GraphQL Admin API Customer Account API |
| PaymentCustomization |
permissions required | Payments Apps API PaymentsAppConfiguration |
permissions required | PaymentMandate |
permissions required | Payments Apps API PaymentSession, CaptureSession, RefundSession, VerificationSession, VoidSession |
| |
|
Creating or updating a pixel needs |
| PriceRule |
| |
| ProductFeed object, the publishedOnCurrentChannel field on Product, ProductVariant, and Collection, and full sync mutations such as productFullSync. Accepted as an alternative to read_products on some fields. |
|
|
| Publication fields on Product, Collection, and ProductVariant, such as publications and resourcePublications, and publishing mutations such as productPublish and publicationCreate. Also accepted as read_channels and write_channels. |
|
|
| ProductResourceFeedback and DiscountResourceFeedback objects. DiscountResourceFeedback is available only in the unstable API version. The app must be configured as a sales channel or to use the Storefront API. |
| The Return object, the reverse logistics objects, such as ReverseDelivery and ReverseFulfillmentOrder, and the return mutations, such as returnCreate and returnRefund. |
| ScriptTag |
| DeliveryCarrierService |
permissions required |
|
| ShopifyPaymentsAccount and ShopifyPaymentsPayoutSchedule objects. Accepted as an alternative to read_shopify_payments. |
| ShopifyPaymentsBankAccount |
permissions required |
Request access from Shopify. |
permissions required | Dispute file upload endpoints of the REST Admin API. Request access from Shopify. |
read_shopify_payments_disputes | ShopifyPaymentsDispute |
read_shopify_payments_payouts | |
| |
read_store_credit_accounts | StoreCreditAccount |
permissions required |
Reading |
permissions required | taxAppConfigure and taxSummaryCreate mutations. Limited to tax calculation apps. |
| OnlineStoreTheme |
| |
permissions required |
This type is available to finance embedded apps, and to apps installed on a store on the Shopify Plus or Advanced plan. Contact Shopify Support to enable this access scope for your app. |
| Validation |
Anchor to Unauthenticated access scopesUnauthenticated access scopes
Unauthenticated access scopes provide apps with read and write access to the Storefront API. Use unauthenticated access scopes to interact with a store on behalf of a customer.
For the Headless channel, permissions are managed in your Shopify admin. Refer to request storefront permissions.
For the Headless channel, permissions are managed in your Shopify admin. Refer to request storefront permissions.
| Scope | Access |
|---|---|
| Cart |
unauthenticated_read_content | Storefront content, such as Article, Blog, and Comment |
unauthenticated_read_customer_tags | tags field on Customer |
| Customer |
unauthenticated_read_metaobjects | |
unauthenticated_read_product_inventory | quantityAvailable field on ProductVariant and totalAvailable field on Product |
unauthenticated_read_product_listings | |
unauthenticated_read_product_pickup_locations | |
unauthenticated_read_product_tags | tags field on Product |
unauthenticated_read_selling_plans | Selling plan content on Product |
unauthenticated_read_shop_pay_installments_pricing | shopPayInstallmentsPricing field on Shop and ProductVariant |
Anchor to Customer access scopesCustomer access scopes
Customer access scopes provide apps with read and write access to the Customer Account API. Use customer access scopes to interact with data that belongs to a customer.
Some fields in the Customer Account API reference list a required access scope that records an authentication state rather than a scope you request, such as customer_read_pre_authenticated. Those aren't listed here — refer to Order status page authentication states.
To request these scopes for the Headless or Hydrogen channel, refer to managing permissions.
To request these scopes for the Headless or Hydrogen channel, refer to managing permissions.
| Scope | Access |
|---|---|
| Company |
| Customer |
customer_read_draft_orders | DraftOrder |
| CompanyLocation |
customer_read_markets | Market |
customer_read_metaobjects | Metaobject |
| Order |
| SubscriptionContract for records that belong to your app |
customer_read_store_credit_account_transactions | StoreCreditAccountTransaction interface and the types that implement it, such as StoreCreditAccountCreditTransaction and StoreCreditAccountDebitTransaction |
customer_read_store_credit_accounts | StoreCreditAccount |
customer_write_subscription_contracts | SubscriptionContract for all records. Only available for Hydrogen and Headless storefronts |
Anchor to Requesting specific permissionsRequesting specific permissions
Some access scopes need Shopify's approval before you can declare them. Most are requested in the Partner Dashboard, but some require contacting Shopify Support.
Anchor to Shopify approval scopesShopify approval scopes
Shopify grants some access scopes to individual apps rather than to every app that declares them. You can't add one to your app configuration until Shopify approves your app for it. If you declare one before approval, then creating an app version fails with an app_access validation error on scopes.
Every scope labeled permissions required in the tables above works this way. Some have their own request path:
read_all_orders: Orders permissionsread_customer_payment_methods,read_own_subscription_contracts, andwrite_own_subscription_contracts: Subscription APIs permissionsread_shopify_payments_dispute_evidences,write_shopify_payments_dispute_evidences,read_shopify_payments_dispute_file_uploads, andwrite_shopify_payments_dispute_file_uploads: Shopify Payments dispute evidence permissionswrite_payment_gatewaysandwrite_payment_sessions: granted automatically through your payments extension. Omit them from yourshopify.app.tomlfile on initial deployment, then add them in a later deployment to request merchant permission. Refer to payments app configuration.
For every other labeled scope, contact Shopify Support and describe your app and why it needs the scope.
Protected customer data is reviewed separately, and that review isn't scope approval. You can declare the scopes that access protected customer data before your app is approved to use it. Refer to protected customer data permissions for what the API returns until then.
Anchor to Orders permissionsOrders permissions
By default, you have access to the last 60 days' worth of orders for a store. To access all the orders, you need to request access to the read_all_orders scope from the user:
- From the Partner Dashboard, go to Apps.
- Click the name of your app.
- Click API access.
- In the Access requests section, on the Read all orders scope card, click Request access.
- On the Orders page that opens, describe your app and why you're applying for access.
- Click Request access.
If Shopify approves your request, then you can add the read_all_orders scope to your app along with read_orders or write_orders.
Anchor to Subscription APIs permissionsSubscription APIs permissions
Subscription apps let users sell subscription products that generate multiple orders on a specific billing frequency.
With subscription products, the app user isn't required to get customer approval for each subsequent order after the initial subscription purchase. As a result, your app needs to request the required protected access scopes to use Subscription APIs from the app user:
- From the Partner Dashboard, go to Apps.
- Click the name of your app.
- Click API access.
- In the Access requests section, on the Access Subscriptions APIs card, click Request access.
- On the Subscriptions page that opens, describe why you're applying for access.
- Click Request access.
After Shopify approves your request, declare the scopes your app requires. Subscription apps require read_customer_payment_methods, read_own_subscription_contracts, and write_own_subscription_contracts. For the full list of scopes by use case, refer to purchase options.
If your app uses the Customer Account API, then it also requires customer_read_own_subscription_contracts or customer_write_own_subscription_contracts.
Anchor to Shopify Payments dispute evidence permissionsShopify Payments dispute evidence permissions
The read_shopify_payments_dispute_evidences, write_shopify_payments_dispute_evidences, read_shopify_payments_dispute_file_uploads, and write_shopify_payments_dispute_file_uploads scopes are restricted. Shopify grants these scopes to individual apps. To be eligible:
- Your app must use public distribution
- Dispute or chargeback management must be a core part of what your app does. Apps outside the dispute space aren't granted these scopes
You can't add these scopes to your app configuration until Shopify approves your app for them. If you declare one before approval, then creating an app version fails with an app_access validation error on scopes.
To request access, contact Shopify Support and describe your app and why it needs to read or submit dispute evidence.
Anchor to Protected customer data permissionsProtected customer data permissions
By default, apps don't have access to any protected customer data. To access protected customer data, you must meet our protected customer data requirements. You can add the relevant scopes to your app, but the API won't return data from non-development stores until your app is configured and approved for protected customer data use.
Anchor to Checking granted access scopesChecking granted access scopes
Declaring a scope isn't the same as having it. A scope takes effect only after it's approved on the store, and optional scopes are granted separately, after installation, so an app's granted scopes can differ from the ones in its configuration.
To see what an installation actually has, query currentAppInstallation in the GraphQL Admin API. Its accessScopes field returns each granted scope's handle, such as read_orders, with a description of what that scope allows.
For a request and response example, and for the App Bridge and React Router helpers that wrap this query, refer to query currently granted scopes.
Anchor to Next stepsNext steps
- Learn how API authentication works, and which token and header each Shopify API uses.
- Learn how to declare, modify, and revoke your app's scopes in manage access scopes.