An entity that represents details of an asynchronous
[ProductSet](https://shopify.dev/api/admin-graphql/current/mutations/productSet) mutation.
By querying this entity with the
[productOperation](https://shopify.dev/api/admin-graphql/current/queries/productOperation) query
using the ID that was returned
[when the product was created or updated](https://shopify.dev/api/admin/migrate/new-product-model/sync-data#create-a-product-with-variants-and-options-asynchronously),
this can be used to check the status of an operation.
The `status` field indicates whether the operation is `CREATED`, `ACTIVE`, or `COMPLETE`.
The `product` field provides the details of the created or updated product.
The `userErrors` field provides mutation errors that occurred during the operation.
productSet
Creates or updates a product in a single request.
Use this mutation when syncing information from an external data source into Shopify.
When using this mutation to update a product, specify that product's `id` in the input.
Any list field (e.g.
[collections](https://shopify.dev/api/admin-graphql/current/input-objects/ProductSetInput#field-productsetinput-collections),
[metafields](https://shopify.dev/api/admin-graphql/current/input-objects/ProductSetInput#field-productsetinput-metafields),
[variants](https://shopify.dev/api/admin-graphql/current/input-objects/ProductSetInput#field-productsetinput-variants))
will be updated so that all included entries are either created or updated, and all existing entries not
included will be deleted.
All other fields will be updated to the value passed. Omitted fields will not be updated.
When run in synchronous mode, the `productSet` mutation has an input limit of 100 variants. If you anticipate
any of your use cases requiring support for more than 100 variants, please use the mutation in asynchronous
mode (default).
When run in synchronous mode, you will get the product back in the response.
In asynchronous mode, you will instead get a
[ProductSetOperation](https://shopify.dev/api/admin-graphql/current/objects/ProductSetOperation)
object back. You can then use the
[productOperation](https://shopify.dev/api/admin-graphql/current/queries/productOperation) query to
retrieve the updated product data. This query uses the `ProductSetOperation` object to
check the status of the operation and to retrieve the details of the updated product and its variants.
If you need to update a subset of variants, use one of the bulk variant mutations:
- [productVariantsBulkCreate](https://shopify.dev/api/admin-graphql/current/mutations/productVariantsBulkCreate)
- [productVariantsBulkUpdate](https://shopify.dev/api/admin-graphql/current/mutations/productVariantsBulkUpdate)
- [productVariantsBulkDelete](https://shopify.dev/api/admin-graphql/current/mutations/productVariantsBulkDelete)
If you need to update options, use one of the product option mutations:
- [productOptionsCreate](https://shopify.dev/api/admin-graphql/current/mutations/productOptionsCreate)
- [productOptionUpdate](https://shopify.dev/api/admin-graphql/current/mutations/productOptionUpdate)
- [productOptionsDelete](https://shopify.dev/api/admin-graphql/current/mutations/productOptionsDelete)
- [productOptionsReorder](https://shopify.dev/api/admin-graphql/current/mutations/productOptionsReorder)
See our guide to
[sync product data from an external source](https://shopify.dev/api/admin/migrate/new-product-model/sync-data)
for more.