ShopifyApp.installationLink field is what you are interested in querying:12345678910query GenerateInstallationLink { shopifyApp { installationLink( storeCanonicalDomain: "my-shopify-partner.com" ) { canonicalDomain url } } }
storeCanonicalDomain input argument.url field contains the installation link. You should share this with your merchant, and ask them to open it in their browser.12345678910{ "data": { "shopifyApp": { "installationLink": { "canonicalDomain": "my-shopify-partner.myshopify.com", "url": "https://my-shopify-partner.myshopify.com/admin/oauth/authorize?..." } } } }
SHOPIFY_APP_CONNECTED webhook. Receipt of this event is enough to confirm that the merchant has successfully installed the app and that you can now access their products via the Sync API. If the merchant ever uninstalls the app or revokes your access to their store then a corresponding SHOPIFY_APP_DISCONNECTED webhook will be fired.integratedShopifyStore query. This query will return null if you do not have access to the store through the Sync API, and this can be used to determine whether the merchant has installed the app.productsByDomainV2 will be the most appropriate API operation to use as you likely won't know any product IDs upfront. The following query would return product catalog data from Gymshark's USA store, assuming you have access to it:123456789101112131415query GetGymsharkProducts { productsByDomainV2( input: { domain: "gymsharkusa.myshopify.com" } pagination: { # Note: Pagination is limited to 100 items per page limit: 100 offset: 0 } ) { id title } }
productsByDomainV2 to return product data that you do not have access to through the Sync API. This happens in cases where another developer has added the products to our Sell Anything API, but you do not have access to the Sync API for that store. This is why it is important to verify installation status before attempting to access product data.