Skip to content
ProductInterface

Fields

idID!
businessBusiness!

Canonical staff-admin page for this product. Consume instead of building paths from the id.

nameString
descriptionString

Optional Markdown description shown to customers on storefront listings and in the checkout sheet. Null when the merchant has not written one.

featuredImageImage

The lead image for this product — visually emphasized on customer-facing listings and as the first image in the checkout sheet's gallery. Resolves to the lowest-sortOrder entry in {@link Product.media}, or null when the product has no images attached.

media[Image!]!

All images attached to this product, ordered (lowest sortOrder first). The first entry is also exposed as {@link Product.featuredImage}. Capped to 10 images per product server-side.

priceInt!
purchaseRulesProductPurchaseRules!
pricingRules[PricingRule!]!
effectivePriceInt!

The effective price for the current user, after evaluating pricing rules. Falls back to price if no rules match or the user is not authenticated.

taxCodeString

Stripe tax code (e.g. txcd_10000000) used when computing tax at purchase. Null means "use the business default". The sentinel txcd_99999999 marks the product as non-taxable.

sortOrderInt!
createdAtDateTime!
recentPurchases[ProductPurchase!]!

Most recent purchases of this product, newest first. Intended for admin detail pages that want a quick preview without paginating; limit is clamped between 1 and 100 server-side. For a full paginated history, use {@link Product.purchases} instead.

Arguments (1)
limitInt= 20

Paginated history of every purchase of this product. Cursor-paginated; default page size 50, clamped to [1, 100]. Sort order is purchasedAt DESC, id ASC.

Arguments (3)
firstInt= 50
afterString
weeklyPurchases[ProductPurchasesInWeek!]!

Weekly purchase counts for this product over the last N weeks, oldest first. Weeks with zero purchases are included so callers can plot a continuous time series. weeks is clamped between 1 and 52 server-side.

Arguments (1)
weeksInt= 12
purchasePageBlocks[PurchasePageBlock!]!

Ordered list of configurable blocks rendered on this product's purchase page (contract, signature, acknowledgement, recurring-summary, etc.). Empty for products that use the default purchase layout. config on each block is a JSON-encoded string.

metadataString

Returns the first value of the named metadata key, or null if not set. Accepts the $. shorthand as an alias for the sessions. namespace. For list-valued fields, prefer metadataValues.

Arguments (1)
nameString!
metadataValues[String!]!

Returns every value stored for the named metadata key, in order. A scalar field yields a one-element list; an unset key yields an empty list.

Arguments (1)
nameString!
metadataEntries[MetadataEntry!]!

All metadata stored on this product, one entry per key (each carrying its ordered list of values). Powers the Metafields-style editor.

Used in

Product