--- title: products - GraphQL Admin description: >- Retrieves a list of [products](https://shopify.dev/docs/api/admin-graphql/latest/objects/Product) in a store. Products are the items that merchants can sell in their store. Use the `products` query when you need to: - Build a browsing interface for a product catalog. - Create product [searching](https://shopify.dev/docs/api/usage/search-syntax), [sorting](https://shopify.dev/docs/api/admin-graphql/latest/queries/products#arguments-sortKey), and [filtering](https://shopify.dev/docs/api/admin-graphql/latest/queries/products#arguments-query) experiences. - Implement product recommendations. - Sync product data with external systems. The `products` query supports [pagination](https://shopify.dev/docs/api/usage/pagination-graphql) to handle large product catalogs and [saved searches](https://shopify.dev/docs/api/admin-graphql/latest/queries/products#arguments-savedSearchId) for frequently used product queries. The `products` query returns products with their associated metadata, including: - Basic product information (for example, title, description, vendor, and type) - Product options and product variants, with their prices and inventory - Media attachments (for example, images and videos) - SEO metadata - Product categories and tags - Product availability and publishing statuses Learn more about working with [Shopify's product model](https://shopify.dev/docs/apps/build/graphql/migrate/new-product-model/product-model-components). api_version: 2026-01 api_name: admin type: query api_type: graphql source_url: html: 'https://shopify.dev/docs/api/admin-graphql/latest/queries/products' md: 'https://shopify.dev/docs/api/admin-graphql/latest/queries/products.md' --- # products query Retrieves a list of [products](https://shopify.dev/docs/api/admin-graphql/latest/objects/Product) in a store. Products are the items that merchants can sell in their store. Use the `products` query when you need to: * Build a browsing interface for a product catalog. * Create product [searching](https://shopify.dev/docs/api/usage/search-syntax), [sorting](https://shopify.dev/docs/api/admin-graphql/latest/queries/products#arguments-sortKey), and [filtering](https://shopify.dev/docs/api/admin-graphql/latest/queries/products#arguments-query) experiences. * Implement product recommendations. * Sync product data with external systems. The `products` query supports [pagination](https://shopify.dev/docs/api/usage/pagination-graphql) to handle large product catalogs and [saved searches](https://shopify.dev/docs/api/admin-graphql/latest/queries/products#arguments-savedSearchId) for frequently used product queries. The `products` query returns products with their associated metadata, including: * Basic product information (for example, title, description, vendor, and type) * Product options and product variants, with their prices and inventory * Media attachments (for example, images and videos) * SEO metadata * Product categories and tags * Product availability and publishing statuses Learn more about working with [Shopify's product model](https://shopify.dev/docs/apps/build/graphql/migrate/new-product-model/product-model-components). ## ProductConnection arguments [ProductConnection!](https://shopify.dev/docs/api/admin-graphql/latest/connections/ProductConnection) * after * before * first * last * query * reverse * savedSearchId * sortKey *** ## Possible returns * edges * nodes * pageInfo *** ## Examples * ### Retrieve a list of products #### Description Retrieve a list of the first ten products. This example returns the ID and title for each product. #### Query ```graphql query GetProducts { products(first: 10) { nodes { id title } } } ``` #### cURL ```bash curl -X POST \ https://your-development-store.myshopify.com/admin/api/2026-01/graphql.json \ -H 'Content-Type: application/json' \ -H 'X-Shopify-Access-Token: {access_token}' \ -d '{ "query": "query GetProducts { products(first: 10) { nodes { id title } } }" }' ``` #### React Router ```javascript import { authenticate } from "../shopify.server"; export const loader = async ({request}) => { const { admin } = await authenticate.admin(request); const response = await admin.graphql( `#graphql query GetProducts { products(first: 10) { nodes { id title } } }`, ); const json = await response.json(); return json.data; } ``` #### Ruby ```ruby session = ShopifyAPI::Auth::Session.new( shop: "your-development-store.myshopify.com", access_token: access_token ) client = ShopifyAPI::Clients::Graphql::Admin.new( session: session ) query = <<~QUERY query GetProducts { products(first: 10) { nodes { id title } } } QUERY response = client.query(query: query) ``` #### Node.js ```javascript const client = new shopify.clients.Graphql({session}); const data = await client.query({ data: `query GetProducts { products(first: 10) { nodes { id title } } }`, }); ``` #### Response ```json { "products": { "nodes": [ { "id": "gid://shopify/Product/20995642", "title": "Element" }, { "id": "gid://shopify/Product/108828309", "title": "Draft" }, { "id": "gid://shopify/Product/121709582", "title": "Boots" }, { "id": "gid://shopify/Product/440089423", "title": "IPod Nano - 8GB" }, { "id": "gid://shopify/Product/558169081", "title": "Unpublished Boots" }, { "id": "gid://shopify/Product/910489600", "title": "Crafty Shoes" }, { "id": "gid://shopify/Product/912855135", "title": "SEO Boots" } ] } } ``` * ### Retrieve multiple sets of products with a single query #### Description Retrieve the five oldest and newest products by using \[aliases]\(https://shopify.dev/docs/apps/build/graphql/basics/advanced#make-multiple-queries-in-one-request) to name the results. This example returns the ID and title for each product. #### Query ```graphql query { newestProducts: products(first: 5, reverse: true) { edges { node { id title } } } oldestProducts: products(first: 5) { edges { node { id title } } } } ``` #### cURL ```bash curl -X POST \ https://your-development-store.myshopify.com/admin/api/2026-01/graphql.json \ -H 'Content-Type: application/json' \ -H 'X-Shopify-Access-Token: {access_token}' \ -d '{ "query": "query { newestProducts: products(first: 5, reverse: true) { edges { node { id title } } } oldestProducts: products(first: 5) { edges { node { id title } } } }" }' ``` #### React Router ```javascript import { authenticate } from "../shopify.server"; export const loader = async ({request}) => { const { admin } = await authenticate.admin(request); const response = await admin.graphql( `#graphql query { newestProducts: products(first: 5, reverse: true) { edges { node { id title } } } oldestProducts: products(first: 5) { edges { node { id title } } } }`, ); const json = await response.json(); return json.data; } ``` #### Ruby ```ruby session = ShopifyAPI::Auth::Session.new( shop: "your-development-store.myshopify.com", access_token: access_token ) client = ShopifyAPI::Clients::Graphql::Admin.new( session: session ) query = <<~QUERY query { newestProducts: products(first: 5, reverse: true) { edges { node { id title } } } oldestProducts: products(first: 5) { edges { node { id title } } } } QUERY response = client.query(query: query) ``` #### Node.js ```javascript const client = new shopify.clients.Graphql({session}); const data = await client.query({ data: `query { newestProducts: products(first: 5, reverse: true) { edges { node { id title } } } oldestProducts: products(first: 5) { edges { node { id title } } } }`, }); ``` #### Response ```json { "newestProducts": { "edges": [ { "node": { "id": "gid://shopify/Product/912855135", "title": "SEO Boots" } }, { "node": { "id": "gid://shopify/Product/910489600", "title": "Crafty Shoes" } }, { "node": { "id": "gid://shopify/Product/558169081", "title": "Unpublished Boots" } }, { "node": { "id": "gid://shopify/Product/440089423", "title": "IPod Nano - 8GB" } }, { "node": { "id": "gid://shopify/Product/121709582", "title": "Boots" } } ] }, "oldestProducts": { "edges": [ { "node": { "id": "gid://shopify/Product/20995642", "title": "Element" } }, { "node": { "id": "gid://shopify/Product/108828309", "title": "Draft" } }, { "node": { "id": "gid://shopify/Product/121709582", "title": "Boots" } }, { "node": { "id": "gid://shopify/Product/440089423", "title": "IPod Nano - 8GB" } }, { "node": { "id": "gid://shopify/Product/558169081", "title": "Unpublished Boots" } } ] } } ``` * ### Retrieve product IDs from published products #### Description Retrieve the IDs of the first two products that are published to your app. This example returns the product ID and whether the product is published to your app. You must have the \`read\_product\_listings\` access scope to return publication information. #### Query ```graphql query ProductList { products(first: 2) { nodes { publishedOnCurrentPublication id } } } ``` #### cURL ```bash curl -X POST \ https://your-development-store.myshopify.com/admin/api/2026-01/graphql.json \ -H 'Content-Type: application/json' \ -H 'X-Shopify-Access-Token: {access_token}' \ -d '{ "query": "query ProductList { products(first: 2) { nodes { publishedOnCurrentPublication id } } }" }' ``` #### React Router ```javascript import { authenticate } from "../shopify.server"; export const loader = async ({request}) => { const { admin } = await authenticate.admin(request); const response = await admin.graphql( `#graphql query ProductList { products(first: 2) { nodes { publishedOnCurrentPublication id } } }`, ); const json = await response.json(); return json.data; } ``` #### Ruby ```ruby session = ShopifyAPI::Auth::Session.new( shop: "your-development-store.myshopify.com", access_token: access_token ) client = ShopifyAPI::Clients::Graphql::Admin.new( session: session ) query = <<~QUERY query ProductList { products(first: 2) { nodes { publishedOnCurrentPublication id } } } QUERY response = client.query(query: query) ``` #### Node.js ```javascript const client = new shopify.clients.Graphql({session}); const data = await client.query({ data: `query ProductList { products(first: 2) { nodes { publishedOnCurrentPublication id } } }`, }); ``` #### Response ```json { "products": { "nodes": [ { "publishedOnCurrentPublication": true, "id": "gid://shopify/Product/20995642" }, { "publishedOnCurrentPublication": true, "id": "gid://shopify/Product/108828309" } ] } } ``` * ### Retrieve products by their ID using aliases #### Description This example demonstrates using \[aliases]\(https://shopify.dev/docs/apps/build/graphql/basics/advanced#make-multiple-queries-in-one-request) to retrieve multiple products in a single query. #### Query ```graphql query { glasses: product(id: "gid://shopify/Product/108828309") { title description } shoes: product(id: "gid://shopify/Product/910489600") { title description } } ``` #### cURL ```bash curl -X POST \ https://your-development-store.myshopify.com/admin/api/2026-01/graphql.json \ -H 'Content-Type: application/json' \ -H 'X-Shopify-Access-Token: {access_token}' \ -d '{ "query": "query { glasses: product(id: \"gid://shopify/Product/108828309\") { title description } shoes: product(id: \"gid://shopify/Product/910489600\") { title description } }" }' ``` #### React Router ```javascript import { authenticate } from "../shopify.server"; export const loader = async ({request}) => { const { admin } = await authenticate.admin(request); const response = await admin.graphql( `#graphql query { glasses: product(id: "gid://shopify/Product/108828309") { title description } shoes: product(id: "gid://shopify/Product/910489600") { title description } }`, ); const json = await response.json(); return json.data; } ``` #### Ruby ```ruby session = ShopifyAPI::Auth::Session.new( shop: "your-development-store.myshopify.com", access_token: access_token ) client = ShopifyAPI::Clients::Graphql::Admin.new( session: session ) query = <<~QUERY query { glasses: product(id: "gid://shopify/Product/108828309") { title description } shoes: product(id: "gid://shopify/Product/910489600") { title description } } QUERY response = client.query(query: query) ``` #### Node.js ```javascript const client = new shopify.clients.Graphql({session}); const data = await client.query({ data: `query { glasses: product(id: "gid://shopify/Product/108828309") { title description } shoes: product(id: "gid://shopify/Product/910489600") { title description } }`, }); ``` #### Response ```json { "glasses": { "title": "Cool Glasses", "description": "Cool Glasses" }, "shoes": { "title": "Crafty Shoes", "description": "Crafty Shoes" } } ``` * ### Retrieve the first ten products after a given cursor #### Description Retrieve the first ten products after a given cursor and whether there's a subsequent page of results. This example returns the cursor for the next page of results. Learn more about \[pagination]\(https://shopify.dev/docs/api/usage/pagination-graphql). #### Query ```graphql query { products(first: 10, after: "eyJsYXN0X2lkIjoyMDk5NTY0MiwibGFzdF92YWx1ZSI6IjIwOTk1NjQyIn0=") { edges { node { id title handle } cursor } pageInfo { hasNextPage } } } ``` #### cURL ```bash curl -X POST \ https://your-development-store.myshopify.com/admin/api/2026-01/graphql.json \ -H 'Content-Type: application/json' \ -H 'X-Shopify-Access-Token: {access_token}' \ -d '{ "query": "query { products(first: 10, after: \"eyJsYXN0X2lkIjoyMDk5NTY0MiwibGFzdF92YWx1ZSI6IjIwOTk1NjQyIn0=\") { edges { node { id title handle } cursor } pageInfo { hasNextPage } } }" }' ``` #### React Router ```javascript import { authenticate } from "../shopify.server"; export const loader = async ({request}) => { const { admin } = await authenticate.admin(request); const response = await admin.graphql( `#graphql query { products(first: 10, after: "eyJsYXN0X2lkIjoyMDk5NTY0MiwibGFzdF92YWx1ZSI6IjIwOTk1NjQyIn0=") { edges { node { id title handle } cursor } pageInfo { hasNextPage } } }`, ); const json = await response.json(); return json.data; } ``` #### Ruby ```ruby session = ShopifyAPI::Auth::Session.new( shop: "your-development-store.myshopify.com", access_token: access_token ) client = ShopifyAPI::Clients::Graphql::Admin.new( session: session ) query = <<~QUERY query { products(first: 10, after: "eyJsYXN0X2lkIjoyMDk5NTY0MiwibGFzdF92YWx1ZSI6IjIwOTk1NjQyIn0=") { edges { node { id title handle } cursor } pageInfo { hasNextPage } } } QUERY response = client.query(query: query) ``` #### Node.js ```javascript const client = new shopify.clients.Graphql({session}); const data = await client.query({ data: `query { products(first: 10, after: "eyJsYXN0X2lkIjoyMDk5NTY0MiwibGFzdF92YWx1ZSI6IjIwOTk1NjQyIn0=") { edges { node { id title handle } cursor } pageInfo { hasNextPage } } }`, }); ``` #### Response ```json { "products": { "edges": [ { "node": { "id": "gid://shopify/Product/108828309", "title": "Draft", "handle": "draft" }, "cursor": "eyJsYXN0X2lkIjoxMDg4MjgzMDksImxhc3RfdmFsdWUiOiIxMDg4MjgzMDkifQ==" }, { "node": { "id": "gid://shopify/Product/121709582", "title": "Boots", "handle": "boots" }, "cursor": "eyJsYXN0X2lkIjoxMjE3MDk1ODIsImxhc3RfdmFsdWUiOiIxMjE3MDk1ODIifQ==" }, { "node": { "id": "gid://shopify/Product/440089423", "title": "IPod Nano - 8GB", "handle": "ipod-nano" }, "cursor": "eyJsYXN0X2lkIjo0NDAwODk0MjMsImxhc3RfdmFsdWUiOiI0NDAwODk0MjMifQ==" }, { "node": { "id": "gid://shopify/Product/558169081", "title": "Unpublished Boots", "handle": "unpublished_boots" }, "cursor": "eyJsYXN0X2lkIjo1NTgxNjkwODEsImxhc3RfdmFsdWUiOiI1NTgxNjkwODEifQ==" }, { "node": { "id": "gid://shopify/Product/910489600", "title": "Crafty Shoes", "handle": "crappy-shoes" }, "cursor": "eyJsYXN0X2lkIjo5MTA0ODk2MDAsImxhc3RfdmFsdWUiOiI5MTA0ODk2MDAifQ==" }, { "node": { "id": "gid://shopify/Product/912855135", "title": "SEO Boots", "handle": "seo_boots" }, "cursor": "eyJsYXN0X2lkIjo5MTI4NTUxMzUsImxhc3RfdmFsdWUiOiI5MTI4NTUxMzUifQ==" } ], "pageInfo": { "hasNextPage": false } } } ``` * ### Retrieve the first ten products associated with a product type #### Description Retrieve the first ten products associated with the snowboards product type. A \[product type]\(https://help.shopify.com/manual/products/details/product-type) is a category that you can use to group products. Learn more about using \[Shopify API search syntax]\(https://shopify.dev/docs/api/usage/search-syntax) to filter products. #### Query ```graphql query { products(first: 10, query: "product_type:snowboards") { edges { node { title } } } } ``` #### cURL ```bash curl -X POST \ https://your-development-store.myshopify.com/admin/api/2026-01/graphql.json \ -H 'Content-Type: application/json' \ -H 'X-Shopify-Access-Token: {access_token}' \ -d '{ "query": "query { products(first: 10, query: \"product_type:snowboards\") { edges { node { title } } } }" }' ``` #### React Router ```javascript import { authenticate } from "../shopify.server"; export const loader = async ({request}) => { const { admin } = await authenticate.admin(request); const response = await admin.graphql( `#graphql query { products(first: 10, query: "product_type:snowboards") { edges { node { title } } } }`, ); const json = await response.json(); return json.data; } ``` #### Ruby ```ruby session = ShopifyAPI::Auth::Session.new( shop: "your-development-store.myshopify.com", access_token: access_token ) client = ShopifyAPI::Clients::Graphql::Admin.new( session: session ) query = <<~QUERY query { products(first: 10, query: "product_type:snowboards") { edges { node { title } } } } QUERY response = client.query(query: query) ``` #### Node.js ```javascript const client = new shopify.clients.Graphql({session}); const data = await client.query({ data: `query { products(first: 10, query: "product_type:snowboards") { edges { node { title } } } }`, }); ``` #### Response ```json { "products": { "edges": [ { "node": { "title": "Element" } }, { "node": { "title": "Draft" } } ] } } ``` * ### Retrieve the first ten products updated after a specified date #### Description Retrieve the first ten products updated after 2019-12-01. This example returns the ID and updated date for each product. Learn more about using \[Shopify API search syntax]\(https://shopify.dev/docs/api/usage/search-syntax) to filter products. #### Query ```graphql query { products(first: 10, query: "updated_at:>2019-12-01") { edges { node { id updatedAt } } } } ``` #### cURL ```bash curl -X POST \ https://your-development-store.myshopify.com/admin/api/2026-01/graphql.json \ -H 'Content-Type: application/json' \ -H 'X-Shopify-Access-Token: {access_token}' \ -d '{ "query": "query { products(first: 10, query: \"updated_at:>2019-12-01\") { edges { node { id updatedAt } } } }" }' ``` #### React Router ```javascript import { authenticate } from "../shopify.server"; export const loader = async ({request}) => { const { admin } = await authenticate.admin(request); const response = await admin.graphql( `#graphql query { products(first: 10, query: "updated_at:>2019-12-01") { edges { node { id updatedAt } } } }`, ); const json = await response.json(); return json.data; } ``` #### Ruby ```ruby session = ShopifyAPI::Auth::Session.new( shop: "your-development-store.myshopify.com", access_token: access_token ) client = ShopifyAPI::Clients::Graphql::Admin.new( session: session ) query = <<~QUERY query { products(first: 10, query: "updated_at:>2019-12-01") { edges { node { id updatedAt } } } } QUERY response = client.query(query: query) ``` #### Node.js ```javascript const client = new shopify.clients.Graphql({session}); const data = await client.query({ data: `query { products(first: 10, query: "updated_at:>2019-12-01") { edges { node { id updatedAt } } } }`, }); ``` #### Response ```json { "products": { "edges": [ { "node": { "id": "gid://shopify/Product/440089423", "updatedAt": "2021-12-01T12:14:52Z" } } ] } } ``` * ### Retrieve the ten most recently created products #### Description Retrieve the ten most recently created products and the \[publication]\(https://shopify.dev/docs/api/admin-graphql/latest/objects/Publication) information for each product. You must have the \`read\_product\_listings\` access scope to return publication information. #### Query ```graphql query { products(first: 10, reverse: true) { edges { node { id title handle resourcePublicationOnCurrentPublication { publication { id } publishDate isPublished } } } } } ``` #### cURL ```bash curl -X POST \ https://your-development-store.myshopify.com/admin/api/2026-01/graphql.json \ -H 'Content-Type: application/json' \ -H 'X-Shopify-Access-Token: {access_token}' \ -d '{ "query": "query { products(first: 10, reverse: true) { edges { node { id title handle resourcePublicationOnCurrentPublication { publication { id } publishDate isPublished } } } } }" }' ``` #### React Router ```javascript import { authenticate } from "../shopify.server"; export const loader = async ({request}) => { const { admin } = await authenticate.admin(request); const response = await admin.graphql( `#graphql query { products(first: 10, reverse: true) { edges { node { id title handle resourcePublicationOnCurrentPublication { publication { id } publishDate isPublished } } } } }`, ); const json = await response.json(); return json.data; } ``` #### Ruby ```ruby session = ShopifyAPI::Auth::Session.new( shop: "your-development-store.myshopify.com", access_token: access_token ) client = ShopifyAPI::Clients::Graphql::Admin.new( session: session ) query = <<~QUERY query { products(first: 10, reverse: true) { edges { node { id title handle resourcePublicationOnCurrentPublication { publication { id } publishDate isPublished } } } } } QUERY response = client.query(query: query) ``` #### Node.js ```javascript const client = new shopify.clients.Graphql({session}); const data = await client.query({ data: `query { products(first: 10, reverse: true) { edges { node { id title handle resourcePublicationOnCurrentPublication { publication { id } publishDate isPublished } } } } }`, }); ``` #### Response ```json { "products": { "edges": [ { "node": { "id": "gid://shopify/Product/912855135", "title": "SEO Boots", "handle": "seo_boots", "resourcePublicationOnCurrentPublication": null } }, { "node": { "id": "gid://shopify/Product/910489600", "title": "Crafty Shoes", "handle": "crappy-shoes", "resourcePublicationOnCurrentPublication": null } }, { "node": { "id": "gid://shopify/Product/558169081", "title": "Unpublished Boots", "handle": "unpublished_boots", "resourcePublicationOnCurrentPublication": null } }, { "node": { "id": "gid://shopify/Product/440089423", "title": "IPod Nano - 8GB", "handle": "ipod-nano", "resourcePublicationOnCurrentPublication": null } }, { "node": { "id": "gid://shopify/Product/121709582", "title": "Boots", "handle": "boots", "resourcePublicationOnCurrentPublication": null } }, { "node": { "id": "gid://shopify/Product/108828309", "title": "Draft", "handle": "draft", "resourcePublicationOnCurrentPublication": { "publication": { "id": "gid://shopify/Publication/762454635" }, "publishDate": "2005-01-02T00:00:00Z", "isPublished": true } } }, { "node": { "id": "gid://shopify/Product/20995642", "title": "Element", "handle": "element", "resourcePublicationOnCurrentPublication": null } } ] } } ``` * ### Retrieve the total inventory and price range of products #### Description Retrieve the total inventory and price range of three products using a fragment. The example returns the minimum and maximum variant prices and total inventory count for each product. Learn more about \[fragments]\(https://shopify.dev/docs/apps/build/graphql/basics/advanced#inline-fragments). #### Query ```graphql query { Glasses: product(id: "gid://shopify/Product/20995642") { ...productInformation } Shoes: product(id: "gid://shopify/Product/910489600") { ...productInformation } Bracelet: product(id: "gid://shopify/Product/108828309") { ...productInformation } } fragment productInformation on Product { totalInventory priceRangeV2 { minVariantPrice { amount } maxVariantPrice { amount } } } ``` #### cURL ```bash curl -X POST \ https://your-development-store.myshopify.com/admin/api/2026-01/graphql.json \ -H 'Content-Type: application/json' \ -H 'X-Shopify-Access-Token: {access_token}' \ -d '{ "query": "query { Glasses: product(id: \"gid://shopify/Product/20995642\") { ...productInformation } Shoes: product(id: \"gid://shopify/Product/910489600\") { ...productInformation } Bracelet: product(id: \"gid://shopify/Product/108828309\") { ...productInformation } } fragment productInformation on Product { totalInventory priceRangeV2 { minVariantPrice { amount } maxVariantPrice { amount } } }" }' ``` #### React Router ```javascript import { authenticate } from "../shopify.server"; export const loader = async ({request}) => { const { admin } = await authenticate.admin(request); const response = await admin.graphql( `#graphql query { Glasses: product(id: "gid://shopify/Product/20995642") { ...productInformation } Shoes: product(id: "gid://shopify/Product/910489600") { ...productInformation } Bracelet: product(id: "gid://shopify/Product/108828309") { ...productInformation } } fragment productInformation on Product { totalInventory priceRangeV2 { minVariantPrice { amount } maxVariantPrice { amount } } }`, ); const json = await response.json(); return json.data; } ``` #### Ruby ```ruby session = ShopifyAPI::Auth::Session.new( shop: "your-development-store.myshopify.com", access_token: access_token ) client = ShopifyAPI::Clients::Graphql::Admin.new( session: session ) query = <<~QUERY query { Glasses: product(id: "gid://shopify/Product/20995642") { ...productInformation } Shoes: product(id: "gid://shopify/Product/910489600") { ...productInformation } Bracelet: product(id: "gid://shopify/Product/108828309") { ...productInformation } } fragment productInformation on Product { totalInventory priceRangeV2 { minVariantPrice { amount } maxVariantPrice { amount } } } QUERY response = client.query(query: query) ``` #### Node.js ```javascript const client = new shopify.clients.Graphql({session}); const data = await client.query({ data: `query { Glasses: product(id: "gid://shopify/Product/20995642") { ...productInformation } Shoes: product(id: "gid://shopify/Product/910489600") { ...productInformation } Bracelet: product(id: "gid://shopify/Product/108828309") { ...productInformation } } fragment productInformation on Product { totalInventory priceRangeV2 { minVariantPrice { amount } maxVariantPrice { amount } } }`, }); ``` #### Response ```json { "Glasses": { "totalInventory": 19, "priceRangeV2": { "minVariantPrice": { "amount": "10.0" }, "maxVariantPrice": { "amount": "15.0" } } }, "Shoes": { "totalInventory": 4000, "priceRangeV2": { "minVariantPrice": { "amount": "100.0" }, "maxVariantPrice": { "amount": "100.0" } } }, "Bracelet": { "totalInventory": 1, "priceRangeV2": { "minVariantPrice": { "amount": "10.0" }, "maxVariantPrice": { "amount": "10.0" } } } } ```