Unable to Claim Ownership When Using productSet API

We’re working on migrating our product management from the older create/update mutations to the newer APIs before the January 2025 deprecation deadline.

Currently using the productSet API to manage products, but encountering issues with the claimOwnership parameter. While this parameter is documented, it’s not functioning as expected.

Current Implementation:

mutation ProductSetWithOptionsAndVariants($productSet: ProductSetInput!, $synchronous: Boolean!) {
    productSet(synchronous: $synchronous, input: $productSet) {
        product {
            id
            title
        }
        userErrors {
            field
            message
        }
    }
}

Input:

{
  "synchronous": true,
  "productSet": {
    "title": "Bundle Product",
    "status": "DRAFT",
    "claimOwnership": {
      "bundles": true
    }
  }
}

The API call executes successfully but ownership isn’t being transferred. Has anyone successfully used claimOwnership with productSet? Are there any specific requirements or prerequisites we might be missing?

Expected Behaviour

App should be controlling the variants and they should not be editable from the Shopify admin.

Actual Behaviour

Variants can still be edited from Shopify admin and are not controlled by the app

Any guidance would be greatly appreciated as we work towards the migration deadline.

Additional Context:

  • Using Admin API 2025-01
  • Successfully migrated other mutations
  • No errors in userErrors response

Hi @prakhar ,

Thanks for messaging here, we need to balance prio of fixing this with with other BFCM related tasks, but will get back to you once this is fixed

Thank you so much @Asaf_Gitai!

I am just looking to confirm that this is a bug so we can keep it on stand by till this is fixed.

Can you please confirm that you are able to replicate it on your end?

Mutation Query:

mutation createProductWithTwoOptionsAndVariants($productSet: ProductSetInput!, $synchronous: Boolean!) {
  productSet(synchronous: $synchronous, input: $productSet) {
    product {
      id
      title
      options(first: 5) {
        name
        position
        optionValues {
          name
        }
      }
      hasVariantsThatRequiresComponents
    }
    userErrors {
      field
      message
    }
  }
}

Variables:

{
  "synchronous": true,
  "productSet": {
    "status": "DRAFT",
    "title": "Bundle Product",
    "claimOwnership": {
      "bundles": true
    },
    "productOptions": [
      {
        "name": "Pattern",
        "position": 1,
        "values": [
          {
            "name": "Plain"
          },
          {
            "name": "Stripes"
          }
        ]
      },
      {
        "name": "Width",
        "position": 2,
        "values": [
          {
            "name": "Slim"
          },
          {
            "name": "Classic"
          }
        ]
      }
    ],
    "variants": [
      {
        "optionValues": [
          {
            "optionName": "Pattern",
            "name": "Plain"
          },
          {
            "optionName": "Width",
            "name": "Slim"
          }
        ],
        "price": 15,
        "requiresComponents": true
      },
      {
        "requiresComponents": true,
        "optionValues": [
          {
            "optionName": "Pattern",
            "name": "Plain"
          },
          {
            "optionName": "Width",
            "name": "Classic"
          }
        ],
        "price": 15
      },
      {
        "requiresComponents": true,
        "optionValues": [
          {
            "optionName": "Pattern",
            "name": "Stripes"
          },
          {
            "optionName": "Width",
            "name": "Slim"
          }
        ],
        "price": 15
      },
      {
        "requiresComponents": true,
        "optionValues": [
          {
            "optionName": "Pattern",
            "name": "Stripes"
          },
          {
            "optionName": "Width",
            "name": "Classic"
          }
        ],
        "price": 15
      }
    ]
  }
}


Additionally i have added requiresComponents field on variants:

requiresComponents : Whether a product variant requires components. The default value is false. If true, then the product variant can only be purchased as a parent bundle with components and it will be omitted from channels that don’t support bundles.

https://shopify.dev/docs/api/admin-graphql/2024-10/input-objects/ProductVariantSetInput#field-requirescomponents

Could you please try the query?

Thank you so much helping out :smiley:

I just got a confirmation that it is a bug and it will be fixed post BFCM.

I have intentionally not added requiresComponents in the variants because it blocks the checkout if the function fails due to something. We DO NOT want to block the checkout because it is a one off case and brands usually handle it case by case.

I just got a confirmation that it is a bug and it will be fixed post BFCM.

Yes

1 Like

Hey @Asaf_Gitai!

Since Jan 1 2025 is the deadline to move to the new API and options field will be deprecated. Do we have any timeline for this fix?

Thought I’ll follow up since BFCM is about to end now :smiley: