10/2/2026, 12:00:29 AM
Shopify now exposes the appDowngradeAccessScopes mutation, which allows an app to replace granted optional write access scopes with their corresponding read scopes. The mutation accepts a non‑null list of write scope handles (e.g., "write_products") and runs on the calling app’s own installation. Only optional write scopes can be downgraded; required scopes are ignored and any write scope not currently granted is skipped. Existing read permissions for those scopes are retained, unlike appRevokeAccessScopes, which would remove matching reads if the write scope was the sole grant. The response payload lists the downgraded AccessScope objects and any user errors. Errors surface via the AppDowngradeAccessScopesUserError type, with codes such as APPLICATION_CANNOT_BE_FOUND, APP_NOT_INSTALLED, UNKNOWN_SCOPES, CANNOT_DOWNGRADE_NON_WRITE_SCOPES, CANNOT_DOWNGRADE_REQUIRED_SCOPES, and CANNOT_DOWNGRADE_UNDECLARED_SCOPES. This change gives developers a safer way to reduce app permissions while preserving read access.
Downgrades granted optional write access scopes to their matching read access scopes. For example,
downgrading write_products removes write_products and keeps read_products, so the app can keep reading
products without asking the merchant to grant read_products again.
Revoking a write scope withappRevokeAccessScopes
also removes its read access when the read scope was only granted through the write scope. Use this
mutation instead when the app still needs read access.
The mutation always acts on the calling app's own installation on the shop. Only write scopes that the app
declares as optional can be downgraded. Required scopes can't be downgraded. Write scopes that aren't
currently granted are ignored.
Learn more about managing app permissions.
Return type for appDowngradeAccessScopes mutation.
An error that happens while downgrading granted write access scopes to read access scopes.
Possible error codes that can be returned by AppDowngradeAccessScopesUserError.