Hey @Thresher,
Just wanted to update you to let you know that this has now been fixed for the API release candidate version for development, and will be included in the upcoming stable version 2019-07 for production.
Let me know if you run into any further issues!
... View more

Hey @Alessio1,
Just wanted to circle back on this. The reason the `products/create` webhook sometimes doesn't include the product images info is because it takes longer for the image data to process than it does for the webhook to fire.
To remedy this, you should also subscribe to the `products/update` webhook which will fire when the product images have processed and have been properly tied to the Product object.
... View more

Hey @cjquinn, can you please provide me with some of the `X-Request-Id` response headers for the API order create calls which aren't decrementing properly? It'll allow me to have a closer look at this. Thanks!
... View more

Hey Jason,
The new navigation bar is part of the upgraded Embedded App SDK, and the previous design has now been deprecated.
This change was made to allow for a more uniform navigation experience across multiple devices among other things. It's possible that your own app is still tied to the legacy SDK, but all other embedded apps will have this new navigation bar structure.
... View more

Hey Gerwin,
Unfortuntely at this time, it's only possible to associate one PriceRule to each DiscountCode.
That being said, I'll pass along your feedback to our development team, and will encourage you to keep an eye on our API Changelog for future updates about changes to the Discounts API.
... View more

Hey there,
These resources will be sorted by their ID in ascending order.
Therefore, you shouldn't rely on the order in which you made the call when mapping the objects, but instead on their ID.
... View more

Hey there,
I took a look at the gist you posted as well as the product inventory history, and see that the stock was decremented when order #1019 was placed.
What data were you referencing for the inventory level after the order was placed?
... View more

Hey @power777 - I agree that the current overlap between some webhook subscription topics makes it challenging to process the data Shopify sends out.
We're working on improving this process, however, when it comes to deprecations, it's not easy to just "shut off" the behaviour as many partners are currently relying on the `products/update` webhook to fire on inventory adjustments. That being said, I'm going to pass along your feedback to our development team so they're aware of the pain point, and so they can see what changes can be made going forward to help deal with it.
... View more

