A space to discuss GraphQL queries, mutations, troubleshooting, throttling, and best practices.
When creating a product using the ProductCreate graphQL mutation the product does not get added to the sales channels even though the product status is set to ACTIVE.
From the documentation:
My understanding of the above text is that if the product status is active during creation of the product it should automatically be added to all channels.
Requiring an additional request to publish the product after-the-fact is counter-intuitive and increases network load, in addition to having a different result as with the rest API which does in fact publish the product to all channels when the status is active.
Any help on confirming that this is a bug?
Solved! Go to the solution
This is an accepted solution.
Hi,
Sorry for not being explicit it appeared you had it correct.
1) You can currently publish a product to the online store via the deprecated 'published' field on the productCreate mutation
2) You can publish to any sales channel with the PublishablePublish mutation.
To learn more visit the Shopify Help Center or the Community Blog.
Hi there!
tldr; is for the GraphQL API, this is the intended functionality, you will have to make two mutations.
So when Product Status was released, it was intended that to decouple the status from the publishing of products to sales channels.
Decoupling publishing from status allows a lot more flexibility for merchants when they are creating their products.
You will also notice with the GraphQL API creating a product and publishing a product have two different scopes required.
I agree that the current description of the Active status is misleading, so you should see updated docs for that coming soon.
To learn more visit the Shopify Help Center or the Community Blog.
Hi Lizk,
thanks for the reply and the explanation. I understand wanting to decouple and quite often it makes sense, but also there are times where it's simply overcomplicating, which I believe is what your team are doing in this case. Requiring two http requests to perform an operation where only one is required for the rest api is a step backwards. The now deprecated options in the previous version of the mutation make more sense as well. Having the option create a product and publish it to all available channels at the same time. The way the .mutation is now requires also knowing th id's of the channels you wish to publish the product. So if we haven't stored this previously what would would take a single http request using the rest api would take a minimum of 3 http requests with graphQL. Furthermore the now deprecated options are replaced with publishablepublish which apparently is only available for plus merchants or are we supposed to use productPublish..oh wait thats also only available for plus merchants.. so what mutation are we supposed to use then to publish the newly created product that's active but actually not?
So at the end of the day I can create a product, via graphql, but can't publish it to the available channels on the merchants shop? Or am I missing something, or has the dev team dropped the ball along the way trying to "decouple" everything? I guess I will stick with the REST API until the growing pains with graphql are over. Granted it does make some operations easier but others like this are in my opinion just not really thought through.
Regards
Gary
This is all really valuable feedback, that I can forward on to the the team! Thanks
To learn more visit the Shopify Help Center or the Community Blog.
Hi Lizk,
Unfortunately, I didnt get any feedback to the question of how I publish a product via graphql.
Cheers,
Gary
This is an accepted solution.
Hi,
Sorry for not being explicit it appeared you had it correct.
1) You can currently publish a product to the online store via the deprecated 'published' field on the productCreate mutation
2) You can publish to any sales channel with the PublishablePublish mutation.
To learn more visit the Shopify Help Center or the Community Blog.
Hello, I have a very similar problem. When I create and publish a product using ShopifySharp c#/.NET library, it gets only published to Online Store channel, but not the Buy Button channel.
Is there a way to do it in ShopifySharp (if anyone's aware of this) to publish to all channels, and/or is there an alternative in Rest API (I couldn't find anything similar to PublishablePublish in Rest API)? We don't use GraphQL...
Thanks! S.
Is there a way to do this with the REST Admin API?
Yes if you use the standard product create rest api endpoint the product will automatically be added to all channels.
https://shopify.dev/api/admin-rest/2021-10/resources/product#post-products
Hmmm, that's not the behavior that I am seeing. I was able to publish a product, but it was only on the "Online Store" sales channel.
With the rest API? If so then the behavior has changed, but I don't see any indication of that in the change log. We have an app, early 2021, where we use the rest api to create a product, and it added it to all sales channels.
I just tested this and can confirm that it only now adds it to the online store, and there does not appear to be a way to publish the product to all sales channels via the product rest api!
@lizk can you please confirm that there is no way to add a product to a sales channel via the rest api?
Yes I'm using the `/admin/api/2021-10/products.json` endpoint.
So I tried this again. I thought that maybe I needed to provide some additional fields on the product data, so I tried it with data that looked like this:
```
{
"product": {
"body_html": "This is a test product.",
"title": "Test Product - Single",
"status": "active",
"published_scope": "global"
}
}
```
I hadn't provided the `status` and `published_scope` field before. Still, this made no difference. The product was only published to the "Online Store" sale channel.
Hi @lizk
Regarding your note that "You can publish to any sales channel with the PublishablePublish mutation." However, the shopify.dev documentation says that this mutation "requires `write_publications` access scope, but this scope is currently available only to private apps installed on Shopify Plus stores." Does this mean that public apps cannot use this mutation to publish to channels? If not, how can we publish to channels on product update?
Why the PublishablePublish mutation cannot be performed into a bulkOperationRunMutation?
Seems that this action cannot be perfomed in bulk: https://shopify.dev/api/usage/bulk-operations/imports
Once we cannot publish anymore with productCreate/Update (deprecated) it should be useful to run this mutation in bulk
So over a year later and the answer is still to use deprecated fields? Seems like a bad idea to deprecate a feature when it is the only way to achieve something.
Midway through 2024, and this issue still persists