# Theme

A theme controls the look and feel of a Shopify online store.

{{ '/api/reference/theme.png' | image }}

A store can have a maximum of 20 themes, one of which is the published theme that customers see when they visit the online store. Customers can't see unpublished themes. When you publish a theme, the previously published theme becomes unpublished.

To modify theme files after they're uploaded, use the Asset resource. To learn how to create your own theme, refer to Building themes

## Resource Properties ### Theme * created_at: The date and time when the theme was created. (format: 2014-04-25T16:15:47-04:00) * Type: x-string * Example: "2012-08-24T14:01:47-04:00" * id: The unique numeric identifier for the theme. * Type: x-string * Example: 828155753 * name: The name of the theme. * Type: x-string * Example: "Comfort" * previewable: Whether the theme can currently be previewed. * Type: x-string * Example: true * processing: Whether files are still being copied into place for this theme. * Type: x-string * Example: true * role: Specifies how the theme is being used within the shop. Valid values: * Type: x-string * Example: "main" * src: Specifies a public URL where Shopify can access the theme code. * Type: x-string * Example: "http://themes.shopify.com/theme.zip" * theme_store_id: A unique identifier applied to Shopify-made themes that are installed from the Shopify Theme Store Theme Store. Not all themes available in the Theme Store are developed by Shopify. Returns null if the store's theme isn't made by Shopify, or if it wasn't installed from the Theme Store. * Type: x-string * Example: 775 * updated_at: The date and time of when the theme was last updated. (format: 2014-04-25T16:15:47-04:00) * Type: x-string * Example: "2012-08-24T14:01:47-04:00" ## Retrieves a list of themes Retrieves a list of themes. ### Endpoint /admin/api/#{api_version}/themes.json (GET) ### Parameters * api_version (required): * fields: Show only certain fields, specified by a comma-separated list of field names. ### Responses #### 200 Retrieves a list of themes Examples: ##### Retrieve a list of themes Request: ``` GET /admin/api/unstable/themes.json ``` Response: ``` HTTP/1.1 200 OK {"themes":[{"id":828155753,"name":"Comfort","created_at":"2025-01-02T11:29:59-05:00","updated_at":"2025-01-02T11:29:59-05:00","role":"main","theme_store_id":null,"previewable":true,"processing":false,"admin_graphql_api_id":"gid://shopify/Theme/828155753"},{"id":976877075,"name":"Preview of Parallax","created_at":"2025-01-02T11:29:59-05:00","updated_at":"2025-01-02T11:29:59-05:00","role":"demo","theme_store_id":688,"previewable":true,"processing":false,"admin_graphql_api_id":"gid://shopify/Theme/976877075"},{"id":752253240,"name":"Sandbox","created_at":"2025-01-02T11:29:59-05:00","updated_at":"2025-01-02T11:29:59-05:00","role":"unpublished","theme_store_id":null,"previewable":true,"processing":false,"admin_graphql_api_id":"gid://shopify/Theme/752253240"}]} ``` ## Creates a theme Creates a theme by providing the public URL of a ZIP file that contains the theme.

A new theme is always unpublished by default. To publish a theme when you create it, include "role": "main" in the POST request. The theme will be published only after all of its files have been extracted and stored by Shopify, which might take a couple of minutes.

### Endpoint /admin/api/#{api_version}/themes.json (POST) ### Parameters * api_version (required): ### Responses #### 201 Creates a theme Examples: ##### Create a theme that has a custom name and is published Request: ``` POST /admin/api/unstable/themes.json {"theme":{"name":"Lemongrass","src":"http://themes.shopify.com/theme.zip","role":"main"}} ``` Response: ``` HTTP/1.1 201 Created {"theme":{"id":1049083723,"name":"Lemongrass","created_at":"2025-01-02T11:35:01-05:00","updated_at":"2025-01-02T11:35:01-05:00","role":"unpublished","theme_store_id":null,"previewable":false,"processing":true,"admin_graphql_api_id":"gid://shopify/Theme/1049083723"}} ``` #### 422 Creates a theme Examples: ##### Creating a theme without a name fails and returns an error Request: ``` POST /admin/api/unstable/themes.json {"theme":{"body":"foobar"}} ``` Response: ``` HTTP/1.1 422 Unprocessable Entity {"errors":{"name":["can't be blank"]}} ``` ## Retrieves a single theme by its ID Retrieves a single theme by its ID. ### Endpoint /admin/api/#{api_version}/themes/{theme_id}.json (GET) ### Parameters * api_version (required): * theme_id (required): * fields: Show only certain fields, specified by a comma-separated list of field names. ### Responses #### 200 Retrieves a single theme by its ID Examples: ##### Retrieve a single theme Request: ``` GET /admin/api/unstable/themes/828155753.json ``` Response: ``` HTTP/1.1 200 OK {"theme":{"id":828155753,"name":"Comfort","created_at":"2025-01-02T11:29:59-05:00","updated_at":"2025-01-02T11:29:59-05:00","role":"main","theme_store_id":null,"previewable":true,"processing":false,"admin_graphql_api_id":"gid://shopify/Theme/828155753"}} ``` ## Modify an existing Theme Updates an existing theme. ### Endpoint /admin/api/#{api_version}/themes/{theme_id}.json (PUT) ### Parameters * api_version (required): * theme_id (required): ### Responses #### 200 Modify an existing Theme Examples: ##### Publish an unpublished theme Request: ``` PUT /admin/api/unstable/themes/752253240.json {"theme":{"id":752253240,"role":"main"}} ``` Response: ``` HTTP/1.1 200 OK {"theme":{"role":"main","id":752253240,"name":"Sandbox","created_at":"2025-01-02T11:29:59-05:00","updated_at":"2025-01-02T11:34:59-05:00","theme_store_id":null,"previewable":true,"processing":false,"admin_graphql_api_id":"gid://shopify/Theme/752253240"}} ``` ##### Update a theme's name Request: ``` PUT /admin/api/unstable/themes/752253240.json {"theme":{"id":752253240,"name":"Experimental"}} ``` Response: ``` HTTP/1.1 200 OK {"theme":{"name":"Experimental","role":"unpublished","id":752253240,"created_at":"2025-01-02T11:29:59-05:00","updated_at":"2025-01-02T11:34:58-05:00","theme_store_id":null,"previewable":true,"processing":false,"admin_graphql_api_id":"gid://shopify/Theme/752253240"}} ``` ## Remove an existing Theme Deletes a theme. A theme can't be deleted while it's uploading, updating, or if the theme is the last published theme. ### Endpoint /admin/api/#{api_version}/themes/{theme_id}.json (DELETE) ### Parameters * api_version (required): * theme_id (required): ### Responses #### 200 Remove an existing Theme Examples: ##### Delete a theme Request: ``` DELETE /admin/api/unstable/themes/752253240.json ``` Response: ``` HTTP/1.1 200 OK {"id":752253240,"name":"Sandbox","created_at":"2025-01-02T11:29:59-05:00","updated_at":"2025-01-02T11:29:59-05:00","role":"unpublished","theme_store_id":null,"previewable":true,"processing":false,"admin_graphql_api_id":"gid://shopify/Theme/752253240"} ```