Yes, Shopify refers to these groupings of items as `collections`.
Your question doesn't necessarily have one specific answer. Merchants are free to organize their products as they like, and also choose how they are displayed, which often comes down to their theme implementation.
In general, both CustomCollections and SmartCollections are used to organize products into specific groupings in the back-end. The theme then contains the logic regarding what collections to display for each menu/sub-menu item.
For example, some Shopify merchant might have one collection where they display all of their men's jeans (https://www.someapparelcompany.com/collections/mens-jeans) which can be accessed by going to `Mens > Jeans` in their navigation menu. They may also have another more specific collection for just men's skinny jeans (https://www.someapparelcompany.com/collections/mens-skinny-jeans) which can be accessed by going to `Mens > Jeans > Skinny` in their navigation menu.
Unfortunately, we don't currently have a Navigation API which lets you obtain menu items programmatically. However you are able to retrieve a list of all products that exist in each collection via the Collect API.
... View more

Hey @Emmanuel_Flossi,
GraphQL can be significantly more performant than REST in many use-cases, I would encourage you to give it a try.
This doc describes it in details, but since the breakdown is based on the cost of a query and not simply the quantity of calls being made, you're able to only request the object properties relevant to you. This greatly improves the efficiency of your API calls and maximizes your call rate.
... View more

Hey @Rafay ,
I tested the behaviour and can confirm what you're experiencing. Since a value change on the variants `inventory_quantity` and `old_inventory_quantity` fields still updates the `updated_at` property, the `products/update` webhook is triggered.
But as mentioned before, this is a deprecated field, meaning we don't know what support will look like for it going forward. It also doesn't provide you with information such as the location where the inventory was sold from, which is why we recommend that you instead use the `inventory_levels/update` webhook.
... View more

Hey there,
If you are now running your app code on a server instead of locally, you can update the links associated with your app in the Partners Dashboard.
You can update them by selecting the specific app in your dashboard and then choosing the "App setup" tab. The "App URL" and associated " Whitelisted redirection URL(s)" are what you would need to update.
... View more

Hey Adam,
Are you looking to accomplish this via a private app?
If so, this would be possible using the GraphQL `publishablePublish` mutation which allows you to pass in a future `publishDate` for a given channel. The mutation requires the `write_publications` access scope, which can be granted for private apps and for some non-Sales Channel public apps.
If you can explain to me exactly how you're looking accomplish this and with what apps, I can provide some more guidance. Thanks!
... View more

Hey there,
When the checkout is complete, the `order` property will contain the ID, name, and status page URL of the associated order, prior to that, it will default to `null`.
That being said, it's possible for a checkout to be complete, but not technically marked as 'paid'. This is because you can have a transaction authorized, but not yet captured. So you can take a look at the list of transactions associated with the order which is also provided in the checkout payload to make sure that payment is complete. Alternatively, you can use the order ID provided to you to query the `/admin/orders.json` endpoint to retrieve the `financial_status` of the order.
... View more

Hey Peter,
What exactly are you referring to by "categories". Do you mean the `product_type`?
The `/admin/custom_collections.json` endpoint returns a payload with the following structure (in an array):
{
"id": 841564295,
"handle": "ipods",
"title": "IPods",
"updated_at": "2008-02-01T19:00:00-05:00",
"body_html": "<p>The best selling ipod ever</p>",
"published_at": "2008-02-01T19:00:00-05:00",
"sort_order": "manual",
"template_suffix": null,
"published_scope": "web",
"admin_graphql_api_id": "gid://shopify/Collection/841564295",
"image": {
"created_at": "2019-05-09T13:28:36-04:00",
"alt": "iPod Nano 8gb",
"width": 123,
"height": 456,
"src": "https://cdn.shopify.com/s/files/1/0006/9093/3842/collections/ipod_nano_8gb.jpg?v=1557422916"
} }
If you could specify exactly what field you're looking for on what object, I can do some digging to see if a bulk query is available.
... View more

Hey Emmanuel,
There currently isn't a REST endpoint where this is possible, so you would have to conduct this filtering client side.
Edit: However, this is currently possible using the Shop object on our GraphQL API, as shown in these docs.
{ shop { productTypes } }
I don't understand what you mean by "do the same thing for checking the count". The `admin/products/counts.json` endpoint currently returns the count of total products on the shop. Are you looking to filter this result by product type as well?
... View more

Ah yes, sorry for misunderstanding, I didn't realize you were looking to update OrderRisk values and thought you were just looking to query them.
The REST and GraphQL API are not currently at full parity, but we're working towards bringing them to parity in the future. This means that for the time being, for certain use-cases you may be required to use both REST and GraphQL to accomplish what it is you're looking to do. As is the case with updating an Orders Risk Level.
I would recommend subscribing to our API changelog for future announcements about changes to the GraphQL API.
... View more

Hey Orhan,
Are you still receiving the 500 error? Typically, we recommend that you retry the query after some sort of set time period in case the issue is database related.
The syntax with the quotation marks is the correct syntax.
If you're also able to provide me with the 'X-Request-Id' header for the failing query I can dig in deeper.
... View more

Hey Ganesh,
Sorry for the hold-up, I've been out of the office and unfortunately can't find that Request Id in our logs anymore.
Do you have a more recent example? I'll dig in to see if we can find a solution.
... View more

Hey there,
1. Yes, when using GraphQL to create an order, you must first use the draftOrderCreate mutation and then the draftOrderComplete mutation.
2. You can find the OrderRisk object under our Objects documentation linked here. It provides you with properties such as the OrderRiskLevel, display status, and the risk message that's shown to the merchant in the Shopify admin.
... View more

Hey Peter,
It sounds like you may be including header cookies in your request, which is causing Shopify to block the request and redirect you to the admin.
What tool are you using to make the API call? I would double check to make sure you have all header cookies removed using a tool such as Postman, and then trying to make the API call again.
... View more

Hey Zelf,
Even if you have a maximuAvailabe value which is greater than 1000, you are limited to a query cost of 1000 for a single request as documented here.
Your best bet would be to split up the request in two parts, such that each costs less than 1000 and make them in succession. You would then have to wait for your bucket to refill at the restoreRate you are given.
... View more

Hey there,
There shouldn't be any caching taking place for the GraphQL query that you're running. I attempted to test the same flow using the Shopify GraphiQL app and didn't receive any outdated customers.
Can you try to make the same set of queries outside of your Apollo client to see if you experience the same behaviour? It's possible that there's some caching taking place with Apollo.
If not, we can take a look at other possible causes.
... View more

Hey Omar,
I've checked in with our Apps QA team and they confirmed that you should have received an e-mail with the status of your app submission.
Please review the information in the e-mail and use it to get in touch with the team if you have any questions.
... View more

Hey there,
If you're creating the webhooks via the shop admin, they won't appear in your API GET request.
This is because webhook subscriptions are scoped only to the app that they're registered to. So those made in the admin, are only visible in the admin. If you want to create some via the API, you can do so with the following request, which is also shown in the documentation you linked:
POST /admin/api/2019-04/webhooks.json {
"webhook" : {
"topic" : "orders/create" ,
"address" : "https://whatever.hostname.com/" ,
"format" : "json"
}
}
The webhooks created this way using your API key and secret will then be returned when you query the `/admin/webhooks.json` endpoint.
... View more