Skip to main content

Product

A purchasable article tracked in the catalog.

type Product implements Node {
id: ID!
availableStock: Int
description: String
gtin: String
lastSupplierOrderAt: DateTime
manufacturerNumber: String
name: String
openSupplierOrderQuantity: Int!
parentId: ID
physicalStock: Int
price: [Price!]!
productNumber: String!
purchasePrices: [Price!]
reorderPoint: Int
reservedStock: Int
shopifyVariants: JSON!
stockNotAvailableForSale: Int
targetMaximumQuantity: Int
canonicalProduct: Product
children(
first: Int = 10
after: String
filter: ProductFilterInput
): ProductConnection
orderLineItems(
first: Int = 10
after: String
filter: OrderLineItemFilterInput
): OrderLineItemConnection
parent: Product
stockLocationConfigurations(
first: Int = 10
after: String
): ProductStockLocationConfigurationConnection
tags(
first: Int = 10
after: String
filter: TagFilterInput
): TagConnection
warehouseConfigurations(
first: Int = 10
after: String
): ProductWarehouseConfigurationConnection
}

Fields​

Product.id ● ID! non-null scalar​

Global identifier for this entity.

Product.availableStock ● Int scalar​

Stock available for sale — physical stock minus open orders that have not yet been shipped. See physicalStock / reservedStock for the breakdown.

Product.description ● String scalar​

Long description.

Product.gtin ● String scalar​

Global Trade Item Number (GTIN).

Product.lastSupplierOrderAt ● DateTime scalar​

Timestamp of the most recent supplier order containing this product (any state).

Product.manufacturerNumber ● String scalar​

Manufacturer's part number (MPN), as printed on the article or in supplier catalogs.

Product.name ● String scalar​

Display name.

Product.openSupplierOrderQuantity ● Int! non-null scalar​

Units that are on open supplier orders but have not yet been received against any goods receipt. Reflects expected incoming stock.

Product.parentId ● ID scalar​

ID of the parent product when this row is a variant.

Product.physicalStock ● Int scalar​

Total units actually counted in all warehouses, regardless of allocation. Updated by goods receipts, stockings and stock corrections.

Product.price ● [Price!]! non-null object​

Sales price of one unit, one entry per currency the price is maintained in. Tiered prices and customer-group-specific prices are not part of this field.

Product.productNumber ● String! non-null scalar​

Public SKU. Unique across the catalog. Used in URLs, exports and POS workflows.

Product.purchasePrices ● [Price!] list object​

Cost price of one unit, one entry per currency the price is maintained in. Kept in sync both ways with the default supplier's ProductSupplierConfiguration.purchasePrices while that supplier's currency is the system default currency. For a default supplier in another currency it is only copied from the supplier's price, converted into the system default currency at the exchange rate of that moment, and a price written here is not carried over to the supplier. A price agreed with any other supplier only exists on that configuration row.

Product.reorderPoint ● Int scalar​

Stock level at or below which the product is considered to need reordering. Applies across all warehouses; per-warehouse thresholds are configured separately on the product-warehouse configuration.

Product.reservedStock ● Int scalar​

Units already promised to open orders or other outbound processes. Subtracted from physicalStock to derive what is still sellable.

Product.shopifyVariants ● JSON! non-null scalar​

Shopify product variants the product is synced with, one per connected Shopify store: a list of objects with the keys productId (GID of the Shopify product, e.g. gid://shopify/Product/8123) and variantId (GID of the Shopify product variant, e.g. gid://shopify/ProductVariant/9123, or null when the product is not synced as a variant). Empty for a product that is not synced with Shopify.

Product.stockNotAvailableForSale ● Int scalar​

Units excluded from the availability calculation (e.g. stored in warehouses flagged as not selling). Always smaller than or equal to physicalStock.

Product.targetMaximumQuantity ● Int scalar​

Target maximum stock quantity used as the replenish-to level for the product, or null when none is set.

Product.canonicalProduct ● Product object​

Product.children ● ProductConnection object​

Product.children.first ● Int scalar​
Product.children.after ● String scalar​
Product.children.filter ● ProductFilterInput input​

Product.orderLineItems ● OrderLineItemConnection object​

Product.orderLineItems.first ● Int scalar​
Product.orderLineItems.after ● String scalar​
Product.orderLineItems.filter ● OrderLineItemFilterInput input​

Product.parent ● Product object​

Product.stockLocationConfigurations ● ProductStockLocationConfigurationConnection object​

Product.stockLocationConfigurations.first ● Int scalar​
Product.stockLocationConfigurations.after ● String scalar​

Product.tags ● TagConnection object​

Product.tags.first ● Int scalar​
Product.tags.after ● String scalar​
Product.tags.filter ● TagFilterInput input​

Product.warehouseConfigurations ● ProductWarehouseConfigurationConnection object​

Product.warehouseConfigurations.first ● Int scalar​
Product.warehouseConfigurations.after ● String scalar​

Interfaces​

Node interface​

Any entity that can be loaded by its global id through the node(id: ID!) query.

Returned By​

product query ● setProductReorderConfiguration mutation

Member Of​

Batch object ● FulfillmentLineItem object ● FulfillmentOrderLineItem object ● GoodsReceiptLineItem object ● OrderLineItem object ● Product object ● ProductEdge object ● ProductSupplierConfiguration object ● ProductWarehouseConfiguration object ● QuoteLineItem object ● Stock object ● StockMovement object ● SupplierOrderLineItem object ● WarehouseStock object

Webhook topics​

TopicRequired scopeFires when
product/out-of-available-stockproducts:readThe available stock of a product — what customers can still buy — drops from positive to zero or below. A product whose warehouses are empty fires product/out-of-stock as well. A product that is restocked and runs out again fires again.
product/out-of-stockproducts:readThe physical stock of a product — the units actually counted in the warehouses — drops from positive to zero. A product that is restocked and runs out again fires again. Stock that is still in the warehouse but no longer sellable is product/out-of-available-stock instead.

The webhooks guide explains how to subscribe to a topic and verify the notifications it sends.