productOptionsReorder
Requires access scope. Also: The user must have a permission to update product variants.
Reorders options and option values on a product, causing product variants to alter their position.
Options order take precedence over option values order. Depending on the existing product variants, some input orders might not be achieved.
Example: Existing product variants: ["Red / Small", "Green / Medium", "Blue / Small"].
New order: [ { name: "Size", values: [{ name: "Small" }, { name: "Medium" }], name: "Color", values: [{ name: "Green" }, { name: "Red" }, { name: "Blue" }] } ].
Description: Variants with "Green" value are expected to appear before variants with "Red" and "Blue" values. However, "Size" option appears before "Color".
Therefore, output will be: ["Small / "Red", "Small / Blue", "Medium / Green"].
Arguments
- Anchor to optionsoptions•[Option
Reorder requiredInput!]! Options to reorder on the product.
- Anchor to productIdproduct•
Id ID!required The ID of the product to update.
Anchor to ProductOptionsReorderPayload returnsProductOptionsReorderPayload returns
- Anchor to productproduct•
The updated product object.
- Anchor to userErrorsuser•
Errors The list of errors that occurred from executing the mutation.
- Reorder options and change the order of option values
- Trying to reorder option values with any value missing in the input returns an error
- productOptionsReorder reference
Examples
mutation reorderOptions($options: [OptionReorderInput!]!, $productId: ID!) {
productOptionsReorder(options: $options, productId: $productId) {
userErrors {
field
message
code
}
product {
id
options {
id
name
values
position
optionValues {
id
name
hasVariants
}
}
variants(first: 5) {
nodes {
id
title
selectedOptions {
name
value
}
}
}
}
}
}
curl -X POST \
https://your-development-store.myshopify.com/admin/api/2025-01/graphql.json \
-H 'Content-Type: application/json' \
-H 'X-Shopify-Access-Token: {access_token}' \
-d '{
"query": "mutation reorderOptions($options: [OptionReorderInput!]!, $productId: ID!) { productOptionsReorder(options: $options, productId: $productId) { userErrors { field message code } product { id options { id name values position optionValues { id name hasVariants } } variants(first: 5) { nodes { id title selectedOptions { name value } } } } } }",
"variables": {
"productId": "gid://shopify/Product/1072481054",
"options": [
{
"name": "Color",
"values": [
{
"name": "Green"
},
{
"name": "Blue"
},
{
"name": "Red"
}
]
},
{
"name": "Size"
}
]
}
}'
const { admin } = await authenticate.admin(request);
const response = await admin.graphql(
`#graphql
mutation reorderOptions($options: [OptionReorderInput!]!, $productId: ID!) {
productOptionsReorder(options: $options, productId: $productId) {
userErrors {
field
message
code
}
product {
id
options {
id
name
values
position
optionValues {
id
name
hasVariants
}
}
variants(first: 5) {
nodes {
id
title
selectedOptions {
name
value
}
}
}
}
}
}`,
{
variables: {
"productId": "gid://shopify/Product/1072481054",
"options": [
{
"name": "Color",
"values": [
{
"name": "Green"
},
{
"name": "Blue"
},
{
"name": "Red"
}
]
},
{
"name": "Size"
}
]
},
},
);
const data = await response.json();
const client = new shopify.clients.Graphql({session});
const data = await client.query({
data: {
"query": `mutation reorderOptions($options: [OptionReorderInput!]!, $productId: ID!) {
productOptionsReorder(options: $options, productId: $productId) {
userErrors {
field
message
code
}
product {
id
options {
id
name
values
position
optionValues {
id
name
hasVariants
}
}
variants(first: 5) {
nodes {
id
title
selectedOptions {
name
value
}
}
}
}
}
}`,
"variables": {
"productId": "gid://shopify/Product/1072481054",
"options": [
{
"name": "Color",
"values": [
{
"name": "Green"
},
{
"name": "Blue"
},
{
"name": "Red"
}
]
},
{
"name": "Size"
}
]
},
},
});
session = ShopifyAPI::Auth::Session.new(
shop: "your-development-store.myshopify.com",
access_token: access_token
)
client = ShopifyAPI::Clients::Graphql::Admin.new(
session: session
)
query = <<~QUERY
mutation reorderOptions($options: [OptionReorderInput!]!, $productId: ID!) {
productOptionsReorder(options: $options, productId: $productId) {
userErrors {
field
message
code
}
product {
id
options {
id
name
values
position
optionValues {
id
name
hasVariants
}
}
variants(first: 5) {
nodes {
id
title
selectedOptions {
name
value
}
}
}
}
}
}
QUERY
variables = {
"productId": "gid://shopify/Product/1072481054",
"options": [{"name"=>"Color", "values"=>[{"name"=>"Green"}, {"name"=>"Blue"}, {"name"=>"Red"}]}, {"name"=>"Size"}]
}
response = client.query(query: query, variables: variables)