Problems setting read-only metafields in async ProductSet

I’m running into issues trying to set read-only read-only metafields in asynchronous ProductSet calls.

For background:

  • API version is 2025-10.
  • ID Metafield definition exists and allows us to use ProductSet to insert/update (upsert) in a single operation.
  • I’m using bulk operations on files comprised of multiple records in JSONL format.
  • Files are uploaded, the mutation is run, and I’m waiting for the bulk operation to finish.
  • I can’t get the “metafields” property to work.

Here’s an example record from the file:

{"identifier":{"customId":{"key":"id","value":"1632"}},"input":{"title":"Product #1632","metafields":[{"key":"brand","value":"ACME"}]}}

Here’s the mutation:

mutation call($identifier: ProductSetIdentifiers, $input: ProductSetInput!) { productSet(identifier: $identifier, input: $input) { product { id } userErrors { code message field } } }

Here’s the complete response I get:

{"data":{"productSet":{"product":null,"userErrors":[{"code":"METAFIELD_MISMATCH","message":"The input argument `metafields` (if present) must contain the `customId` value.","field":["input"]}]}},"__lineNumber":0}

I’ve tried adding a “customId” node to the metafield:

{"identifier":{"customId":{"key":"id","value":"1632"}},"input":{"title":"Product #1632","metafields":[{"customId":{"key":"brand","value":"ACME"}}]}}

And I get this error:

{"data":{"bulkOperationRunMutation":{"bulkOperation":null,"userErrors":[{"message":"Invalid Bulk Mutation Field - Variable $input of type ProductSetInput! was provided invalid value for metafields.0.customId (Field is not defined on MetafieldInput)","field":null}]}},"extensions":{"cost":{"requestedQueryCost":10,"actualQueryCost":10,"throttleStatus":{"maximumAvailable":2000.0,"currentlyAvailable":1990,"restoreRate":100.0}}}}

There is zero documentation available indicating:

  • How to use a “customId” (UniqueMetafieldValueInput) node on the MetafieldInput object.
  • How to resolve METAFIELD_MISMATCH errors on the ProductSet async call.

The error indicates this should be possible. I think I’m probably missing something in the mutation definition… but I’m currently at a loss.

Note: I’m not looking to just set product-level metafields. I’ve created read-only, pinned product-level metafield definitions that are visible in the admin. The “id” metafield is being set properly and I want to set the other read-only metafields, as well.

Please let me know what I’m doing wrong!

Thanks in advance.

@Paige-Shopify You were extremely helpful re: another issue I posted a few weeks ago. Would it be possible to put this issue in front of someone who can help on the staff side?