Anchor to section titled 'undefined'

combinedListingUpdate
mutation

Requires write_products access scope. Also: The user must have permission to manage products.

Add, remove and update CombinedListings of a given Product.

CombinedListings are comprised of multiple products to create a single listing. There are two kinds of products used in a CombinedListing:

  1. Parent products
  2. Child products

The parent product is created with a productCreate with a CombinedListingRole of PARENT. Once created, you can associate child products with the parent product using this mutation. Parent products represent the idea of a product (e.g. Shoe).

Child products represent a particular option value (or combination of option values) of a parent product. For instance, with your Shoe parent product, you may have several child products representing specific colors of the shoe (e.g. Shoe - Blue). You could also have child products representing more than a single option (e.g. Shoe - Blue/Canvas, Shoe - Blue/Leather, etc...).

The combined listing is the association of parent product to one or more child products.

Learn more about Combined Listings.


The ordered options and values to be used by the combined listing. Options and values will be reordered to match the order specified here.

Anchor to parentProductId
parentProductId
required

The ID of the parent product.

The child products to add and their assigned options and option values.

The child products to edit and their assigned options and option values.

The IDs of products to be removed from the combined listing.

The updated title for the combined listing.


Was this section helpful?

The parent product.

The list of errors that occurred from executing the mutation.


Was this section helpful?

Examples

Hide code
DescriptionCopy
mutation AddChildProductsToCombinedListing($parentProductId: ID!, $productsAdded: [ChildProductRelationInput!], $optionsAndValues: [OptionAndValueInput!]) {
  combinedListingUpdate(parentProductId: $parentProductId, productsAdded: $productsAdded, optionsAndValues: $optionsAndValues) {
    product {
      id
      combinedListing {
        combinedListingChildren(first: 10) {
          nodes {
            product {
              id
            }
            parentVariant {
              selectedOptions {
                value
              }
            }
          }
        }
      }
    }
    userErrors {
      code
      field
      message
    }
  }
}
curl -X POST \
https://your-development-store.myshopify.com/admin/api/unstable/graphql.json \
-H 'Content-Type: application/json' \
-H 'X-Shopify-Access-Token: {access_token}' \
-d '{
"query": "mutation AddChildProductsToCombinedListing($parentProductId: ID!, $productsAdded: [ChildProductRelationInput!], $optionsAndValues: [OptionAndValueInput!]) { combinedListingUpdate(parentProductId: $parentProductId, productsAdded: $productsAdded, optionsAndValues: $optionsAndValues) { product { id combinedListing { combinedListingChildren(first: 10) { nodes { product { id } parentVariant { selectedOptions { value } } } } } } userErrors { code field message } } }",
 "variables": {
    "parentProductId": "gid://shopify/Product/108828309",
    "productsAdded": [
      {
        "childProductId": "gid://shopify/Product/121709582",
        "selectedParentOptionValues": [
          {
            "name": "color",
            "value": "Blue"
          },
          {
            "name": "size",
            "value": "12"
          }
        ]
      },
      {
        "childProductId": "gid://shopify/Product/912855135",
        "selectedParentOptionValues": [
          {
            "name": "color",
            "value": "Red"
          },
          {
            "name": "size",
            "value": "12"
          }
        ]
      }
    ],
    "optionsAndValues": [
      {
        "name": "color",
        "values": [
          "Blue",
          "Red"
        ]
      },
      {
        "name": "size",
        "values": [
          "12"
        ]
      }
    ]
  }
}'
const { admin } = await authenticate.admin(request);

const response = await admin.graphql(
  `#graphql
  mutation AddChildProductsToCombinedListing($parentProductId: ID!, $productsAdded: [ChildProductRelationInput!], $optionsAndValues: [OptionAndValueInput!]) {
    combinedListingUpdate(parentProductId: $parentProductId, productsAdded: $productsAdded, optionsAndValues: $optionsAndValues) {
      product {
        id
        combinedListing {
          combinedListingChildren(first: 10) {
            nodes {
              product {
                id
              }
              parentVariant {
                selectedOptions {
                  value
                }
              }
            }
          }
        }
      }
      userErrors {
        code
        field
        message
      }
    }
  }`,
  {
    variables: {
      "parentProductId": "gid://shopify/Product/108828309",
      "productsAdded": [
        {
          "childProductId": "gid://shopify/Product/121709582",
          "selectedParentOptionValues": [
            {
              "name": "color",
              "value": "Blue"
            },
            {
              "name": "size",
              "value": "12"
            }
          ]
        },
        {
          "childProductId": "gid://shopify/Product/912855135",
          "selectedParentOptionValues": [
            {
              "name": "color",
              "value": "Red"
            },
            {
              "name": "size",
              "value": "12"
            }
          ]
        }
      ],
      "optionsAndValues": [
        {
          "name": "color",
          "values": [
            "Blue",
            "Red"
          ]
        },
        {
          "name": "size",
          "values": [
            "12"
          ]
        }
      ]
    },
  },
);

const data = await response.json();
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 AddChildProductsToCombinedListing($parentProductId: ID!, $productsAdded: [ChildProductRelationInput!], $optionsAndValues: [OptionAndValueInput!]) {
    combinedListingUpdate(parentProductId: $parentProductId, productsAdded: $productsAdded, optionsAndValues: $optionsAndValues) {
      product {
        id
        combinedListing {
          combinedListingChildren(first: 10) {
            nodes {
              product {
                id
              }
              parentVariant {
                selectedOptions {
                  value
                }
              }
            }
          }
        }
      }
      userErrors {
        code
        field
        message
      }
    }
  }
