Products — Graph Reference
Public Graph nodes, fields, edges, and sets contributed by the Products app. Use these as the basis for your requires.graph declarations — see Declaring App Dependencies.
Sets
| Set | Node |
|---|---|
products | asset.product |
priceLists | asset.priceList |
prices | asset.price |
requires:
graph:
sets:
products: { node: asset.product }
priceLists: { node: asset.priceList }
prices: { node: asset.price }asset.product
Default asset number prefix: PROD. Each product can have multiple SKUs (subitems) and multiple prices across price lists and currencies.
Fields
| Field | Type | Notes |
|---|---|---|
name | text | Localizable. Has dimension locale. |
vatClass | enum | VAT class for the product. |
Edges
| Edge | Cardinality | Related node |
|---|---|---|
skus | many | asset.product.sku |
prices | many | asset.price |
asset.product:
fields:
name:
type: text
dimension: locale
vatClass:
type: enum
edges:
skus:
cardinality: many
relatedNode: asset.product.sku
prices:
cardinality: many
relatedNode: asset.priceasset.product.sku
A subitem of asset.product, reachable via the skus edge.
Fields
| Field | Type | Notes |
|---|---|---|
skuNumber | text | The SKU identifier. |
quantity | number | Quantity per product unit. |
asset.product.sku:
fields:
skuNumber:
type: text
quantity:
type: numberasset.priceList
Default asset number prefix: PL. Price lists scope prices to a set of channels and can either be authored manually or derived from another price list.
Fields
| Field | Type | Notes |
|---|---|---|
active | boolean | Whether prices on this list are currently effective. |
channelKeys | [enum] | Enum definition: channels. |
sourceType | enum | One of manual, derived. |
sourcePriceListKey | text | For derived price lists: the source list's assetNumber. |
Edges
| Edge | Cardinality | Related node |
|---|---|---|
prices | many | asset.price |
sourcePriceList | single | asset.priceList |
derivedPriceLists | many | asset.priceList |
asset.priceList:
fields:
active:
type: boolean
channelKeys:
type: '[enum]'
enumDefinition: channels
sourceType:
type: enum
sourcePriceListKey:
type: text
edges:
prices:
cardinality: many
relatedNode: asset.price
sourcePriceList:
cardinality: single
relatedNode: asset.priceList
derivedPriceLists:
cardinality: many
relatedNode: asset.priceListasset.price
Default asset number prefix: PR. Each price belongs to one product and one price list, scoped to a single currency.
Fields
| Field | Type | Notes |
|---|---|---|
currencyCode | text | ISO 4217 currency code. |
currentPrice | number | Current effective unit price. |
priceListKey | text | Foreign key to asset.priceList.assetNumber. |
productNumber | text | Foreign key to asset.product.assetNumber. |
deactivatedAt | instant | Set when the individual price is deactivated. |
sourceSetId | uuid | For derived prices: ID of the source mutation set. |
sourcePriceKey | text | For derived prices: the source price's assetNumber. |
Edges
| Edge | Cardinality | Related node |
|---|---|---|
priceList | single | asset.priceList |
product | single | asset.product |
sourcePrice | single | asset.price |
asset.price:
fields:
currencyCode:
type: text
currentPrice:
type: number
priceListKey:
type: text
productNumber:
type: text
deactivatedAt:
type: instant
sourceSetId:
type: text
sourcePriceKey:
type: text
edges:
priceList:
cardinality: single
relatedNode: asset.priceList
product:
cardinality: single
relatedNode: asset.product
sourcePrice:
cardinality: single
relatedNode: asset.priceuuid in requires.graph
The supported requires.graph field types are text, enum, number, instant, [text], [enum]. Declare sourceSetId as text in your requires block — UUIDs are stored as text on the graph and will compare correctly.
Activity log event types
The Products app emits these eventType values on the activityLog for asset.price and asset.priceList mutations:
| Event type | Emitted on |
|---|---|
priceChange | asset.price when the current price value changes |
priceDeactivation | asset.price when deactivatedAt is set |
priceReactivation | asset.price when deactivatedAt is cleared |
priceListActivation | asset.priceList when active flips to true |
priceListDeactivation | asset.priceList when active flips to false |
The Price Lookup module consumes these to compute price-change history within a window. If your own components query the activity log directly, expect these eventType values.