# themeFilesCopy - admin-graphql - MUTATION Version: 2024-10 ## Description Copy theme files. Copying to existing theme files will overwrite them. ### Access Scopes The user needs write_themes and an exemption from Shopify to modify theme files. If you think that your app is eligible for an exemption and should have access to this API, then you can [submit an exception request](https://docs.google.com/forms/d/e/1FAIpQLSfZTB1vxFC5d1-GPdqYunWRGUoDcOheHQzfK2RoEFEHrknt5g/viewform). ## Arguments * [files](/docs/api/admin-graphql/2024-10/input-objects/ThemeFilesCopyFileInput): ThemeFilesCopyFileInput! - The files to update. * [themeId](/docs/api/admin-graphql/2024-10/scalars/ID): ID! - The theme to update. ## Returns * [copiedThemeFiles](/docs/api/admin-graphql/2024-10/objects/OnlineStoreThemeFileOperationResult): OnlineStoreThemeFileOperationResult The resulting theme files. * [userErrors](/docs/api/admin-graphql/2024-10/objects/OnlineStoreThemeFilesUserErrors): OnlineStoreThemeFilesUserErrors! The list of errors that occurred from executing the mutation. ## Examples ### Copy the content of a file into another file Curl example: "curl -X POST \\\nhttps://your-development-store.myshopify.com/admin/api/2024-10/graphql.json \\\n-H 'Content-Type: application/json' \\\n-H 'X-Shopify-Access-Token: {access_token}' \\\n-d '{\n\"query\": \"mutation themeFilesCopy($files: [ThemeFilesCopyFileInput!]!, $themeId: ID!) { themeFilesCopy(files: $files, themeId: $themeId) { copiedThemeFiles { filename } userErrors { field message } } }\",\n \"variables\": {\n \"themeId\": \"gid://shopify/OnlineStoreTheme/529529152\",\n \"files\": [\n {\n \"dstFilename\": \"templates/index.alt.json\",\n \"srcFilename\": \"templates/index.json\"\n }\n ]\n }\n}'\n" Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n data: {\n \"query\": `mutation themeFilesCopy($files: [ThemeFilesCopyFileInput!]!, $themeId: ID!) {\n themeFilesCopy(files: $files, themeId: $themeId) {\n copiedThemeFiles {\n filename\n }\n userErrors {\n field\n message\n }\n }\n }`,\n \"variables\": {\n \"themeId\": \"gid://shopify/OnlineStoreTheme/529529152\",\n \"files\": [\n {\n \"dstFilename\": \"templates/index.alt.json\",\n \"srcFilename\": \"templates/index.json\"\n }\n ]\n },\n },\n});\n" Ruby example: "session = ShopifyAPI::Auth::Session.new(\n shop: \"your-development-store.myshopify.com\",\n access_token: access_token\n)\nclient = ShopifyAPI::Clients::Graphql::Admin.new(\n session: session\n)\n\nquery = <<~QUERY\n mutation themeFilesCopy($files: [ThemeFilesCopyFileInput!]!, $themeId: ID!) {\n themeFilesCopy(files: $files, themeId: $themeId) {\n copiedThemeFiles {\n filename\n }\n userErrors {\n field\n message\n }\n }\n }\nQUERY\n\nvariables = {\n \"themeId\": \"gid://shopify/OnlineStoreTheme/529529152\",\n \"files\": [{\"dstFilename\"=>\"templates/index.alt.json\", \"srcFilename\"=>\"templates/index.json\"}]\n}\n\nresponse = client.query(query: query, variables: variables)\n" Remix example: "const { admin } = await authenticate.admin(request);\n\nconst response = await admin.graphql(\n `#graphql\n mutation themeFilesCopy($files: [ThemeFilesCopyFileInput!]!, $themeId: ID!) {\n themeFilesCopy(files: $files, themeId: $themeId) {\n copiedThemeFiles {\n filename\n }\n userErrors {\n field\n message\n }\n }\n }`,\n {\n variables: {\n \"themeId\": \"gid://shopify/OnlineStoreTheme/529529152\",\n \"files\": [\n {\n \"dstFilename\": \"templates/index.alt.json\",\n \"srcFilename\": \"templates/index.json\"\n }\n ]\n },\n },\n);\n\nconst data = await response.json();\n" Graphql query: "mutation themeFilesCopy($files: [ThemeFilesCopyFileInput!]!, $themeId: ID!) {\n themeFilesCopy(files: $files, themeId: $themeId) {\n copiedThemeFiles {\n filename\n }\n userErrors {\n field\n message\n }\n }\n}" #### Graphql Input { "themeId": "gid://shopify/OnlineStoreTheme/529529152", "files": [ { "dstFilename": "templates/index.alt.json", "srcFilename": "templates/index.json" } ] } #### Graphql Response { "data": { "themeFilesCopy": { "copiedThemeFiles": [ { "filename": "templates/index.alt.json" } ], "userErrors": [] } } } ### Creates or updates an asset for a theme Curl example: "curl -X POST \\\nhttps://your-development-store.myshopify.com/admin/api/2024-10/graphql.json \\\n-H 'Content-Type: application/json' \\\n-H 'X-Shopify-Access-Token: {access_token}' \\\n-d '{\n\"query\": \"mutation ThemeFilesCopy($files: [ThemeFilesCopyFileInput!]!, $themeId: ID!) { themeFilesCopy(files: $files, themeId: $themeId) { copiedThemeFiles { filename } userErrors { code field filename message } } }\",\n \"variables\": {\n \"themeId\": \"gid://shopify/OnlineStoreTheme/529529152\",\n \"files\": [\n {\n \"dstFilename\": \"templates/index.alt.liquid\",\n \"srcFilename\": \"templates/index.liquid\"\n }\n ]\n }\n}'\n" Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n data: {\n \"query\": `mutation ThemeFilesCopy($files: [ThemeFilesCopyFileInput!]!, $themeId: ID!) {\n themeFilesCopy(files: $files, themeId: $themeId) {\n copiedThemeFiles {\n filename\n }\n userErrors {\n code\n field\n filename\n message\n }\n }\n }`,\n \"variables\": {\n \"themeId\": \"gid://shopify/OnlineStoreTheme/529529152\",\n \"files\": [\n {\n \"dstFilename\": \"templates/index.alt.liquid\",\n \"srcFilename\": \"templates/index.liquid\"\n }\n ]\n },\n },\n});\n" Ruby example: "session = ShopifyAPI::Auth::Session.new(\n shop: \"your-development-store.myshopify.com\",\n access_token: access_token\n)\nclient = ShopifyAPI::Clients::Graphql::Admin.new(\n session: session\n)\n\nquery = <<~QUERY\n mutation ThemeFilesCopy($files: [ThemeFilesCopyFileInput!]!, $themeId: ID!) {\n themeFilesCopy(files: $files, themeId: $themeId) {\n copiedThemeFiles {\n filename\n }\n userErrors {\n code\n field\n filename\n message\n }\n }\n }\nQUERY\n\nvariables = {\n \"themeId\": \"gid://shopify/OnlineStoreTheme/529529152\",\n \"files\": [{\"dstFilename\"=>\"templates/index.alt.liquid\", \"srcFilename\"=>\"templates/index.liquid\"}]\n}\n\nresponse = client.query(query: query, variables: variables)\n" Remix example: "const { admin } = await authenticate.admin(request);\n\nconst response = await admin.graphql(\n `#graphql\n mutation ThemeFilesCopy($files: [ThemeFilesCopyFileInput!]!, $themeId: ID!) {\n themeFilesCopy(files: $files, themeId: $themeId) {\n copiedThemeFiles {\n filename\n }\n userErrors {\n code\n field\n filename\n message\n }\n }\n }`,\n {\n variables: {\n \"themeId\": \"gid://shopify/OnlineStoreTheme/529529152\",\n \"files\": [\n {\n \"dstFilename\": \"templates/index.alt.liquid\",\n \"srcFilename\": \"templates/index.liquid\"\n }\n ]\n },\n },\n);\n\nconst data = await response.json();\n" Graphql query: "mutation ThemeFilesCopy($files: [ThemeFilesCopyFileInput!]!, $themeId: ID!) {\n themeFilesCopy(files: $files, themeId: $themeId) {\n copiedThemeFiles {\n filename\n }\n userErrors {\n code\n field\n filename\n message\n }\n }\n}" #### Graphql Input { "themeId": "gid://shopify/OnlineStoreTheme/529529152", "files": [ { "dstFilename": "templates/index.alt.liquid", "srcFilename": "templates/index.liquid" } ] } #### Graphql Response { "data": { "themeFilesCopy": { "copiedThemeFiles": [ { "filename": "templates/index.alt.liquid" } ], "userErrors": [] } } }