productSet does not set ownership correctly

Topic summary

A developer migrating to the latest API (2024-10) has identified an ownership assignment issue with the productSet mutation when creating bundle products.

The Problem:

  • productSet fails to associate newly created bundle products with the app that created them
  • productCreate correctly assigns ownership to the creating app
  • Both mutations use identical claimOwnership: { bundles: true } parameters

Evidence Provided:

  • Screenshots demonstrate that products created via productCreate show proper app ownership in GraphiQL
  • Products created via productSet display no ownership of inventory and variant settings
  • Code examples show both mutations using the same ownership claim structure

Current Status:
The issue remains unresolved. The developer is seeking clarification on why productSet behaves differently from productCreate regarding bundle ownership, despite using the same ownership parameters. This appears to be a potential bug in the productSet mutation’s handling of the claimOwnership field.

Summarized with AI on November 4. AI used: claude-sonnet-4-5-20250929.

I’m migrating to the latest API and am trying to use productSet to create a parent bundle product.

When using productSet - the newly created bundle product is not being associated with the app that created it.

When using productCreate - the newly created bundle product is correctly being associated with the app that created it.

In the examples below, I’m using GraphiQL to create the products with 2024-10

productCreate

mutation createProductMetafields($input: ProductInput!) {
  productCreate(input: $input) {
    product {
      id
      title
      tags
      status
      productType
    }
    userErrors {
      message
      field
    }
  }
}
{
  "input": {
    "title": "GraphiQL productCreate Product",
    "productType": "Bundle",
    "tags": "graphiql-bundle-product",
    "status": "ACTIVE",
    "claimOwnership": {
      "bundles": true
    }
  }
}

productCreate result

productSet

mutation createProductSynchronous($productSet: ProductSetInput!, $synchronous: Boolean!) {
  productSet(synchronous: $synchronous, input: $productSet) {
    product {
      id
      title
      status
      templateSuffix
      variants(first: 10) {
        edges {
          node {
            id
            title
            price
            compareAtPrice
            requiresComponents
            inventoryPolicy
          }
        }
      }
    }
    userErrors {
      code
      field
      message
    }
  }
}
{
  "productSet": {
    "claimOwnership": {
      "bundles": true
    },
    "productOptions": [
      {
        "name": "Title",
        "values": [
          {
            "name": "Default Title"
          }
        ]
      }
    ],
    "productType": "Bundle",
    "status": "ACTIVE",
    "tags": "graphiql-bundle-product",
    "title": "Graphiql productSet product",
    "variants": [
      {
        "compareAtPrice": 38,
        "inventoryPolicy": "DENY",
        "optionValues": [
          {
            "name": "Default Title",
            "optionName": "Title"
          }
        ],
        "price": 34.2,
        "requiresComponents": true
      }
    ]
  },
  "synchronous": true
}

result