---
title: Configure optional scopes for Shopify apps - Shopify developer changelog
description: >-
  Shopify’s developer changelog documents all changes to Shopify’s platform.
  Find the latest news and learn about new platform opportunities.
source_url:
  html: >-
    https://shopify.dev/changelog/posts/configure-optional-scopes-for-shopify-apps
  md: >-
    https://shopify.dev/changelog/posts/configure-optional-scopes-for-shopify-apps.md
metadata:
  effectiveApiVersion: 2024-10
  affectedApi:
    - displayName: Admin GraphQL API
      handle: admin-graphql
  primaryTag:
    displayName: API
    handle: api
  secondaryTag:
    displayName: New
    handle: new
  indicatesActionRequired: false
  createdAt: '2024-11-05T10:59:56-05:00'
  postedAt: '2024-12-04T14:00:00-05:00'
  updatedAt: '2024-12-04T14:27:13-05:00'
  effectiveAt: '2024-12-04T14:00:00-05:00'
---

December 4, 2024

# Configure optional scopes for Shopify apps

DateDecember 4, 2024

Version[2024-10](https://shopify.dev/changelog?api_version=2024-10)

FlagsNew

SurfacesAPI

Affected APIs[Admin GraphQL API](https://shopify.dev/changelog?api_type=admin-graphql)

Apps on Admin API version `2024-10` can use the new `optional_scopes` app configuration to:

* Separate required scopes from optional
* Request unique sets of access scopes on a store-by-store basis
* Revoke optional scopes granted to the app from a store
* Request and revoke scopes in-context, at app runtime

All while taking advantage of [Shopify managed install](https://shopify.dev/docs/apps/build/authentication-authorization/app-installation).

### Declaring optional scopes

In your [app configuration](https://shopify.dev/docs/apps/build/cli-for-apps/app-configuration), specify optional scopes that your app may request, in addition to your app’s required `scopes`:

```toml
[access_scopes]
scopes = "read_products"
optional_scopes = [ "write_products", "read_discounts", "read_themes" ]
```

### Requesting, revoking, and querying optional scopes at runtime

With optional scopes, apps can prompt merchants to grant their app access either from a server-side API, or from a client-side App Bridge API for a more integrated experience. See our documentation on [how to request access scopes dynamically](https://shopify.dev/docs/apps/build/authentication-authorization/app-installation/manage-access-scopes#request-new-access-scopes-dynamically) for details.

Granted optional scopes can be dynamically revoked from stores by apps. Our APIs supply a `revoke` method for this, and we also provide a GraphQL [`appRevokeAccessScopes` mutation](https://shopify.dev/docs/api/admin-graphql/2024-10/mutations/appRevokeAccessScopes).

With optional scopes, apps may need to know which scopes are granted on the current store. We supply a `query` method that lists the granted scopes on the store. Apps can also manually query the [`accessScopes` field on the `AppInstallation` object](https://shopify.dev/docs/api/admin-graphql/2024-10/objects/AppInstallation#field-accessscopes).

### Learn more

To learn more about optional scopes, see our documentation on [how to manage access scopes](https://shopify.dev/docs/apps/build/authentication-authorization/app-installation/manage-access-scopes). See also our client-side [App Bridge Scopes API](https://shopify.dev/docs/api/app-bridge-library/apis/scopes), and our server-side [Remix Scopes API](https://shopify.dev/docs/api/shopify-app-remix/v3/apis/scopes).
