The [`Asset` REST Admin API resource](/docs/api/admin-rest/latest/resources/asset) reads, adds, changes, or removes theme files. Starting with Admin API 2023-04, Asset resource `PUT` or `DEL` requests are restricted using the `write_themes` [access scope](/docs/api/usage/access-scopes). If an app that's distributed in the Shopify App Store needs to use Asset resource `PUT` or `DEL` requests, then it needs to be granted an exemption by Shopify to use the `write_themes` access scope. As an alternative, you can use [theme app extensions](/docs/apps/build/online-store/theme-app-extensions), or instruct merchants how to add code to their theme using the following tools: - A [custom Liquid](https://help.shopify.com/manual/online-store/themes/theme-structure/extend#add-custom-html-or-liquid) section or block - The [custom CSS](https://help.shopify.com/manual/online-store/themes/theme-structure/extend/add-css) setting - Deep-linking to a specific file and location in the [code editor](/docs/storefronts/themes/tools/code-editor) Apps must obtain an exemption or migrate before March 31, 2024. Review the sections below to learn whether your app is eligible for an exemption, and how to apply for an exemption, and some alternatives to the Asset resource that you might consider for your app. You can still use the Asset resource to read theme files without an exemption. ## Uses cases eligible for exemption If your app falls into one of the following categories, you might be eligible for an exemption. - **Page builders**: Your app adds or replaces all layouts or templates files with the purpose of providing an alternative theme customization experience. This exemption won’t be granted to apps that modify only a few pages, for example, by adding forms, wishlist pages, or pre-order pages to a theme. This functionality can be achieved using [theme app embeds](/docs/apps/build/online-store/theme-app-extensions/configuration#app-embed-blocks) or [app blocks for themes](/docs/apps/build/online-store/theme-app-extensions/configuration#app-blocks-for-themes). - **Backups**: Your app backs up all theme files and restores files from a backup as the primary app functionality. - **Adding Liquid to repeating blocks**: Your app adds elements such as ratings, buttons, or badges to recurring resource lists like products. - **Other platform functionality**: Your app primarily provides search engine optimization, content locking, or developer tooling and testing functionality. > Note: > As alternative APIs and resources that address these use cases become available, app developers will be required to transition to suggested alternatives. If you think that your app is eligible for an exemption, then you can [submit an exception request](https://docs.google.com/forms/d/e/1FAIpQLSfZTB1vxFC5d1-GPdqYunWRGUoDcOheHQzfK2RoEFEHrknt5g/viewform). Exemptions are valid for both accessing the protected scope and qualifying for [Built for Shopify](/docs/apps/launch/built-for-shopify) status. After you submit your request, the Shopify app review team will review your submission and be in touch with you within two weeks. If your app’s use case doesn’t fall within the exemption categories, then you need to use the recommended integration method, [Theme App Extensions](/docs/apps/build/online-store/theme-app-extensions) or use the [ScriptTag](/docs/apps/build/online-store/script-tag-legacy) resource. ## Alternatives for common Asset resource use cases The following table suggests alternatives to explore for common Asset resource use cases.
Use case | Recommended alternative |
---|---|
Loading custom JavaScript that provides additional functionality for your app |
Online store 2.0 themes: User theme app embeds or blocks Vintage themes: Use theme app embeds |
Loading custom CSS that provides styling for your app functionality, such as custom colors or fonts | |
Loading custom images that provide additional visual elements for a store or your app functionality, such as custom logos or product images | |
Adding custom metadata to a store, such as meta descriptions, keywords, or social media tags | Theme app embeds |
Loading custom font files that provide additional typography options for a store | |
Loading custom tracking scripts, such as Google Analytics, to track store performance and customer behavior | |
Implementing custom pop-ups, such as sign-up forms or promotional offers | |
Loading a custom favicon for a store | |
Implementing custom live chat | |
Adding custom zoom functionality, such as the ability to zoom in on product images | |
Customizing the search results page, such as adding custom search results |
Online store 2.0 themes: Use theme app blocks Vintage themes:
|
Adding custom product reviews, such as customer ratings or customer feedback | |
Customizing product details pages by adding additional product information | |
Customizing the cart page by adding custom cart information | |
Customizing the order confirmation page by adding custom order information or custom order tracking | |
Customizing the login page by adding custom login forms or custom login options | |
Adding custom store policies, such as return policy or privacy policy | |
Customizing the contact page, such as adding custom contact forms or custom contact information | |
Customizing repeating resources, such as product cards or blog posts |
Use standard metafield definitions for product ratings and product rating counts on product cards. Use theme app embeds or provide instructions to add code snippets for vintage themes or non-sectioned pages. |
Creating custom pages, such as a custom collection, about us page or contact page | Provide instructions to create the alternate template using the theme editor |
Auto installing an app block or app embed on behalf of the merchant |
Provide a deep link for merchants to preview the app embed in the theme editor. Merchants can adjust and save. Provide instructions to add theme app blocks using the theme editor |
Commenting out page details, such as the title of a block, to hide elements or inject other values | Theme app embeds to add content or load scripts to achieve similar functionality |
Editing a CSS class or adding attributes to an existing theme element |
Use theme app embeds and load scripts to target specific elements of the page Use theme app embeds and leverage the Custom CSS setting of existing sections Use theme app embeds or theme app blocks to offer an alternative element instead of modifying the theme’s block |