QUERY

variables = {
  "parentProductId": "gid://shopify/Product/108828309",
  "productsAdded": [{"childProductId"=>"gid://shopify/Product/121709582", "selectedParentOptionValues"=>[{"name"=>"color", "value"=>"Blue"}, {"name"=>"size", "value"=>"12"}]}, {"childProductId"=>"gid://shopify/Product/912855135", "selectedParentOptionValues"=>[{"name"=>"color", "value"=>"Red"}, {"name"=>"size", "value"=>"12"}]}],
  "optionsAndValues": [{"name"=>"color", "values"=>["Blue", "Red"]}, {"name"=>"size", "values"=>["12"]}]
}

response = client.query(query: query, variables: variables)
const client = new shopify.clients.Graphql({session});
const data = await client.query({
  data: {
    "query": `mutation AddChildProductsToCombinedListing($parentProductId: ID!, $productsAdded: [ChildProductRelationInput!], $optionsAndValues: [OptionAndValueInput!]) {
      combinedListingUpdate(parentProductId: $parentProductId, productsAdded: $productsAdded, optionsAndValues: $optionsAndValues) {
        product {
          id
          combinedListing {
            combinedListingChildren(first: 10) {
              nodes {
                product {
                  id
                }
                parentVariant {
                  selectedOptions {
                    value
                  }
                }
              }
            }
          }
        }
        userErrors {
          code
          field
          message
        }
      }
    }`,
    "variables": {
      "parentProductId": "gid://shopify/Product/108828309",
      "productsAdded": [
        {
          "childProductId": "gid://shopify/Product/121709582",
          "selectedParentOptionValues": [
            {
              "name": "color",
              "value": "Blue"
            },
            {
              "name": "size",
              "value": "12"
            }
          ]
        },
        {
          "childProductId": "gid://shopify/Product/912855135",
          "selectedParentOptionValues": [
            {
              "name": "color",
              "value": "Red"
            },
            {
              "name": "size",
              "value": "12"
            }
          ]
        }
      ],
      "optionsAndValues": [
        {
          "name": "color",
          "values": [
            "Blue",
            "Red"
          ]
        },
        {
          "name": "size",
          "values": [
            "12"
          ]
        }
      ]
    },
  },
});
use Shopify\Clients\Graphql;

$client = new Graphql("your-development-store.myshopify.com", $accessToken);
$query = <<<QUERY
  mutation AddChildProductsToCombinedListing($parentProductId: ID!, $productsAdded: [ChildProductRelationInput!], $optionsAndValues: [OptionAndValueInput!]) {
    combinedListingUpdate(parentProductId: $parentProductId, productsAdded: $productsAdded, optionsAndValues: $optionsAndValues) {
      product {
        id
        combinedListing {
          combinedListingChildren(first: 10) {
            nodes {
              product {
                id
              }
              parentVariant {
                selectedOptions {
                  value
                }
              }
            }
          }
        }
      }
      userErrors {
        code
        field
        message
      }
    }
  }
QUERY;

$variables = [
  "parentProductId" => "gid://shopify/Product/108828309",
  "productsAdded" => [{"childProductId"=>"gid://shopify/Product/121709582", "selectedParentOptionValues"=>[{"name"=>"color", "value"=>"Blue"}, {"name"=>"size", "value"=>"12"}]}, {"childProductId"=>"gid://shopify/Product/912855135", "selectedParentOptionValues"=>[{"name"=>"color", "value"=>"Red"}, {"name"=>"size", "value"=>"12"}]}],
  "optionsAndValues" => [{"name"=>"color", "values"=>["Blue", "Red"]}, {"name"=>"size", "values"=>["12"]}],
];

$response = $client->query(["query" => $query, "variables" => $variables]);
Hide code
Input variables
Copy
{
  "parentProductId": "gid://shopify/Product/108828309",
  "productsAdded": [
    {
      "childProductId": "gid://shopify/Product/121709582",
      "selectedParentOptionValues": [
        {
          "name": "color",
          "value": "Blue"
        },
        {
          "name": "size",
          "value": "12"
        }
      ]
    },
    {
      "childProductId": "gid://shopify/Product/912855135",
      "selectedParentOptionValues": [
        {
          "name": "color",
          "value": "Red"
        },
        {
          "name": "size",
          "value": "12"
        }
      ]
    }
  ],
  "optionsAndValues": [
    {
      "name": "color",
      "values": [
        "Blue",
        "Red"
      ]
    },
    {
      "name": "size",
      "values": [
        "12"
      ]
    }
  ]
}
Hide code
Response
JSON
{
  "combinedListingUpdate": {
    "product": {
      "id": "gid://shopify/Product/108828309",
      "combinedListing": {
        "combinedListingChildren": {
          "nodes": [
            {
              "product": {
                "id": "gid://shopify/Product/121709582"
              },
              "parentVariant": {
                "selectedOptions": [
                  {
                    "value": "Blue"
                  },
                  {
                    "value": "12"
                  }
                ]
              }
            },
            {
              "product": {
                "id": "gid://shopify/Product/912855135"
              },
              "parentVariant": {
                "selectedOptions": [
                  {
                    "value": "Red"
                  },
                  {
                    "value": "12"
                  }
                ]
              }
            }
          ]
        }
      }
    },
    "userErrors": []
  }
}