The REST Admin API is a legacy API as of October 1, 2024. Starting April 1, 2025, all new public apps must be built exclusively with the GraphQL Admin API. For details and migration steps, visit our migration guide.
Asset
themes access scope.Starting with Admin API 2023-04, if an app distributed through the Shopify App Store uses the Asset resource to create, edit or delete a theme's asset, you need to request the required protected access scope. In most cases, you shouldn't use the Asset resource. To learn more about when you can use the Asset resource, and how to migrate, refer to the Asset resource.
Theme assets are the individual files that make up a shop's theme.
 
    A theme's assets include its templates, images, stylesheets, and extra snippets of code. They are arranged among the theme's directories, such as layout, templates, and assets. You can use the Asset resource to add, change, or remove asset files from a shop's theme. For a complete list of theme directories, refer to Theme architecture.
To learn how to create your own theme, see Building themes.
Endpoints
- get/admin/api/latest/themes/{theme_id}/assets. json Retrieves a list of assets for a theme
- get/admin/api/latest/themes/{theme_id}/assets. json?asset[key]=templates/index. liquid Retrieves a single asset for a theme
- put/admin/api/latest/themes/{theme_id}/assets. json Creates or updates an asset for a theme
- del/admin/api/latest/themes/{theme_id}/assets. json?asset[key]=assets/bg-body. gif Deletes an asset from a theme
The Asset resource
Properties
A base64-encoded image.
The MD5 representation of the content, consisting of a string of 32 hexadecimal digits. May be null if an asset has not been updated recently.
The MIME representation of the content, consisting of the type and subtype of the asset.
The path to the asset within a theme. It consists of the file's directory and filename. For example, the asset assets/bg-body-green.gif is in the assets directory, so its key is assets/bg-body-green.gif.
The public-facing URL of the asset.
The asset size in bytes.
The ID for the theme that an asset belongs to.
The text content of the asset, such as the HTML and Liquid markup of a template file.
The Asset resource
Anchor to GET request, Retrieves a list of assets for a themegetRetrieves a list of assets for a theme
Retrieves a list of assets for a theme.
Note: Retrieving a list of assets returns only metadata about each asset. To retrieve an asset's content, you need to retrieve the asset individually.
Specify which fields to show using a comma-separated list of field names.
Retrieve a list of all assets for a theme
Retrieve a list of all assets for a theme
/admin/api/2025-10/themes/828155753/assets.
Response
examples
- Retrieve a list of all assets for a theme- curl -X GET "https://your-development-store.myshopify.com/admin/api/2025-10/themes/828155753/assets.json" \ -H "X-Shopify-Access-Token: {access_token}"- await admin.rest.resources.Asset.all({ session: session, theme_id: 828155753, });- # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session ShopifyAPI::Asset.all( session: test_session, theme_id: 828155753, )- // Session is built by the OAuth process await shopify.rest.Asset.all({ session: session, theme_id: 828155753, });- response- HTTP/1.1 200 OK{"assets":[{"key":"layout/theme.liquid","public_url":null,"created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"application/x-liquid","size":3252,"checksum":null,"theme_id":828155753},{"key":"assets/sidebar-devider.gif","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/sidebar-devider.gif?v=1278963110","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"image/gif","size":1016,"checksum":null,"theme_id":828155753},{"key":"assets/bg-body-pink.gif","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/bg-body-pink.gif?v=1278963110","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"image/gif","size":1562,"checksum":null,"theme_id":828155753},{"key":"assets/bg-content.gif","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/bg-content.gif?v=1278963110","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"image/gif","size":134,"checksum":null,"theme_id":828155753},{"key":"sections/header_section.liquid","public_url":null,"created_at":"2017-04-28T10:30:00-04:00","updated_at":"2017-04-28T10:30:00-04:00","content_type":"application/x-liquid","size":998,"checksum":null,"theme_id":828155753},{"key":"assets/shop.css.liquid","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/shop.css.liquid?v=1278963110","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"application/x-liquid","size":14675,"checksum":null,"theme_id":828155753},{"key":"assets/shop.js","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/shop.js?v=1278963110","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"application/javascript","size":348,"checksum":null,"theme_id":828155753},{"key":"assets/bg-main.gif","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/bg-main.gif?v=1278963110","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"image/gif","size":297,"checksum":null,"theme_id":828155753},{"key":"sections/content_section.liquid","public_url":null,"created_at":"2016-02-11T14:31:50-05:00","updated_at":"2016-02-11T14:31:50-05:00","content_type":"application/x-liquid","size":997,"checksum":null,"theme_id":828155753},{"key":"templates/page.liquid","public_url":null,"created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"application/x-liquid","size":147,"checksum":null,"theme_id":828155753},{"key":"assets/bg-body-green.gif","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/bg-body-green.gif?v=1278963110","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"image/gif","size":1542,"checksum":null,"theme_id":828155753},{"key":"assets/shop.css","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/shop.css?v=1278963110","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"text/css","size":14058,"checksum":null,"theme_id":828155753},{"key":"config/settings_schema.json","public_url":null,"created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"application/json","size":4570,"checksum":null,"theme_id":828155753},{"key":"sections/product_section.liquid","public_url":null,"created_at":"2016-02-14T16:31:41-05:00","updated_at":"2016-02-14T16:31:41-05:00","content_type":"application/x-liquid","size":2440,"checksum":null,"theme_id":828155753},{"key":"templates/blog.liquid","public_url":null,"created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"application/x-liquid","size":773,"checksum":null,"theme_id":828155753},{"key":"templates/article.liquid","public_url":null,"created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"application/x-liquid","size":2486,"checksum":null,"theme_id":828155753},{"key":"templates/product.liquid","public_url":null,"created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"application/x-liquid","size":2796,"checksum":null,"theme_id":828155753},{"key":"sections/footer_section.liquid","public_url":null,"created_at":"2017-04-28T10:30:00-04:00","updated_at":"2017-04-28T10:30:00-04:00","content_type":"application/x-liquid","size":999,"checksum":null,"theme_id":828155753},{"key":"assets/bg-footer.gif","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/bg-footer.gif?v=1278963110","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"image/gif","size":1434,"checksum":null,"theme_id":828155753},{"key":"assets/bg-sidebar.gif","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/bg-sidebar.gif?v=1278963110","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"image/gif","size":124,"checksum":null,"theme_id":828155753},{"key":"assets/bg-body-orange.gif","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/bg-body-orange.gif?v=1278963110","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"image/gif","size":1548,"checksum":null,"theme_id":828155753},{"key":"templates/collection.liquid","public_url":null,"created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"application/x-liquid","size":946,"checksum":null,"theme_id":828155753},{"key":"assets/sidebar-menu.jpg","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/sidebar-menu.jpg?v=1278963110","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"image/jpeg","size":1609,"checksum":null,"theme_id":828155753},{"key":"templates/cart.liquid","public_url":null,"created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"application/x-liquid","size":2047,"checksum":null,"theme_id":828155753},{"key":"config/settings_data.json","public_url":null,"created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"application/json","size":4570,"checksum":null,"theme_id":828155753},{"key":"templates/index.liquid","public_url":null,"created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"application/x-liquid","size":1068,"checksum":null,"theme_id":828155753},{"key":"assets/bg-body.gif","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/bg-body.gif?v=1278963110","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"image/gif","size":1571,"checksum":null,"theme_id":828155753}]}
Anchor to GET request, Retrieves a single asset for a themegetRetrieves a single asset for a theme
Retrieves a single asset for a theme by its key.
To retrieve a single asset, include asset[key]=#{asset_key} as a request parameter. For example, to retrieve the asset with a key of templates/index.liquid, the request might be /admin/themes/828155753/assets.json?asset[key]=templates/index.liquid.
For more information on the key property, refer to Asset properties.
Retrieves a single asset for a theme by specifying the asset's key.
Specify which fields to show using a comma-separated list of field names.
Retrieve a Liquid template
Retrieve a Liquid template
Retrieves a single asset for a theme by specifying the asset's key.
/admin/api/2025-10/themes/828155753/assets.
Response
examples
- Retrieve a Liquid template- curl -X GET "https://your-development-store.myshopify.com/admin/api/2025-10/themes/828155753/assets.json?asset%5Bkey%5D=templates%2Findex.liquid" \ -H "X-Shopify-Access-Token: {access_token}"- await admin.rest.resources.Asset.all({ session: session, theme_id: 828155753, asset: {"key": "templates/index.liquid"}, });- # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session ShopifyAPI::Asset.all( session: test_session, theme_id: 828155753, asset: {"key" => "templates/index.liquid"}, )- // Session is built by the OAuth process await shopify.rest.Asset.all({ session: session, theme_id: 828155753, asset: {"key": "templates/index.liquid"}, });- response- HTTP/1.1 200 OK{"asset":{"key":"templates/index.liquid","public_url":null,"value":"<!-- LIST 3 PER ROW -->\n<h2>Featured Products</h2>\n<table id=\"products\" cellspacing=\"0\" cellpadding=\"0\">\n {% tablerow product in collections.frontpage.products cols:3 %}\n <a href=\"{{product.url}}\">{{ product.featured_image | product_img_url: 'small' | img_tag }}</a>\n <h3><a href=\"{{product.url}}\">{{product.title}}</a></h3>\n <ul class=\"attributes\">\n <li><span class=\"money\">{{product.price_min | money}}</span></li>\n </ul>\n {% endtablerow %}\n</table>\n<!-- /LIST 3 PER ROW -->\n\n{{ content_for_index }}\n\n<div id=\"articles\">\n {% assign article = pages.frontpage %}\n <div class=\"article\">\n {% if article.content != \"\" %}\n <h3>{{ article.title }}</h3>\n <div class=\"article-body textile\">\n {{ article.content }}\n </div>\n {% else %}\n <div class=\"article-body textile\">\n In <em>Admin > Blogs & Pages</em>, create a page with the handle <strong><code>frontpage</code></strong> and it will show up here.\n <br />\n {{ \"Learn more about handles\" | link_to \"http://wiki.shopify.com/Handle\" }}\n </div>\n {% endif %}\n </div>\n</div>\n","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2010-07-12T15:31:50-04:00","content_type":"application/x-liquid","size":1068,"checksum":null,"theme_id":828155753}}
Anchor to PUT request, Creates or updates an asset for a themeputCreates or updates an asset for a theme
Creates or updates an asset for a theme.
In the PUT request, you can include the src or source_key property to create the asset from an existing file.
The path within the theme to an existing asset. Include in the body of the PUT request to create a duplicate asset.
The source URL of an image. Include in the body of the PUT request to upload the image to Shopify.
Change an existing Liquid template's value
Change an existing Liquid template's value
Show asset properties
The path to the asset within a theme. It consists of the file's directory and filename. For example, the asset assets/bg-body-green.gif is in the assets directory, so its key is assets/bg-body-green.gif.
The text content of the asset, such as the HTML and Liquid markup of a template file.
Create an image asset by providing a base64-encoded attachment
Create an image asset by providing a base64-encoded attachment
Show asset properties
The path to the asset within a theme. It consists of the file's directory and filename. For example, the asset assets/bg-body-green.gif is in the assets directory, so its key is assets/bg-body-green.gif.
A base64-encoded image.
Create an image asset by providing a source URL from which to upload the image
Create an image asset by providing a source URL from which to upload the image
Show asset properties
The path to the asset within a theme. It consists of the file's directory and filename. For example, the asset assets/bg-body-green.gif is in the assets directory, so its key is assets/bg-body-green.gif.
Duplicate an existing asset by providing a source key
Duplicate an existing asset by providing a source key
Show asset properties
The path to the asset within a theme. It consists of the file's directory and filename. For example, the asset assets/bg-body-green.gif is in the assets directory, so its key is assets/bg-body-green.gif.
/admin/api/2025-10/themes/828155753/assets.
Response
examples
- Change an existing Liquid template's value- curl -d '{"asset":{"key":"templates/index.liquid","value":"<img src='backsoon-postit.png'><p>We are busy updating the store for you and will be back within the hour.</p>"}}' \ -X PUT "https://your-development-store.myshopify.com/admin/api/2025-10/themes/828155753/assets.json" \ -H "X-Shopify-Access-Token: {access_token}" \ -H "Content-Type: application/json"- const { admin, session } = await authenticate.admin(request); const asset = new admin.rest.resources.Asset({session: session}); asset.theme_id = 828155753; asset.key = "templates/index.liquid"; asset.value = "<img src='backsoon-postit.png'><p>We are busy updating the store for you and will be back within the hour.</p>"; await asset.save({ update: true, });- # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session asset = ShopifyAPI::Asset.new(session: test_session) asset.theme_id = 828155753 asset.key = "templates/index.liquid" asset.value = "<img src='backsoon-postit.png'><p>We are busy updating the store for you and will be back within the hour.</p>" asset.save!- // Session is built by the OAuth process const asset = new shopify.rest.Asset({session: session}); asset.theme_id = 828155753; asset.key = "templates/index.liquid"; asset.value = "<img src='backsoon-postit.png'><p>We are busy updating the store for you and will be back within the hour.</p>"; await asset.save({ update: true, });- response- HTTP/1.1 200 OK{"asset":{"key":"templates/index.liquid","public_url":null,"created_at":"2010-07-12T15:31:50-04:00","updated_at":"2025-10-01T15:06:14-04:00","content_type":"application/x-liquid","size":110,"checksum":"cd71db2e14df976c8aa44b44c8dae77b","theme_id":828155753}}
- Create an image asset by providing a base64-encoded attachment- curl -d '{"asset":{"key":"assets/empty.gif","attachment":"R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==\n"}}' \ -X PUT "https://your-development-store.myshopify.com/admin/api/2025-10/themes/828155753/assets.json" \ -H "X-Shopify-Access-Token: {access_token}" \ -H "Content-Type: application/json"- const { admin, session } = await authenticate.admin(request); const asset = new admin.rest.resources.Asset({session: session}); asset.theme_id = 828155753; asset.key = "assets/empty.gif"; asset.attachment = "R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==\n"; await asset.save({ update: true, });- # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session asset = ShopifyAPI::Asset.new(session: test_session) asset.theme_id = 828155753 asset.key = "assets/empty.gif" asset.attachment = "R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==\n" asset.save!- // Session is built by the OAuth process const asset = new shopify.rest.Asset({session: session}); asset.theme_id = 828155753; asset.key = "assets/empty.gif"; asset.attachment = "R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==\n"; await asset.save({ update: true, });- response- HTTP/1.1 200 OK{"asset":{"key":"assets/empty.gif","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/empty.gif?v=1759345575","created_at":"2025-10-01T15:06:15-04:00","updated_at":"2025-10-01T15:06:15-04:00","content_type":"image/gif","size":43,"checksum":"45cf913e5d9d3c9b2058033056d3dd23","theme_id":828155753}}
- Create an image asset by providing a source URL from which to upload the image- curl -d '{"asset":{"key":"assets/bg-body.gif","src":"http://example.com/new_bg.gif"}}' \ -X PUT "https://your-development-store.myshopify.com/admin/api/2025-10/themes/828155753/assets.json" \ -H "X-Shopify-Access-Token: {access_token}" \ -H "Content-Type: application/json"- const { admin, session } = await authenticate.admin(request); const asset = new admin.rest.resources.Asset({session: session}); asset.theme_id = 828155753; asset.key = "assets/bg-body.gif"; asset.src = "http://example.com/new_bg.gif"; await asset.save({ update: true, });- # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session asset = ShopifyAPI::Asset.new(session: test_session) asset.theme_id = 828155753 asset.key = "assets/bg-body.gif" asset.src = "http://example.com/new_bg.gif" asset.save!- // Session is built by the OAuth process const asset = new shopify.rest.Asset({session: session}); asset.theme_id = 828155753; asset.key = "assets/bg-body.gif"; asset.src = "http://example.com/new_bg.gif"; await asset.save({ update: true, });- response- HTTP/1.1 200 OK{"asset":{"key":"assets/bg-body.gif","public_url":"https://cdn.shopify.com/s/files/1/0005/4838/0009/t/1/assets/bg-body.gif?v=1759345579","created_at":"2010-07-12T15:31:50-04:00","updated_at":"2025-10-01T15:06:19-04:00","content_type":"image/gif","size":43,"checksum":"45cf913e5d9d3c9b2058033056d3dd23","theme_id":828155753}}
- Duplicate an existing asset by providing a source key- curl -d '{"asset":{"key":"layout/alternate.liquid","source_key":"layout/theme.liquid"}}' \ -X PUT "https://your-development-store.myshopify.com/admin/api/2025-10/themes/828155753/assets.json" \ -H "X-Shopify-Access-Token: {access_token}" \ -H "Content-Type: application/json"- const { admin, session } = await authenticate.admin(request); const asset = new admin.rest.resources.Asset({session: session}); asset.theme_id = 828155753; asset.key = "layout/alternate.liquid"; asset.source_key = "layout/theme.liquid"; await asset.save({ update: true, });- # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session asset = ShopifyAPI::Asset.new(session: test_session) asset.theme_id = 828155753 asset.key = "layout/alternate.liquid" asset.source_key = "layout/theme.liquid" asset.save!- // Session is built by the OAuth process const asset = new shopify.rest.Asset({session: session}); asset.theme_id = 828155753; asset.key = "layout/alternate.liquid"; asset.source_key = "layout/theme.liquid"; await asset.save({ update: true, });- response- HTTP/1.1 200 OK{"asset":{"key":"layout/alternate.liquid","public_url":null,"created_at":"2025-10-01T15:06:18-04:00","updated_at":"2025-10-01T15:06:18-04:00","content_type":"application/x-liquid","size":3049,"checksum":"1879a06996941b2ff1ff485a1fe60a97","theme_id":828155753}}
Anchor to DELETE request, Deletes an asset from a themedelDeletes an asset from a theme
Deletes an asset from a theme.
Deletes a single asset from a theme by specifying the asset's key.
Delete an image from a theme
Delete an image from a theme
Deletes a single asset from a theme by specifying the asset's key.
Deleting an asset required by the theme fails with an error
Deleting an asset required by the theme fails with an error
Deletes a single asset from a theme by specifying the asset's key.
/admin/api/2025-10/themes/828155753/assets.
Response
examples
- Delete an image from a theme- curl -X DELETE "https://your-development-store.myshopify.com/admin/api/2025-10/themes/828155753/assets.json?asset%5Bkey%5D=assets%2Fbg-body.gif" \ -H "X-Shopify-Access-Token: {access_token}"- await admin.rest.resources.Asset.delete({ session: session, theme_id: 828155753, asset: {"key": "assets/bg-body.gif"}, });- # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session ShopifyAPI::Asset.delete( session: test_session, theme_id: 828155753, asset: {"key" => "assets/bg-body.gif"}, )- // Session is built by the OAuth process await shopify.rest.Asset.delete({ session: session, theme_id: 828155753, asset: {"key": "assets/bg-body.gif"}, });- response- HTTP/1.1 200 OK{"message":"assets/bg-body.gif was successfully deleted"}
- Deleting an asset required by the theme fails with an error- curl -X DELETE "https://your-development-store.myshopify.com/admin/api/2025-10/themes/828155753/assets.json?asset%5Bkey%5D=layout%2Ftheme.liquid" \ -H "X-Shopify-Access-Token: {access_token}"- await admin.rest.resources.Asset.delete({ session: session, theme_id: 828155753, asset: {"key": "layout/theme.liquid"}, });- # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session ShopifyAPI::Asset.delete( session: test_session, theme_id: 828155753, asset: {"key" => "layout/theme.liquid"}, )- // Session is built by the OAuth process await shopify.rest.Asset.delete({ session: session, theme_id: 828155753, asset: {"key": "layout/theme.liquid"}, });- response- HTTP/1.1 403 Forbidden{"message":"layout/theme.liquid could not be deleted"}