Schema and types
Compact reference for Query, inputs, enums, objects, nullability, and limits in the Storefront schema.
Last updated:
The public Storefront schema is read-oriented. It exposes a Query root; it does not expose Mutation or subscriptions.
Conventions
!means the value cannot benull.- Public IDs use
String, even when a value looks numeric. They are opaque. Decimalrepresents monetary values and decimal measurements.DateTimeuses an ISO 8601 date and time.- An argument without
!can be omitted or sent asnull. - GraphQL only returns fields included in the selection set.
Query
| Field | Signature | Return value | Reference |
|---|---|---|---|
store | store | StorefrontStore! | Open |
products | products(input: StorefrontProductsInput) | SearchResult! | Open |
product | product(slug: String!) | ProductDetail! | Open |
relatedProducts | relatedProducts(productId: String!, limit: Int) | [ProductSummary!]! | Open |
collections | collections(search: String, sort: NavigationSearchSort) | [CollectionItem!]! | Open |
collection | collection(slug: String!) | CollectionItem! | Open |
sellers | sellers | [StorefrontSellerDto!]! | Open |
seller | seller(slug: String!) | StorefrontSellerProfileDto! | Open |
productReviews | productReviews(productId: String!, ...) | Paginated review result | Open |
This table is exhaustive for the current public root. Operations not shown here remain in REST.
StorefrontProductsInput
| Field | Type | Limit or default |
|---|---|---|
productIds | [String!] | At most 100 valid IDs. |
search | String | At most 200 characters. |
categories | [String!] | At most 50; 100 characters per value. |
brands | [String!] | At most 50; 100 characters per value. |
sellerSlugs | [String!] | At most 20; 100 characters per slug. |
collections | [String!] | At most 50; 100 characters per value. |
collectionId | String | Valid public ID. |
productTypes | [ProductType!] | At most 50. |
tags | [String!] | At most 50; 100 characters per value. |
filters | [String!] | At most 100; 250 characters per filter. |
inStock | Boolean | No filter when omitted. |
minPrice | Decimal | Greater than or equal to 0. |
maxPrice | Decimal | Greater than or equal to 0 and minPrice. |
page | Int | 1; from 1 through 100. |
pageSize | Int | 24; from 1 through 100. |
sort | ProductSearchSort | DEFAULT. |
Facet filters use option:name:value or attribute:name:value. Read products for combination rules.
Enums
| Enum | Values |
|---|---|
StoreType | B2C, MARKETPLACE, RETAIL, B2B, SOCIAL, HUB, RESTAURANT |
ProductType | PRODUCT, SERVICE, BUNDLE |
ProductSearchSort | DEFAULT, PRICE_ASC, PRICE_DESC, NEWEST, NAME_ASC, NAME_DESC |
NavigationSearchSort | DEFAULT, NAME_ASC, NAME_DESC, ORDER_ASC, ORDER_DESC, NEWEST, UPDATED_DESC |
SortDirection | ASC, DESC |
ORDER_ASC and ORDER_DESC currently use ascending name order for collections. In productReviews, SortDirection only affects rating sorting; createdOn always uses DESC.
Store and navigation objects
| Type | Fields |
|---|---|
StorefrontStore | id, name, description, slug, domain, logo, icon, type, currency, language |
CollectionItem | id, slug, name, description, imageUrl, type, productCount |
StorefrontSellerDto | id, name, slug, logo, rating |
StorefrontSellerProfileDto | id, name, slug, logo, rating, deliveryPolicy, privacyAndSecurityPolicy |
StorefrontSellerRatingDto | average, totalReviews |
Each query page documents optional fields with exact nullability.
Product objects
| Type | Main fields |
|---|---|
SearchResult | pageIndex, pageSize, totalCount, totalPages, products, filters |
ProductSummary | id, name, slug, productType, imageUrl, price, compareAtPrice, variantCount, isAvailable, totalInventory, bundleItemsCount, brand, category, status, collections, tags, seller |
ProductDetail | Applicable ProductSummary fields plus description, categoryId, specifications, variants, images, bundleItems, sizeGuide, priceTiers, createdAt, updatedAt |
ProductSellerInfo | id, name, slug |
SearchFilter | id, label, type, values, min, max, selectedMin, selectedMax |
FacetItem | value, count, label, selected |
Product details also use these objects:
| Type | Fields |
|---|---|
SpecItem | key, name, value |
ImageItem | url, name, order |
VariantItem | id, sku, status, price, compareAtPrice, quantity, isAvailable, requiresShipping, options, images |
BundleItem | productId, variantId, productName, variantName, sku, brand, imageUrl, quantity, available, allowBackorders, requiresShipping |
ProductPriceTier | variantId, minQuantity, maxQuantity, unitPrice |
SizeGuideInfo | id, name, slug, description, imageUrl, gender, measurementType, unit, notes, rows |
SizeGuideRowInfo | label, sizeKey, order, measurements |
SizeGuideMeasurementInfo | key, name, min, max, value, description |
The product reference includes field-by-field types and nullability.
Reviews and pagination
The productReviews result exposes:
| Field | Type | Use |
|---|---|---|
data | [StorefrontReviewDto!]! | Current page. |
hasNextPage | Boolean! | Whether you can continue. |
nextCursor | String | Opaque cursor for the next page. |
totalCount | Long | Total count when calculated. |
StorefrontReviewDto contains id, productId, isVerifiedPurchase, rating, title, content, reviewerName, and createdOn.
Quick limits
| Operation | Limit |
|---|---|
product.slug, collection.slug | 200 characters |
seller.slug | 100 characters |
relatedProducts.limit | 1–12; default 8 |
products.page, products.pageSize | 1–100; defaults 1 and 24 |
collections.search | 200 characters |
productReviews.limit | 1–200; default 20 |
productReviews.rating | 1–5 |
productReviews.cursor | 2000 characters |
productReviews.search | 200 characters |
The schema does not replace business rules
A value can have the correct type and still be rejected because of its length, range, visibility, or store context. Each query page documents those rules and error codes.