scalar JSON scalar DateTime scalar Date scalar Time type Asset { url: String! fileName: String mimeType: String size: Int alt: String } type Money { amount: Float! currency: String! } type Measurement { value: Float! unit: String! } type GeoPoint { lat: Float! lng: Float! } type PolymorphicRef { __type: String! id: ID! } type Geometry { type: String! coordinates: JSON! } input PolymorphicRefInput { __type: String! id: ID! } input GeometryInput { type: String! coordinates: JSON! } input AssetInput { url: String! fileName: String mimeType: String size: Int alt: String } input MoneyInput { amount: Float! currency: String! } input MeasurementInput { value: Float! unit: String! } input GeoPointInput { lat: Float! lng: Float! } type PageInfo { total: Int! limit: Int! offset: Int! hasMore: Boolean! nextCursor: String } enum PublicationState { PUBLISHED DRAFT ANY } enum SortDirection { ASC DESC } input SortInput { field: String! direction: SortDirection = ASC } input FilterInput { field: String! operator: String! value: JSON } type Translation { locale: String! status: String! updatedAt: DateTime values: JSON! } type TranslationRevision { id: ID! entryId: ID! locale: String revision: Int! status: String! note: String actorEmail: String createdAt: DateTime! snapshot: JSON! diff: JSON } """A row of the media library (distinct from the embedded `Asset` reference).""" type MediaAsset { id: ID! url: String! fileName: String! mimeType: String! kind: String! sizeBytes: Int! width: Int height: Int durationSeconds: Float checksum: String folder: String folderId: ID category: String alt: String title: String description: String credit: String license: String rightsExpireAt: DateTime tags: [String!]! version: Int! createdAt: DateTime! updatedAt: DateTime! } input MediaAssetUploadInput { fileName: String! """Base64 (or data-URL) payload of the file, limited to 15 MB.""" contentBase64: String! mimeType: String folderId: ID folder: String category: String alt: String title: String description: String credit: String license: String rightsExpireAt: String tags: [String!] allowDuplicate: Boolean } input MediaAssetPatchInput { alt: String title: String description: String credit: String license: String rightsExpireAt: String category: String folder: String folderId: ID tags: [String!] } """One facet filter: `dimension` is `model`, `status`, `locale`, `category`, `tag` or `.`.""" input FacetFilterInput { dimension: String! values: [String!]! } """One facet value with its drill-down hit count.""" type FacetValue { value: String! label: String! count: Int! selected: Boolean! } type FacetModel { key: String! name: String! value: String! label: String! count: Int! selected: Boolean! } """Facet over one entry field of one model.""" type FacetField { key: String! model: String! modelName: String! field: String! label: String! type: String! values: [FacetValue!]! } type SearchFacets { models: [FacetModel!]! statuses: [FacetValue!]! locales: [FacetValue!]! categories: [FacetValue!]! tags: [FacetValue!]! fields: [FacetField!]! """True when a model hit its per-model scan cap, so counts are a lower bound.""" approximate: Boolean! } type SearchMatch { """Offset inside the snippet text, in characters.""" start: Int! length: Int! } type SearchSnippet { """Field the excerpt was taken from.""" field: String! label: String! """Verbatim excerpt of the field value.""" text: String! """Same excerpt with matches wrapped in , HTML-escaped.""" html: String! matches: [SearchMatch!]! truncatedStart: Boolean! truncatedEnd: Boolean! } type EntryHighlight { id: ID! snippets: [SearchSnippet!]! } type SearchInfo { """Dictionary used for matching and ranking.""" config: String! """True when the stored, indexed search vector answered the query.""" indexed: Boolean! explain: String! """Snippets per entry; empty unless highlight: true was requested.""" highlights: [EntryHighlight!]! } type SearchRanking { model: String! config: String! indexed: Boolean! explain: String! } type SearchHit { model: String! modelName: String! id: ID! title: String! status: String! locale: String updatedAt: DateTime """Relevance score in 0..1; higher is a better match.""" score: Float! """Best excerpt as plain text; null when highlighting is off.""" snippet: String highlights: [SearchSnippet!]! record: JSON! } type SearchMeta { query: String! total: Int! limit: Int! offset: Int! hasMore: Boolean! facets: SearchFacets! ranking: [SearchRanking!]! } type SearchResult { data: [SearchHit!]! meta: SearchMeta! } enum OrgAccountAccountType { customer prospect supplier partner internal } enum OrgAccountAccountStatus { active on_hold closed } enum AlarmCategorySeverityFloor { info warning critical } enum AlarmDefinitionSeverity { info warning critical } enum FoodAllergenSeverity { declare may_contain high_risk } enum ArticleCategory { architecture engineering governance operations } enum ShopCartState { open ordered abandoned expired } enum ShopCustomerProfileState { active blocked } enum FoodDietKind { diet religious lifestyle medical } enum ShopDiscountMechanic { percent amount free_shipping } enum ShopFulfillmentState { pending packed dispatched delivered cancelled } enum FoodIngredientCategory { base sauce cheese meat fish vegetable fruit herb spice dairy bakery oil other } enum FoodIngredientBaseUnit { g kg ml l piece slice scoop portion tbsp tsp } enum LandingPageLayoutStyle { standard video minimal } enum LifecycleStatusPhase { design active retired obsolete } enum ShopMarketRounding { line order } enum FoodMenuItemItemType { pizza burger steak pasta side drink dessert combo } enum FoodMenuItemStation { pizza_oven grill fryer cold bar pastry } enum FoodModifierGroupSelection { single multiple quantised } enum FoodModifierGroupUi { radio checkbox chips stepper dropdown } enum FoodModifierOptionKind { add remove extra swap size base doneness side sauce drink } enum ShopOrderState { cart placed paid packed shipped delivered cancelled refunded } enum ShopOrderPaymentState { unpaid authorised paid partially_refunded refunded } enum ShopOrderFulfillmentState { unfulfilled partial fulfilled returned } enum ShopPaymentMethodProvider { manual bank_transfer cash_on_delivery card wallet bnpl external } enum ShopPaymentMethodCaptureMode { automatic manual } enum ShopPaymentKind { authorisation capture sale void refund } enum ShopPaymentState { pending authorised captured failed voided refunded } enum FoodPricingPolicyRounding { none up_05 up_09 nearest_10 nearest_50 nearest_100 } enum FoodPricingPolicyVersionApprovalStatus { draft in_review approved rejected retired } enum ShopProductState { draft available preorder discontinued } enum ProductCharacteristicValueType { string number boolean date dateTime enum range object } enum ProductVariantStockStatus { inStock lowStock outOfStock preorder discontinued } enum ChmChannelChannelType { marketplace ota retail own_store reseller } enum ShopShippingMethodCarrierKind { courier pickup_point store_pickup digital } enum ShopStockReservationState { held committed released expired } enum FoodBurgerSpecPattyType { beef chicken fish plant halloumi } enum FoodBurgerSpecBun { brioche sesame potato pretzel gluten_free lettuce } enum CtaBlockVariant { primary ghost custom } enum TmfCharValueValueType { string number boolean date range } enum FoodComboLineUnit { g kg ml l piece slice scoop portion tbsp tsp } enum FoodComponentLineRole { base sauce cheese protein topping garnish side drink dessert packaging } enum FoodComponentLineUnit { g kg ml l piece slice scoop portion tbsp tsp } enum OrgContactPointChannel { email phone mobile fax portal } enum FoodDrinkSpecServe { chilled room hot on_ice frozen } enum HeroBlockMedia { none image video } enum FoodMenuItemSizeSize { small medium large xl family } enum FoodOptionRuleRule { requires excludes implies at_least_one_of at_most_one_of recommends } enum FoodPizzaSpecBase { classic thin thick sourdough gluten_free } enum FoodPizzaSpecCrust { plain stuffed garlic sesame } enum FoodPizzaSpecBake { stone_oven deck conveyor wood_fired } enum ShopPricePriceType { list sale wholesale recurring } enum TmfPricePriceType { oneTime recurring usage } enum TmfPriceRecurringChargePeriod { day week month quarter year } enum FoodRecipeLineUnit { g kg ml l piece slice scoop portion tbsp tsp } enum RichTextBlockAlign { left center } enum FoodSizePriceSize { small medium large xl family } enum FoodSteakSpecCut { ribeye sirloin fillet rump tomahawk flank } enum FoodSteakSpecGrade { standard prime wagyu grass_fed } """Polymorphic choice block: patty, bun and doneness options for burgers.""" type FoodBurgerSpec { """Patty""" pattyType: FoodBurgerSpecPattyType! """Patties""" pattyCount: Int """Patty weight (g)""" pattyWeightG: Int """Bun""" bun: FoodBurgerSpecBun """Doneness levels""" donenessLevels: [FoodPrepLevel!]! """Side included""" includesSide: Boolean } input FoodBurgerSpecInput { pattyType: FoodBurgerSpecPattyType pattyCount: Int pattyWeightG: Int bun: FoodBurgerSpecBun donenessLevels: [ID!] includesSide: Boolean } """Conversion block with a conditional button style.""" type CtaBlock { """Button label""" label: String! """Target URL""" href: String! """Variant""" variant: CtaBlockVariant """Custom colour""" customColor: String } input CtaBlockInput { label: String href: String variant: CtaBlockVariant customColor: String } """One line of a cart: variant reference plus a price and tax snapshot taken at calculation time.""" type ShopCartLine { """Variant id""" variantId: ID """SKU""" sku: String! """Title""" title: String """Quantity""" quantity: Int! """Unit price""" unitPrice: Money """Discount %""" discountPercent: Float """Discount total""" discountTotal: Money """Tax rate %""" taxRate: Float """Tax total""" taxTotal: Money """Line total""" lineTotal: Money } input ShopCartLineInput { variantId: ID sku: String title: String quantity: Int unitPrice: MoneyInput discountPercent: Float discountTotal: MoneyInput taxRate: Float taxTotal: MoneyInput lineTotal: MoneyInput } """TMF CharacteristicValueSpecification: one allowed value or range.""" type TmfCharValue { """Value type""" valueType: TmfCharValueValueType! """Value""" value: String """Range from""" valueFrom: Float """Range to""" valueTo: Float """Unit of measure""" unitOfMeasure: String """Default value""" isDefault: Boolean """Sort order""" sortOrder: Int } input TmfCharValueInput { valueType: TmfCharValueValueType value: String valueFrom: Float valueTo: Float unitOfMeasure: String isDefault: Boolean sortOrder: Int } """Quantised bridge for meal deals: an included menu item with quantity, optionally swappable through a modifier group (steak with fries, upgrade to salad).""" type FoodComboLine { """Menu item""" menuItem: FoodMenuItem! """Quantity""" quantity: Float! """Unit""" unit: FoodComboLineUnit! """Included in the combo price""" included: Boolean """Swap group""" swapGroup: FoodModifierGroup """Upgrade price""" upgradePrice: Money """Sort""" sort: Int } input FoodComboLineInput { menuItem: ID quantity: Float unit: FoodComboLineUnit included: Boolean swapGroup: ID upgradePrice: MoneyInput sort: Int } """Polymorphic choice block for meal deals: the quantised list of included items plus the bundle discount.""" type FoodComboSpec { """Included items""" lines: [FoodComboLine!]! """Bundle discount %""" discountPercent: Float """Fixed combo price""" fixedPrice: Boolean """Combo price""" price: Money } input FoodComboSpecInput { lines: [FoodComboLineInput!] discountPercent: Float fixedPrice: Boolean price: MoneyInput } """Composite classification bridge: a relation that carries meaning — the role the related ingredient or dish plays in this item (base, sauce, protein, side…).""" type FoodComponentLine { """Role""" role: FoodComponentLineRole! """Related item""" item: PolymorphicRef! """Quantity""" quantity: Float """Unit""" unit: FoodComponentLineUnit! """Swappable by the guest""" swappable: Boolean """Sort""" sort: Int """Note""" note: String } input FoodComponentLineInput { role: FoodComponentLineRole item: PolymorphicRefInput quantity: Float unit: FoodComponentLineUnit swappable: Boolean sort: Int note: String } """Channel-specific contact details with a preferred flag.""" type OrgContactPoint { """Channel""" channel: OrgContactPointChannel! """Value""" value: String! """Preferred""" preferred: Boolean } input OrgContactPointInput { channel: OrgContactPointChannel value: String preferred: Boolean } """Polymorphic choice block: serving properties of drinks.""" type FoodDrinkSpec { """Volume (ml)""" volumeMl: Int! """Serve""" serve: FoodDrinkSpecServe """Alcoholic""" alcoholic: Boolean """ABV %""" abv: Float """Free refills""" refillable: Boolean } input FoodDrinkSpecInput { volumeMl: Int serve: FoodDrinkSpecServe alcoholic: Boolean abv: Float refillable: Boolean } """Quantity of one order line included in a fulfilment.""" type ShopFulfillmentLine { """Variant id""" variantId: ID """SKU""" sku: String! """Quantity""" quantity: Int! } input ShopFulfillmentLineInput { variantId: ID sku: String quantity: Int } """Membership of an option in a group, with the group-specific price, default and badge.""" type FoodGroupOption { """Option""" option: FoodModifierOption! """Price override""" priceOverride: Money """Default quantity""" defaultQuantity: Int """Preselected""" preselected: Boolean """Badge""" badge: String """Sort""" sort: Int } input FoodGroupOptionInput { option: ID priceOverride: MoneyInput defaultQuantity: Int preselected: Boolean badge: String sort: Int } """Headline block with an optional media background.""" type HeroBlock { """Headline""" headline: String! """Subheadline""" subheadline: String """Background media""" media: HeroBlockMedia """Background image""" image: Asset """Video URL""" videoUrl: String } input HeroBlockInput { headline: String subheadline: String media: HeroBlockMedia image: AssetInput videoUrl: String } """Composite bridge between a dish and a modifier group, with per-dish overrides of the selection bounds.""" type FoodMenuItemGroup { """Modifier group""" group: FoodModifierGroup! """Required""" required: Boolean """Min selections""" minSelect: Int """Max selections""" maxSelect: Int """Free selections included""" freeIncluded: Int """Collapsed by default""" collapsed: Boolean """Rules""" rules: [FoodOptionRule!]! """Sort""" sort: Int } input FoodMenuItemGroupInput { group: ID required: Boolean minSelect: Int maxSelect: Int freeIncluded: Int collapsed: Boolean rules: [FoodOptionRuleInput!] sort: Int } """Sellable size of a dish with its own SKU, price and topping price factor.""" type FoodMenuItemSize { """Size""" size: FoodMenuItemSizeSize! """SKU""" sku: String """Price""" price: Money! """Portion weight (g)""" portionWeightG: Int """Energy (kcal)""" kcal: Int """Topping price factor""" toppingFactor: Float """Available""" available: Boolean """Sort""" sort: Int """Guest label""" label: String """Ingredient cost factor""" costFactor: Float } input FoodMenuItemSizeInput { size: FoodMenuItemSizeSize sku: String price: MoneyInput portionWeightG: Int kcal: Int toppingFactor: Float available: Boolean sort: Int label: String costFactor: Float } """Nutrition declaration per 100 g / 100 ml, used for ingredients and finished menu items.""" type FoodNutrition { """Energy (kcal)""" kcal: Float """Protein (g)""" proteinG: Float """Carbohydrate (g)""" carbsG: Float """of which sugars (g)""" sugarsG: Float """Fat (g)""" fatG: Float """of which saturates (g)""" saturatesG: Float """Fibre (g)""" fibreG: Float """Salt (g)""" saltG: Float } input FoodNutritionInput { kcal: Float proteinG: Float carbsG: Float sugarsG: Float fatG: Float saturatesG: Float fibreG: Float saltG: Float } """Conditional classification bridge: a relation plus the rule that governs it. `requires` demands the target, `excludes` forbids it, `implies` auto-selects it.""" type FoodOptionRule { """Rule""" rule: FoodOptionRuleRule! """Targets""" targets: [PolymorphicRef!]! """Block the order""" hard: Boolean """Guest message""" message: String } input FoodOptionRuleInput { rule: FoodOptionRuleRule targets: [PolymorphicRefInput!] hard: Boolean message: String } """One purchased item: variant reference, quantity, unit price and discount.""" type ShopOrderLine { """Variant id""" variantId: ID """SKU""" sku: String! """Title""" title: String """Quantity""" quantity: Int! """Unit price""" unitPrice: Money """Discount %""" discountPercent: Float """Discount total""" discountTotal: Money """Tax rate %""" taxRate: Float """Tax total""" taxTotal: Money """Line total""" lineTotal: Money } input ShopOrderLineInput { variantId: ID sku: String title: String quantity: Int unitPrice: MoneyInput discountPercent: Float discountTotal: MoneyInput taxRate: Float taxTotal: MoneyInput lineTotal: MoneyInput } """Shipping-relevant measurements of a physical variant.""" type TmfDimensions { """Length""" length: Measurement """Width""" width: Measurement """Height""" height: Measurement """Weight""" weight: Measurement } input TmfDimensionsInput { length: MeasurementInput width: MeasurementInput height: MeasurementInput weight: MeasurementInput } """Polymorphic choice block: properties that only exist for pizzas.""" type FoodPizzaSpec { """Base""" base: FoodPizzaSpecBase! """Crust""" crust: FoodPizzaSpecCrust """Diameter (cm)""" diameterCm: Int """Max toppings""" maxToppings: Int """Allow half-and-half""" allowHalfAndHalf: Boolean """Bake""" bake: FoodPizzaSpecBake } input FoodPizzaSpecInput { base: FoodPizzaSpecBase crust: FoodPizzaSpecCrust diameterCm: Int maxToppings: Int allowHalfAndHalf: Boolean bake: FoodPizzaSpecBake } """Reusable postal address block (street, city, region, postal code, country).""" type OrgPostalAddress { """Street""" street: String """Street (line 2)""" streetExtra: String """City""" city: String """Region / state""" region: String """Postal code""" postalCode: String """Country""" country: String } input OrgPostalAddressInput { street: String streetExtra: String city: String region: String postalCode: String country: String } """Currency-scoped price with optional validity window.""" type ShopPrice { """Currency""" currency: String! """Amount""" amount: Money! """Type""" priceType: ShopPricePriceType """Valid from""" validFrom: Date """Valid to""" validTo: Date } input ShopPriceInput { currency: String amount: MoneyInput priceType: ShopPricePriceType validFrom: Date validTo: Date } """TMF ProductOfferingPrice: one charge with its period and tax handling.""" type TmfPrice { """Price name""" name: String """Price type""" priceType: TmfPricePriceType! """Recurring period""" recurringChargePeriod: TmfPriceRecurringChargePeriod """Usage unit""" unitOfMeasure: String """Amount""" amount: Money! """Currency""" currency: String! """Tax included""" taxIncluded: Boolean """Tax rate""" taxRate: Float } input TmfPriceInput { name: String priceType: TmfPricePriceType recurringChargePeriod: TmfPriceRecurringChargePeriod unitOfMeasure: String amount: MoneyInput currency: String taxIncluded: Boolean taxRate: Float } """Quantised classification bridge: one ingredient plus how much of it a dish contains. Enables cost, nutrition and allergen roll-ups without duplicating ingredients.""" type FoodRecipeLine { """Ingredient""" ingredient: FoodIngredient! """Quantity""" quantity: Float! """Unit""" unit: FoodRecipeLineUnit! """Waste %""" wastePercent: Float """Optional in the recipe""" optional: Boolean """Preparation""" preparation: String """Note""" note: String """Guest may remove""" removable: Boolean """Removal credit""" removalCredit: Money """Swap options""" swapOptions: [FoodModifierOption!]! } input FoodRecipeLineInput { ingredient: ID quantity: Float unit: FoodRecipeLineUnit wastePercent: Float optional: Boolean preparation: String note: String removable: Boolean removalCredit: MoneyInput swapOptions: [ID!] } """Long-form editorial content.""" type RichTextBlock { """Heading""" heading: String """Content""" content: String! """Alignment""" align: RichTextBlockAlign } input RichTextBlockInput { heading: String content: String align: RichTextBlockAlign } """Title, description, canonical URL and social preview image for any page-like entry.""" type WebSeo { """Meta title""" metaTitle: String """Meta description""" metaDescription: String """Canonical URL""" canonicalUrl: String """Social image""" ogImage: Asset """Exclude from search engines""" noIndex: Boolean } input WebSeoInput { metaTitle: String metaDescription: String canonicalUrl: String ogImage: AssetInput noIndex: Boolean } """Reusable search metadata block.""" type SeoMeta { """Meta title""" title: String """Meta description""" description: String """Keywords""" keywords: String } input SeoMetaInput { title: String description: String keywords: String } """When and where something is served: weekdays, time range and service channels.""" type FoodServiceWindow { """Days""" days: [String!]! """From""" startTime: Time """Until""" endTime: Time """Channels""" channels: [String!]! } input FoodServiceWindowInput { days: [String!] startTime: Time endTime: Time channels: [String!] } """One price band of a shipping method, selected by order value or weight.""" type ShopShippingRate { """Label""" label: String """Currency""" currency: String! """Price""" price: Money! """Applies from order value""" minOrderValue: Money """Free above order value""" freeOver: Money """Up to weight (kg)""" maxWeightKg: Float } input ShopShippingRateInput { label: String currency: String price: MoneyInput minOrderValue: MoneyInput freeOver: MoneyInput maxWeightKg: Float } """Price of an option per size, so extra cheese costs more on a family pizza than on a small one.""" type FoodSizePrice { """Size""" size: FoodSizePriceSize! """Price delta""" priceDelta: Money! } input FoodSizePriceInput { size: FoodSizePriceSize priceDelta: MoneyInput } """Polymorphic choice block: cut, ageing and the doneness levels the kitchen serves.""" type FoodSteakSpec { """Cut""" cut: FoodSteakSpecCut! """Weight (g)""" weightG: Int! """Dry-aged days""" agingDays: Int """Grade""" grade: FoodSteakSpecGrade """Default doneness""" defaultDoneness: FoodPrepLevel """Doneness levels""" donenessLevels: [FoodPrepLevel!]! """Needs resting time""" restingRequired: Boolean } input FoodSteakSpecInput { cut: FoodSteakSpecCut weightG: Int agingDays: Int grade: FoodSteakSpecGrade defaultDoneness: ID donenessLevels: [ID!] restingRequired: Boolean } """TMF TimePeriod: the window during which an entity is valid.""" type TmfValidityPeriod { """Valid from""" validFrom: DateTime """Valid to""" validTo: DateTime } input TmfValidityPeriodInput { validFrom: DateTime validTo: DateTime } """Concrete value a variant assigns to a specification characteristic.""" type TmfVariantCharacteristic { """Characteristic code""" characteristicCode: String! """Value""" value: String! """Unit of measure""" unitOfMeasure: String } input TmfVariantCharacteristicInput { characteristicCode: String value: String unitOfMeasure: String } union LandingPageBlocksBlock = HeroBlock | RichTextBlock | CtaBlock union FoodMenuItemSpecBlock = FoodPizzaSpec | FoodBurgerSpec | FoodSteakSpec | FoodDrinkSpec | FoodComboSpec """Organisation (customer, supplier, partner or internal unit) referenced by every operational solution.""" type OrgAccount { """Name""" name: String! """Account code""" code: String! """Type""" accountType: OrgAccountAccountType! """Account status""" accountStatus: OrgAccountAccountStatus """Website""" website: String """Primary email""" email: String """Primary phone""" phone: String """VAT number""" vatNumber: String """Billing currency""" currency: String """Parent account""" parent: OrgAccount """Billing address""" billingAddress: OrgPostalAddress """Notes""" notes: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type OrgAccountPage { nodes: [OrgAccount!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input OrgAccountCreateInput { name: String! code: String! accountType: OrgAccountAccountType! accountStatus: OrgAccountAccountStatus website: String email: String phone: String vatNumber: String currency: String parent: ID billingAddress: OrgPostalAddressInput notes: String status: String } input OrgAccountUpdateInput { name: String code: String accountType: OrgAccountAccountType accountStatus: OrgAccountAccountStatus website: String email: String phone: String vatNumber: String currency: String parent: ID billingAddress: OrgPostalAddressInput notes: String status: String } """Grouping of alarm definitions by functional area.""" type AlarmCategory { """Code""" code: String! """Name""" name: String! """Description""" description: String """Severity floor""" severityFloor: AlarmCategorySeverityFloor! """Accent colour""" color: String """SEO""" seo: SeoMeta """Alarm definitions""" definitions: [AlarmDefinition!]! id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type AlarmCategoryPage { nodes: [AlarmCategory!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input AlarmCategoryCreateInput { code: String! name: String! description: String severityFloor: AlarmCategorySeverityFloor! color: String seo: SeoMetaInput status: String } input AlarmCategoryUpdateInput { code: String name: String description: String severityFloor: AlarmCategorySeverityFloor color: String seo: SeoMetaInput status: String } """A single machine-readable alarm contract.""" type AlarmDefinition { """Alarm code""" code: String! """Title""" title: String! """Summary""" summary: String """Remediation""" remediation: String """Severity""" severity: AlarmDefinitionSeverity! """Priority""" priority: Int! """Auto resolve""" autoResolve: Boolean """Threshold (s)""" thresholdSeconds: Int """Runbook URL""" runbookUrl: String """Owner e-mail""" ownerEmail: String """Payload example""" payloadExample: JSON """Category""" category: AlarmCategory! """Markets""" markets: [Country!]! id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type AlarmDefinitionPage { nodes: [AlarmDefinition!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input AlarmDefinitionCreateInput { code: String! title: String! summary: String remediation: String severity: AlarmDefinitionSeverity! priority: Int! autoResolve: Boolean thresholdSeconds: Int runbookUrl: String ownerEmail: String payloadExample: JSON category: ID! markets: [ID!] status: String locale: String } input AlarmDefinitionUpdateInput { code: String title: String summary: String remediation: String severity: AlarmDefinitionSeverity priority: Int autoResolve: Boolean thresholdSeconds: Int runbookUrl: String ownerEmail: String payloadExample: JSON category: ID markets: [ID!] status: String locale: String } """Regulated allergen declaration. A document rather than an enum so the label, icon and legal wording can be localised and reused by every ingredient.""" type FoodAllergen { """Name""" name: String! """Code""" code: String! """EU annex number""" euNumber: String """Severity""" severity: FoodAllergenSeverity """Icon""" icon: String """Description""" description: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type FoodAllergenPage { nodes: [FoodAllergen!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input FoodAllergenCreateInput { name: String! code: String! euNumber: String severity: FoodAllergenSeverity icon: String description: String status: String } input FoodAllergenUpdateInput { name: String code: String euNumber: String severity: FoodAllergenSeverity icon: String description: String status: String } """Editorial article published on the public blog.""" type Article { """Title""" title: String! """Slug""" slug: String! """Excerpt""" excerpt: String """Body""" body: String! """Category""" category: ArticleCategory! """Tags""" tags: [String!]! """Author""" authorName: String """Author role""" authorRole: String """Reading time (minutes)""" readingMinutes: Int """Publication date""" publishedOn: Date """SEO""" seo: SeoMeta id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ArticlePage { nodes: [Article!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ArticleCreateInput { title: String! slug: String! excerpt: String body: String! category: ArticleCategory! tags: [String!] authorName: String authorRole: String readingMinutes: Int publishedOn: Date seo: SeoMetaInput status: String locale: String } input ArticleUpdateInput { title: String slug: String excerpt: String body: String category: ArticleCategory tags: [String!] authorName: String authorRole: String readingMinutes: Int publishedOn: Date seo: SeoMetaInput status: String locale: String } """Brand or manufacturer record shared by commerce and PIM.""" type PimBrand { """Name""" name: String! """Slug""" slug: String! """Logo""" logo: Asset """Website""" website: String """Country of origin""" country: String """Description""" description: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type PimBrandPage { nodes: [PimBrand!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input PimBrandCreateInput { name: String! slug: String! logo: AssetInput website: String country: String description: String status: String } input PimBrandUpdateInput { name: String slug: String logo: AssetInput website: String country: String description: String status: String } """Live cart addressed by an unguessable token. Anonymous until a customer is attached; expires automatically.""" type ShopCart { """Cart reference""" name: String! """Token prefix""" tokenPrefix: String """Market""" market: ShopMarket! """Customer""" customer: OrgContact """E-mail""" email: String """Currency""" currency: String """State""" state: ShopCartState! """Lines""" lines: [ShopCartLine!]! """Discount""" discount: ShopDiscount """Shipping method""" shippingMethod: ShopShippingMethod """Shipping address""" shippingAddress: OrgPostalAddress """Billing address""" billingAddress: OrgPostalAddress """Subtotal""" subtotal: Money """Discount""" discountTotal: Money """Shipping""" shippingTotal: Money """Tax""" taxTotal: Money """Grand total""" grandTotal: Money """Expires at""" expiresAt: DateTime """Last activity""" lastActivityAt: DateTime id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopCartPage { nodes: [ShopCart!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopCartCreateInput { name: String! market: ID! customer: ID email: String currency: String state: ShopCartState! lines: [ShopCartLineInput!] discount: ID shippingMethod: ID shippingAddress: OrgPostalAddressInput billingAddress: OrgPostalAddressInput expiresAt: DateTime lastActivityAt: DateTime status: String } input ShopCartUpdateInput { name: String market: ID customer: ID email: String currency: String state: ShopCartState lines: [ShopCartLineInput!] discount: ID shippingMethod: ID shippingAddress: OrgPostalAddressInput billingAddress: OrgPostalAddressInput expiresAt: DateTime lastActivityAt: DateTime status: String } """Person linked to an account: buyer, guest, lead owner or notification recipient.""" type OrgContact { """Full name""" name: String! """Email""" email: String """Phone""" phone: String """Job title""" jobTitle: String """Account""" company: OrgAccount """Preferred language""" language: String """Marketing opt-in""" marketingOptIn: Boolean """Lifetime orders""" lifetimeOrders: Int """Notes""" notes: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type OrgContactPage { nodes: [OrgContact!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input OrgContactCreateInput { name: String! email: String phone: String jobTitle: String company: ID language: String marketingOptIn: Boolean lifetimeOrders: Int notes: String status: String } input OrgContactUpdateInput { name: String email: String phone: String jobTitle: String company: ID language: String marketingOptIn: Boolean lifetimeOrders: Int notes: String status: String } """Market reference data.""" type Country { """ISO 3166-1 alpha-2""" iso2: String! """Name""" name: String! """Currency""" currency: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type CountryPage { nodes: [Country!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input CountryCreateInput { iso2: String! name: String! currency: String status: String } input CountryUpdateInput { iso2: String name: String currency: String status: String } """Commerce overlay on a contact: default market, customer group, consents and billing data.""" type ShopCustomerProfile { """Label""" name: String! """Contact""" contact: OrgContact! """Default market""" market: ShopMarket """Billing account""" billingAccount: OrgAccount """Tax id""" taxId: String """Billing address""" billingAddress: OrgPostalAddress """Marketing consent""" marketingConsent: Boolean """Consent recorded at""" marketingConsentAt: DateTime """State""" state: ShopCustomerProfileState """Internal note""" internalNote: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopCustomerProfilePage { nodes: [ShopCustomerProfile!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopCustomerProfileCreateInput { name: String! contact: ID! market: ID billingAccount: ID taxId: String billingAddress: OrgPostalAddressInput marketingConsent: Boolean marketingConsentAt: DateTime state: ShopCustomerProfileState internalNote: String status: String } input ShopCustomerProfileUpdateInput { name: String contact: ID market: ID billingAccount: ID taxId: String billingAddress: OrgPostalAddressInput marketingConsent: Boolean marketingConsentAt: DateTime state: ShopCustomerProfileState internalNote: String status: String } """Diet, religious or lifestyle classification (vegan, halal, gluten-free…) shared by ingredients and menu items.""" type FoodDiet { """Name""" name: String! """Code""" code: String! """Kind""" kind: FoodDietKind """Icon""" icon: String """Badge colour""" colour: String """Description""" description: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type FoodDietPage { nodes: [FoodDiet!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input FoodDietCreateInput { name: String! code: String! kind: FoodDietKind icon: String colour: String description: String status: String } input FoodDietUpdateInput { name: String code: String kind: FoodDietKind icon: String colour: String description: String status: String } """Promotion rule: code, mechanic, value and redemption window.""" type ShopDiscount { """Name""" name: String! """Code""" code: String! """Mechanic""" mechanic: ShopDiscountMechanic! """Value""" value: Float """Minimum order value""" minimumOrder: Money """Valid from""" validFrom: Date """Valid to""" validTo: Date """Usage limit""" usageLimit: Int """Active""" active: Boolean id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopDiscountPage { nodes: [ShopDiscount!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopDiscountCreateInput { name: String! code: String! mechanic: ShopDiscountMechanic! value: Float minimumOrder: MoneyInput validFrom: Date validTo: Date usageLimit: Int active: Boolean status: String } input ShopDiscountUpdateInput { name: String code: String mechanic: ShopDiscountMechanic value: Float minimumOrder: MoneyInput validFrom: Date validTo: Date usageLimit: Int active: Boolean status: String } """Physical or digital delivery of part of an order, optionally linked to a warehouse shipment.""" type ShopFulfillment { """Reference""" name: String! """Order""" order: ShopOrder! """Shipping method""" shippingMethod: ShopShippingMethod """Warehouse shipment id""" shipmentId: ID """Lines""" lines: [ShopFulfillmentLine!]! """Carrier""" carrier: String """Tracking number""" trackingNumber: String """Tracking URL""" trackingUrl: String """State""" state: ShopFulfillmentState! """Dispatched at""" dispatchedAt: DateTime """Delivered at""" deliveredAt: DateTime id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopFulfillmentPage { nodes: [ShopFulfillment!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopFulfillmentCreateInput { name: String! order: ID! shippingMethod: ID shipmentId: ID lines: [ShopFulfillmentLineInput!] carrier: String trackingNumber: String trackingUrl: String state: ShopFulfillmentState! dispatchedAt: DateTime deliveredAt: DateTime status: String } input ShopFulfillmentUpdateInput { name: String order: ID shippingMethod: ID shipmentId: ID lines: [ShopFulfillmentLineInput!] carrier: String trackingNumber: String trackingUrl: String state: ShopFulfillmentState dispatchedAt: DateTime deliveredAt: DateTime status: String } """Single source of truth for a kitchen item: cost, unit, allergens, diet labels and nutrition. Referenced with a quantity by recipes and options.""" type FoodIngredient { """Name""" name: String! """Code""" code: String! """Stock SKU""" sku: String """Category""" category: FoodIngredientCategory! """Stock unit""" baseUnit: FoodIngredientBaseUnit! """Cost per stock unit""" unitCost: Money """Allergens""" allergens: [FoodAllergen!]! """Diet labels""" diets: [FoodDiet!]! """Guest-selectable""" selectable: Boolean """Removable""" removable: Boolean """Nutrition per 100""" nutrition: FoodNutrition """Image""" image: Asset """Kitchen note""" kitchenNote: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type FoodIngredientPage { nodes: [FoodIngredient!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input FoodIngredientCreateInput { name: String! code: String! sku: String category: FoodIngredientCategory! baseUnit: FoodIngredientBaseUnit! unitCost: MoneyInput allergens: [ID!] diets: [ID!] selectable: Boolean removable: Boolean nutrition: FoodNutritionInput image: AssetInput kitchenNote: String status: String } input FoodIngredientUpdateInput { name: String code: String sku: String category: FoodIngredientCategory baseUnit: FoodIngredientBaseUnit unitCost: MoneyInput allergens: [ID!] diets: [ID!] selectable: Boolean removable: Boolean nutrition: FoodNutritionInput image: AssetInput kitchenNote: String status: String } """Composable marketing page assembled from blocks.""" type LandingPage { """Title""" title: String! """Slug""" slug: String! """Layout style""" layoutStyle: LandingPageLayoutStyle! """Hero video URL""" heroVideoUrl: String """Intro (markdown)""" body: String """Page blocks""" blocks: [LandingPageBlocksBlock!]! """Gallery""" gallery: [Asset!]! """Campaign rating""" campaignRating: Int """Estimated read time""" readTimeSeconds: Int """Contact phone""" contactPhone: String """Preview allowlist IP""" allowlistIp: String """SEO""" seo: SeoMeta id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type LandingPagePage { nodes: [LandingPage!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input LandingPageCreateInput { title: String! slug: String! layoutStyle: LandingPageLayoutStyle! heroVideoUrl: String body: String blocks: [JSON!] gallery: [AssetInput!] campaignRating: Int readTimeSeconds: Int contactPhone: String allowlistIp: String previewSecret: String seo: SeoMetaInput status: String } input LandingPageUpdateInput { title: String slug: String layoutStyle: LandingPageLayoutStyle heroVideoUrl: String body: String blocks: [JSON!] gallery: [AssetInput!] campaignRating: Int readTimeSeconds: Int contactPhone: String allowlistIp: String previewSecret: String seo: SeoMetaInput status: String } """TMF lifecycle status catalogue shared by every catalog entity.""" type LifecycleStatus { """Name""" name: String! """Code""" code: String! """Phase""" phase: LifecycleStatusPhase! """Sellable""" isSellable: Boolean """Badge colour""" color: String """Sort order""" sortOrder: Int """Description""" description: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type LifecycleStatusPage { nodes: [LifecycleStatus!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input LifecycleStatusCreateInput { name: String! code: String! phase: LifecycleStatusPhase! isSellable: Boolean color: String sortOrder: Int description: String status: String } input LifecycleStatusUpdateInput { name: String code: String phase: LifecycleStatusPhase isSellable: Boolean color: String sortOrder: Int description: String status: String } """A sellable market: country, currency, languages and whether catalogue prices already include tax.""" type ShopMarket { """Name""" name: String! """Code""" code: String! """Country""" country: String! """Currency""" currency: String! """Locales""" locales: JSON """Default sales channel""" channel: ChmChannel """Catalogue prices include tax""" pricesIncludeTax: Boolean """Rounding""" rounding: ShopMarketRounding """Default market""" defaultMarket: Boolean """Active""" active: Boolean id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopMarketPage { nodes: [ShopMarket!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopMarketCreateInput { name: String! code: String! country: String! currency: String! locales: JSON channel: ID pricesIncludeTax: Boolean rounding: ShopMarketRounding defaultMarket: Boolean active: Boolean status: String } input ShopMarketUpdateInput { name: String code: String country: String currency: String locales: JSON channel: ID pricesIncludeTax: Boolean rounding: ShopMarketRounding defaultMarket: Boolean active: Boolean status: String } """A published menu: which categories are on it, where it is served and for how long (lunch menu, delivery menu, Christmas menu).""" type FoodMenu { """Name""" name: String! """Code""" code: String! """Venues""" venues: [FoodVenue!]! """Market""" market: ShopMarket """Categories""" categories: [FoodMenuCategory!]! """Service windows""" windows: [FoodServiceWindow!]! """Valid""" valid: JSON """Channels""" channels: [String!]! """Active""" active: Boolean """Description""" description: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type FoodMenuPage { nodes: [FoodMenu!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input FoodMenuCreateInput { name: String! code: String! venues: [ID!] market: ID categories: [ID!] windows: [FoodServiceWindowInput!] valid: JSON channels: [String!] active: Boolean description: String status: String } input FoodMenuUpdateInput { name: String code: String venues: [ID!] market: ID categories: [ID!] windows: [FoodServiceWindowInput!] valid: JSON channels: [String!] active: Boolean description: String status: String } """Hierarchical menu section (Pizza, From the grill, Drinks) with its own channels and ordering.""" type FoodMenuCategory { """Name""" name: String! """Slug""" slug: String! """Parent""" parent: FoodMenuCategory """Sort""" sort: Int """Icon""" icon: String """Image""" image: Asset """Channels""" channels: [String!]! """Description""" description: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type FoodMenuCategoryPage { nodes: [FoodMenuCategory!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input FoodMenuCategoryCreateInput { name: String! slug: String! parent: ID sort: Int icon: String image: AssetInput channels: [String!] description: String status: String } input FoodMenuCategoryUpdateInput { name: String slug: String parent: ID sort: Int icon: String image: AssetInput channels: [String!] description: String status: String } """A sellable dish. `item_type` selects exactly one spec block (polymorphic choice), the recipe is a quantised bridge to ingredients and the modifier groups drive the guest configurator.""" type FoodMenuItem { """Name""" name: String! """Slug""" slug: String! """Subtitle""" subtitle: String """Description""" description: String """Gallery""" gallery: [Asset!]! """Category""" category: FoodMenuCategory! """Item type""" itemType: FoodMenuItemItemType! """Type specification""" spec: [FoodMenuItemSpecBlock!]! """Sizes""" sizes: [FoodMenuItemSize!]! """Base price""" basePrice: Money! """Tax class""" taxClass: ShopTaxClass """Pricing policy""" pricingPolicy: FoodPricingPolicy """Recipe""" recipe: [FoodRecipeLine!]! """Components""" components: [FoodComponentLine!]! """Modifier groups""" modifierGroups: [FoodMenuItemGroup!]! """Rules""" rules: [FoodOptionRule!]! """Allergens""" allergens: [FoodAllergen!]! """Diet labels""" diets: [FoodDiet!]! """Nutrition per 100""" nutrition: FoodNutrition """Preparation minutes""" prepMinutes: Int """Spiciness""" spiciness: Int """Kitchen station""" station: FoodMenuItemStation """Service windows""" availability: [FoodServiceWindow!]! """Channels""" channels: [String!]! """Available""" available: Boolean """Featured""" featured: Boolean """Goes well with""" upsellItems: [FoodMenuItem!]! """SEO""" seo: WebSeo id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type FoodMenuItemPage { nodes: [FoodMenuItem!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input FoodMenuItemCreateInput { name: String! slug: String! subtitle: String description: String gallery: [AssetInput!] category: ID! itemType: FoodMenuItemItemType! spec: [JSON!] sizes: [FoodMenuItemSizeInput!] basePrice: MoneyInput! taxClass: ID pricingPolicy: ID recipe: [FoodRecipeLineInput!] components: [FoodComponentLineInput!] modifierGroups: [FoodMenuItemGroupInput!] rules: [FoodOptionRuleInput!] allergens: [ID!] diets: [ID!] nutrition: FoodNutritionInput prepMinutes: Int spiciness: Int station: FoodMenuItemStation availability: [FoodServiceWindowInput!] channels: [String!] available: Boolean featured: Boolean upsellItems: [ID!] seo: WebSeoInput status: String } input FoodMenuItemUpdateInput { name: String slug: String subtitle: String description: String gallery: [AssetInput!] category: ID itemType: FoodMenuItemItemType spec: [JSON!] sizes: [FoodMenuItemSizeInput!] basePrice: MoneyInput taxClass: ID pricingPolicy: ID recipe: [FoodRecipeLineInput!] components: [FoodComponentLineInput!] modifierGroups: [FoodMenuItemGroupInput!] rules: [FoodOptionRuleInput!] allergens: [ID!] diets: [ID!] nutrition: FoodNutritionInput prepMinutes: Int spiciness: Int station: FoodMenuItemStation availability: [FoodServiceWindowInput!] channels: [String!] available: Boolean featured: Boolean upsellItems: [ID!] seo: WebSeoInput status: String } """A question asked during configuration: pick one doneness, choose up to four toppings, add sides. Carries selection bounds, free allowance and cross-option rules.""" type FoodModifierGroup { """Question""" name: String! """Code""" code: String! """Selection""" selection: FoodModifierGroupSelection! """Control""" ui: FoodModifierGroupUi """Required""" required: Boolean """Min selections""" minSelect: Int """Max selections""" maxSelect: Int """Free selections included""" freeIncluded: Int """Allow taking ingredients off""" allowRemovals: Boolean """Allow half-and-half""" allowHalf: Boolean """Applies to item types""" appliesTo: [String!]! """Options""" options: [FoodGroupOption!]! """Group rules""" rules: [FoodOptionRule!]! """Sort""" sort: Int """Help text""" description: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type FoodModifierGroupPage { nodes: [FoodModifierGroup!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input FoodModifierGroupCreateInput { name: String! code: String! selection: FoodModifierGroupSelection! ui: FoodModifierGroupUi required: Boolean minSelect: Int maxSelect: Int freeIncluded: Int allowRemovals: Boolean allowHalf: Boolean appliesTo: [String!] options: [FoodGroupOptionInput!] rules: [FoodOptionRuleInput!] sort: Int description: String status: String } input FoodModifierGroupUpdateInput { name: String code: String selection: FoodModifierGroupSelection ui: FoodModifierGroupUi required: Boolean minSelect: Int maxSelect: Int freeIncluded: Int allowRemovals: Boolean allowHalf: Boolean appliesTo: [String!] options: [FoodGroupOptionInput!] rules: [FoodOptionRuleInput!] sort: Int description: String status: String } """One thing a guest can choose, add, remove or upgrade: extra cheese, gluten-free base, medium-rare, sweet potato fries.""" type FoodModifierOption { """Name""" name: String! """Code""" code: String! """Kind""" kind: FoodModifierOptionKind! """Ingredient""" ingredient: FoodIngredient """Preparation level""" prepLevel: FoodPrepLevel """Price delta""" priceDelta: Money """Price per size""" sizePrices: [FoodSizePrice!]! """Max quantity""" maxQuantity: Int """Default quantity""" defaultQuantity: Int """Allow half-and-half placement""" allowHalf: Boolean """Preselected""" preselected: Boolean """Available""" available: Boolean """Channels""" channels: [String!]! """Rules""" rules: [FoodOptionRule!]! """Sort""" sort: Int """Image""" image: Asset """Kitchen note""" kitchenNote: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type FoodModifierOptionPage { nodes: [FoodModifierOption!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input FoodModifierOptionCreateInput { name: String! code: String! kind: FoodModifierOptionKind! ingredient: ID prepLevel: ID priceDelta: MoneyInput sizePrices: [FoodSizePriceInput!] maxQuantity: Int defaultQuantity: Int allowHalf: Boolean preselected: Boolean available: Boolean channels: [String!] rules: [FoodOptionRuleInput!] sort: Int image: AssetInput kitchenNote: String status: String } input FoodModifierOptionUpdateInput { name: String code: String kind: FoodModifierOptionKind ingredient: ID prepLevel: ID priceDelta: MoneyInput sizePrices: [FoodSizePriceInput!] maxQuantity: Int defaultQuantity: Int allowHalf: Boolean preselected: Boolean available: Boolean channels: [String!] rules: [FoodOptionRuleInput!] sort: Int image: AssetInput kitchenNote: String status: String } """Customer order with lines, totals, fulfilment state and addresses.""" type ShopOrder { """Order number""" name: String! """Customer""" customer: OrgContact """Account""" company: OrgAccount """Market""" market: ShopMarket """Order state""" state: ShopOrderState! """Lines""" lines: [ShopOrderLine!]! """Currency""" currency: String """Subtotal""" subtotal: Money """Discount""" discount: ShopDiscount """Discount total""" discountTotal: Money """Shipping method""" shippingMethod: ShopShippingMethod """Shipping""" shippingTotal: Money """Tax""" taxTotal: Money """Grand total""" grandTotal: Money """Shipping address""" shippingAddress: OrgPostalAddress """Billing address""" billingAddress: OrgPostalAddress """Payment state""" paymentState: ShopOrderPaymentState """Fulfilment state""" fulfillmentState: ShopOrderFulfillmentState """Placed at""" placedAt: DateTime """Customer note""" customerNote: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopOrderPage { nodes: [ShopOrder!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopOrderCreateInput { name: String! customer: ID company: ID market: ID state: ShopOrderState! lines: [ShopOrderLineInput!] currency: String subtotal: MoneyInput discount: ID discountTotal: MoneyInput shippingMethod: ID shippingTotal: MoneyInput taxTotal: MoneyInput grandTotal: MoneyInput shippingAddress: OrgPostalAddressInput billingAddress: OrgPostalAddressInput paymentState: ShopOrderPaymentState fulfillmentState: ShopOrderFulfillmentState placedAt: DateTime customerNote: String status: String } input ShopOrderUpdateInput { name: String customer: ID company: ID market: ID state: ShopOrderState lines: [ShopOrderLineInput!] currency: String subtotal: MoneyInput discount: ID discountTotal: MoneyInput shippingMethod: ID shippingTotal: MoneyInput taxTotal: MoneyInput grandTotal: MoneyInput shippingAddress: OrgPostalAddressInput billingAddress: OrgPostalAddressInput paymentState: ShopOrderPaymentState fulfillmentState: ShopOrderFulfillmentState placedAt: DateTime customerNote: String status: String } """Payment option offered on a market: provider code, capture mode and customer-facing copy.""" type ShopPaymentMethod { """Name""" name: String! """Code""" code: String! """Market""" market: ShopMarket """Provider""" provider: ShopPaymentMethodProvider! """Provider code""" providerCode: String """Capture""" captureMode: ShopPaymentMethodCaptureMode """Requires authorisation""" requiresAuthorisation: Boolean """Surcharge""" surcharge: Money """Customer instructions""" instructions: String """Sort order""" sortOrder: Int """Active""" active: Boolean id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopPaymentMethodPage { nodes: [ShopPaymentMethod!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopPaymentMethodCreateInput { name: String! code: String! market: ID provider: ShopPaymentMethodProvider! providerCode: String captureMode: ShopPaymentMethodCaptureMode requiresAuthorisation: Boolean surcharge: MoneyInput instructions: String sortOrder: Int active: Boolean status: String locale: String } input ShopPaymentMethodUpdateInput { name: String code: String market: ID provider: ShopPaymentMethodProvider providerCode: String captureMode: ShopPaymentMethodCaptureMode requiresAuthorisation: Boolean surcharge: MoneyInput instructions: String sortOrder: Int active: Boolean status: String locale: String } """One provider interaction for an order: authorisation, capture, void or refund, with its external reference.""" type ShopPayment { """Reference""" name: String! """Order""" order: ShopOrder! """Payment method""" method: ShopPaymentMethod """Kind""" kind: ShopPaymentKind! """Currency""" currency: String """Amount""" amount: Money! """State""" state: ShopPaymentState! """Provider reference""" providerReference: String """Processed at""" processedAt: DateTime """Failure reason""" failureReason: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopPaymentPage { nodes: [ShopPayment!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopPaymentCreateInput { name: String! order: ID! method: ID kind: ShopPaymentKind! currency: String amount: MoneyInput! state: ShopPaymentState! providerReference: String processedAt: DateTime failureReason: String status: String } input ShopPaymentUpdateInput { name: String order: ID method: ID kind: ShopPaymentKind currency: String amount: MoneyInput state: ShopPaymentState providerReference: String processedAt: DateTime failureReason: String status: String } """Doneness / doneness / preparation level (rare, medium, well done, extra crispy) with the core temperature the kitchen cooks to.""" type FoodPrepLevel { """Name""" name: String! """Code""" code: String! """Applies to""" appliesTo: [String!]! """Core temperature (°C)""" coreTempC: Float """Cooking minutes""" cookMinutes: Int """Needs food-safety warning""" foodSafetyWarning: Boolean """Sort""" sort: Int """Guest-facing description""" description: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type FoodPrepLevelPage { nodes: [FoodPrepLevel!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input FoodPrepLevelCreateInput { name: String! code: String! appliesTo: [String!] coreTempC: Float cookMinutes: Int foodSafetyWarning: Boolean sort: Int description: String status: String } input FoodPrepLevelUpdateInput { name: String code: String appliesTo: [String!] coreTempC: Float cookMinutes: Int foodSafetyWarning: Boolean sort: Int description: String status: String } """Commercial rules the configurator reads instead of hard-coded numbers: currency, target and floor margin, labour, packaging, overhead, production waste and price rounding. Scoped by item type, category and channel, highest priority wins.""" type FoodPricingPolicy { """Name""" name: String! """Code""" code: String! """Currency""" currency: String """Target margin %""" targetMarginPercent: Float """Minimum margin %""" minMarginPercent: Float """Labour cost per item""" labourCostPerItem: Money """Labour cost per preparation minute""" labourCostPerMinute: Money """Packaging cost""" packagingCost: Money """Overhead % of ingredient cost""" overheadPercent: Float """Default production waste %""" wastePercent: Float """Price rounding""" rounding: FoodPricingPolicyRounding """Applies to item types""" itemTypes: [String!]! """Applies to categories""" categories: [FoodMenuCategory!]! """Applies to channels""" channels: [String!]! """Priority""" priority: Int """Active""" active: Boolean """Notes""" notes: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type FoodPricingPolicyPage { nodes: [FoodPricingPolicy!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input FoodPricingPolicyCreateInput { name: String! code: String! currency: String targetMarginPercent: Float minMarginPercent: Float labourCostPerItem: MoneyInput labourCostPerMinute: MoneyInput packagingCost: MoneyInput overheadPercent: Float wastePercent: Float rounding: FoodPricingPolicyRounding itemTypes: [String!] categories: [ID!] channels: [String!] priority: Int active: Boolean notes: String status: String } input FoodPricingPolicyUpdateInput { name: String code: String currency: String targetMarginPercent: Float minMarginPercent: Float labourCostPerItem: MoneyInput labourCostPerMinute: MoneyInput packagingCost: MoneyInput overheadPercent: Float wastePercent: Float rounding: FoodPricingPolicyRounding itemTypes: [String!] categories: [ID!] channels: [String!] priority: Int active: Boolean notes: String status: String } """Immutable, approved snapshot of a pricing policy. The cost engine prices only from an approved version, so every price breakdown names the exact ruleset (version, checksum, approver) it was produced with. Editing the policy entry creates a new version for review instead of silently repricing the menu.""" type FoodPricingPolicyVersion { """Code""" code: String! """Pricing policy""" policy: FoodPricingPolicy! """Version""" version: Int! """Approval status""" approvalStatus: FoodPricingPolicyVersionApprovalStatus! """Rule snapshot""" snapshot: JSON """Checksum""" checksum: String """Change note""" changeNote: String """Submitted by""" submittedBy: String """Submitted at""" submittedAt: DateTime """Decided by""" approvedBy: String """Decided at""" approvedAt: DateTime """Decision note""" decisionNote: String """Effective from""" effectiveFrom: DateTime """Effective to""" effectiveTo: DateTime id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type FoodPricingPolicyVersionPage { nodes: [FoodPricingPolicyVersion!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input FoodPricingPolicyVersionCreateInput { code: String! policy: ID! version: Int! approvalStatus: FoodPricingPolicyVersionApprovalStatus! snapshot: JSON checksum: String changeNote: String submittedBy: String submittedAt: DateTime approvedBy: String approvedAt: DateTime decisionNote: String effectiveFrom: DateTime effectiveTo: DateTime status: String } input FoodPricingPolicyVersionUpdateInput { code: String policy: ID version: Int approvalStatus: FoodPricingPolicyVersionApprovalStatus snapshot: JSON checksum: String changeNote: String submittedBy: String submittedAt: DateTime approvedBy: String approvedAt: DateTime decisionNote: String effectiveFrom: DateTime effectiveTo: DateTime status: String } """Sellable product with marketing copy, media gallery, pricing and taxonomy.""" type ShopProduct { """Name""" name: String! """Slug""" slug: String! """Summary""" summary: String """Description""" description: String """Gallery""" gallery: [Asset!]! """Brand""" brand: PimBrand """Category""" category: ShopCategory """Tax class""" taxClass: ShopTaxClass """Badges""" badges: [String!]! """Prices""" prices: [ShopPrice!]! """Availability""" state: ShopProductState """Requires shipping""" requiresShipping: Boolean id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopProductPage { nodes: [ShopProduct!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopProductCreateInput { name: String! slug: String! summary: String description: String gallery: [AssetInput!] brand: ID category: ID taxClass: ID badges: [String!] prices: [ShopPriceInput!] state: ShopProductState requiresShipping: Boolean status: String locale: String } input ShopProductUpdateInput { name: String slug: String summary: String description: String gallery: [AssetInput!] brand: ID category: ID taxClass: ID badges: [String!] prices: [ShopPriceInput!] state: ShopProductState requiresShipping: Boolean status: String locale: String } """TMF Category: hierarchical classification of the catalog.""" type ProductCategory { """Name""" name: String! """Code""" code: String! """Description""" description: String """Category image""" image: Asset """Parent category""" parent: ProductCategory """Root category""" isRoot: Boolean """Sort order""" sortOrder: Int """Lifecycle status""" lifecycleStatus: LifecycleStatus """Valid for""" validFor: TmfValidityPeriod """Tags""" tags: [ContentTag!]! id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ProductCategoryPage { nodes: [ProductCategory!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ProductCategoryCreateInput { name: String! code: String! description: String image: AssetInput parent: ID isRoot: Boolean sortOrder: Int lifecycleStatus: ID validFor: TmfValidityPeriodInput tags: [ID!] status: String locale: String } input ProductCategoryUpdateInput { name: String code: String description: String image: AssetInput parent: ID isRoot: Boolean sortOrder: Int lifecycleStatus: ID validFor: TmfValidityPeriodInput tags: [ID!] status: String locale: String } """TMF ProductSpecificationCharacteristic: a reusable product attribute with its allowed values.""" type ProductCharacteristic { """Name""" name: String! """Code""" code: String! """Description""" description: String """Value type""" valueType: ProductCharacteristicValueType! """Unit of measure""" unitOfMeasure: String """Value pattern (regex)""" regex: String """Min cardinality""" minCardinality: Int """Max cardinality""" maxCardinality: Int """Allowed values""" allowedValues: [TmfCharValue!]! """Configurable by customer""" configurable: Boolean """Variant defining""" variantDefining: Boolean """Extensible""" extensible: Boolean """Category""" category: ProductCategory """Tags""" tags: [ContentTag!]! id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ProductCharacteristicPage { nodes: [ProductCharacteristic!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ProductCharacteristicCreateInput { name: String! code: String! description: String valueType: ProductCharacteristicValueType! unitOfMeasure: String regex: String minCardinality: Int maxCardinality: Int allowedValues: [TmfCharValueInput!] configurable: Boolean variantDefining: Boolean extensible: Boolean category: ID tags: [ID!] status: String } input ProductCharacteristicUpdateInput { name: String code: String description: String valueType: ProductCharacteristicValueType unitOfMeasure: String regex: String minCardinality: Int maxCardinality: Int allowedValues: [TmfCharValueInput!] configurable: Boolean variantDefining: Boolean extensible: Boolean category: ID tags: [ID!] status: String } """TMF ProductOffering: the commercial packaging of a specification for a market.""" type ProductOffering { """Name""" name: String! """Code""" code: String! """Description""" description: String """Product specification""" specification: ProductSpecification! """Offered variants""" variants: [ProductVariant!]! """Prices""" prices: [TmfPrice!]! """Sellable""" isSellable: Boolean """Sales channels""" channels: [String!]! """Primary market""" primaryMarket: String """Lifecycle status""" lifecycleStatus: LifecycleStatus """Valid for""" validFor: TmfValidityPeriod """Categories""" categories: [ProductCategory!]! """Tags""" tags: [ContentTag!]! id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ProductOfferingPage { nodes: [ProductOffering!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ProductOfferingCreateInput { name: String! code: String! description: String specification: ID! variants: [ID!] prices: [TmfPriceInput!] isSellable: Boolean channels: [String!] primaryMarket: String lifecycleStatus: ID validFor: TmfValidityPeriodInput categories: [ID!] tags: [ID!] status: String locale: String } input ProductOfferingUpdateInput { name: String code: String description: String specification: ID variants: [ID!] prices: [TmfPriceInput!] isSellable: Boolean channels: [String!] primaryMarket: String lifecycleStatus: ID validFor: TmfValidityPeriodInput categories: [ID!] tags: [ID!] status: String locale: String } """TMF ProductSpecification: the technical definition of a product.""" type ProductSpecification { """Name""" name: String! """Code""" code: String! """Product number""" productNumber: String """Brand""" brand: String """Description""" description: String """Attachments""" attachments: [Asset!]! """Characteristics""" characteristics: [ProductCharacteristic!]! """Bundle""" isBundle: Boolean """Bundled specifications""" bundledSpecifications: [ProductSpecification!]! """Lifecycle status""" lifecycleStatus: LifecycleStatus """Specification version""" version: String """Valid for""" validFor: TmfValidityPeriod """Categories""" categories: [ProductCategory!]! """Tags""" tags: [ContentTag!]! """External ID""" externalId: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ProductSpecificationPage { nodes: [ProductSpecification!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ProductSpecificationCreateInput { name: String! code: String! productNumber: String brand: String description: String attachments: [AssetInput!] characteristics: [ID!] isBundle: Boolean bundledSpecifications: [ID!] lifecycleStatus: ID version: String validFor: TmfValidityPeriodInput categories: [ID!] tags: [ID!] externalId: String status: String locale: String } input ProductSpecificationUpdateInput { name: String code: String productNumber: String brand: String description: String attachments: [AssetInput!] characteristics: [ID!] isBundle: Boolean bundledSpecifications: [ID!] lifecycleStatus: ID version: String validFor: TmfValidityPeriodInput categories: [ID!] tags: [ID!] externalId: String status: String locale: String } """Sellable variant of a specification, defined by its characteristic values.""" type ProductVariant { """Name""" name: String! """SKU""" sku: String! """Product specification""" specification: ProductSpecification! """GTIN / EAN""" gtin: String """Variant image""" image: Asset """Characteristic values""" characteristics: [TmfVariantCharacteristic!]! """Prices""" prices: [TmfPrice!]! """Stock status""" stockStatus: ProductVariantStockStatus """Stock quantity""" stockQuantity: Int """Default variant""" isDefault: Boolean """Dimensions""" dimensions: TmfDimensions """Lifecycle status""" lifecycleStatus: LifecycleStatus """Valid for""" validFor: TmfValidityPeriod """Tags""" tags: [ContentTag!]! id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ProductVariantPage { nodes: [ProductVariant!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ProductVariantCreateInput { name: String! sku: String! specification: ID! gtin: String image: AssetInput characteristics: [TmfVariantCharacteristicInput!] prices: [TmfPriceInput!] stockStatus: ProductVariantStockStatus stockQuantity: Int isDefault: Boolean dimensions: TmfDimensionsInput lifecycleStatus: ID validFor: TmfValidityPeriodInput tags: [ID!] status: String } input ProductVariantUpdateInput { name: String sku: String specification: ID gtin: String image: AssetInput characteristics: [TmfVariantCharacteristicInput!] prices: [TmfPriceInput!] stockStatus: ProductVariantStockStatus stockQuantity: Int isDefault: Boolean dimensions: TmfDimensionsInput lifecycleStatus: ID validFor: TmfValidityPeriodInput tags: [ID!] status: String } """Purchasable variation of a product: SKU, options, barcode, stock and weight.""" type ShopVariant { """Name""" name: String! """SKU""" sku: String! """Product""" product: ShopProduct! """Barcode / GTIN""" barcode: String """Prices""" prices: [ShopPrice!]! """Stock quantity""" stockQuantity: Int """Weight (kg)""" weightKg: Float """Default variant""" isDefault: Boolean id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopVariantPage { nodes: [ShopVariant!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopVariantCreateInput { name: String! sku: String! product: ID! barcode: String prices: [ShopPriceInput!] stockQuantity: Int weightKg: Float isDefault: Boolean status: String } input ShopVariantUpdateInput { name: String sku: String product: ID barcode: String prices: [ShopPriceInput!] stockQuantity: Int weightKg: Float isDefault: Boolean status: String } """Distribution channel (marketplace, OTA, retail, own store) with credentials metadata.""" type ChmChannel { """Name""" name: String! """Code""" code: String! """Type""" channelType: ChmChannelChannelType! """API endpoint""" endpoint: String """Channel currency""" currency: String """Market""" market: String """Commission %""" commissionPercent: Float """Active""" active: Boolean id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ChmChannelPage { nodes: [ChmChannel!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ChmChannelCreateInput { name: String! code: String! channelType: ChmChannelChannelType! endpoint: String currency: String market: String commissionPercent: Float active: Boolean status: String } input ChmChannelUpdateInput { name: String code: String channelType: ChmChannelChannelType endpoint: String currency: String market: String commissionPercent: Float active: Boolean status: String } """Delivery option offered in a zone, with price bands and a delivery estimate.""" type ShopShippingMethod { """Name""" name: String! """Code""" code: String! """Zone""" zone: ShopShippingZone! """Kind""" carrierKind: ShopShippingMethodCarrierKind """Carrier""" carrier: String """Rates""" rates: [ShopShippingRate!]! """Tax class""" taxClass: ShopTaxClass """Lead time from (days)""" leadTimeDaysMin: Int """Lead time to (days)""" leadTimeDaysMax: Int """Requires shipping address""" requiresAddress: Boolean """Active""" active: Boolean id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopShippingMethodPage { nodes: [ShopShippingMethod!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopShippingMethodCreateInput { name: String! code: String! zone: ID! carrierKind: ShopShippingMethodCarrierKind carrier: String rates: [ShopShippingRateInput!] taxClass: ID leadTimeDaysMin: Int leadTimeDaysMax: Int requiresAddress: Boolean active: Boolean status: String locale: String } input ShopShippingMethodUpdateInput { name: String code: String zone: ID carrierKind: ShopShippingMethodCarrierKind carrier: String rates: [ShopShippingRateInput!] taxClass: ID leadTimeDaysMin: Int leadTimeDaysMax: Int requiresAddress: Boolean active: Boolean status: String locale: String } """Group of countries served by the same shipping methods.""" type ShopShippingZone { """Name""" name: String! """Code""" code: String! """Countries""" countries: JSON! """Sort order""" sortOrder: Int """Active""" active: Boolean id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopShippingZonePage { nodes: [ShopShippingZone!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopShippingZoneCreateInput { name: String! code: String! countries: JSON! sortOrder: Int active: Boolean status: String } input ShopShippingZoneUpdateInput { name: String code: String countries: JSON sortOrder: Int active: Boolean status: String } """Hierarchical storefront category with navigation metadata.""" type ShopCategory { """Name""" name: String! """Slug""" slug: String! """Description""" description: String """Parent category""" parent: ShopCategory """Image""" image: Asset """Sort order""" sortOrder: Int """Show in menu""" showInMenu: Boolean id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopCategoryPage { nodes: [ShopCategory!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopCategoryCreateInput { name: String! slug: String! description: String parent: ID image: AssetInput sortOrder: Int showInMenu: Boolean status: String } input ShopCategoryUpdateInput { name: String slug: String description: String parent: ID image: AssetInput sortOrder: Int showInMenu: Boolean status: String } """Temporary hold on variant stock created during checkout and released when it expires.""" type ShopStockReservation { """Reference""" name: String! """Variant""" variant: ShopVariant! """Cart""" cart: ShopCart """Order""" order: ShopOrder """Quantity""" quantity: Int! """State""" state: ShopStockReservationState! """Expires at""" expiresAt: DateTime id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopStockReservationPage { nodes: [ShopStockReservation!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopStockReservationCreateInput { name: String! variant: ID! cart: ID order: ID quantity: Int! state: ShopStockReservationState! expiresAt: DateTime status: String } input ShopStockReservationUpdateInput { name: String variant: ID cart: ID order: ID quantity: Int state: ShopStockReservationState expiresAt: DateTime status: String } """Cross-entity tag catalogue used for grouping and faceted search.""" type ContentTag { """Name""" name: String! """Slug""" slug: String! """Colour""" color: String """Applies to""" scope: [String!]! """Description""" description: String id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ContentTagPage { nodes: [ContentTag!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ContentTagCreateInput { name: String! slug: String! color: String scope: [String!] description: String status: String } input ContentTagUpdateInput { name: String slug: String color: String scope: [String!] description: String status: String } """Product-level tax grouping (standard, reduced, zero, digital services).""" type ShopTaxClass { """Name""" name: String! """Code""" code: String! """Description""" description: String """Default class""" defaultClass: Boolean id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopTaxClassPage { nodes: [ShopTaxClass!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopTaxClassCreateInput { name: String! code: String! description: String defaultClass: Boolean status: String } input ShopTaxClassUpdateInput { name: String code: String description: String defaultClass: Boolean status: String } """Percentage charged for one tax class in one country or region, within a validity window.""" type ShopTaxRate { """Name""" name: String! """Tax class""" taxClass: ShopTaxClass! """Country""" country: String! """Region / state""" region: String """Rate %""" ratePercent: Float! """Compound on top of other rates""" compound: Boolean """Valid from""" validFrom: Date """Valid to""" validTo: Date id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type ShopTaxRatePage { nodes: [ShopTaxRate!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input ShopTaxRateCreateInput { name: String! taxClass: ID! country: String! region: String ratePercent: Float! compound: Boolean validFrom: Date validTo: Date status: String } input ShopTaxRateUpdateInput { name: String taxClass: ID country: String region: String ratePercent: Float compound: Boolean validFrom: Date validTo: Date status: String } """Structured use case / business case story.""" type UseCase { """Title""" title: String! """Slug""" slug: String! """Industry""" industry: String! """Challenge""" challengeType: String! """Summary""" summary: String """The challenge""" challenge: String """How the platform is used""" solution: String """Outcomes""" outcomes: JSON """Primary audience""" audience: String """Tags""" tags: [String!]! """SEO""" seo: SeoMeta id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type UseCasePage { nodes: [UseCase!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input UseCaseCreateInput { title: String! slug: String! industry: String! challengeType: String! summary: String challenge: String solution: String outcomes: JSON audience: String tags: [String!] seo: SeoMetaInput status: String locale: String } input UseCaseUpdateInput { title: String slug: String industry: String challengeType: String summary: String challenge: String solution: String outcomes: JSON audience: String tags: [String!] seo: SeoMetaInput status: String locale: String } """Physical restaurant: address, opening hours, kitchen stations and the channels it serves.""" type FoodVenue { """Name""" name: String! """Code""" code: String! """Address""" address: OrgPostalAddress """Location""" location: GeoPoint """Timezone""" timezone: String """Phone""" phone: String """Channels""" channels: [String!]! """Kitchen stations""" stations: [String!]! """Seats""" seats: Int """Kitchen capacity (orders/h)""" ordersPerHour: Int """Opening hours""" openingHours: [FoodServiceWindow!]! """Active""" active: Boolean id: ID! status: String! locale: String revision: Int! createdAt: DateTime updatedAt: DateTime publishedAt: DateTime } type FoodVenuePage { nodes: [FoodVenue!]! pageInfo: PageInfo! """Relevance metadata; present only for search reads.""" search: SearchInfo } input FoodVenueCreateInput { name: String! code: String! address: OrgPostalAddressInput location: GeoPointInput timezone: String phone: String channels: [String!] stations: [String!] seats: Int ordersPerHour: Int openingHours: [FoodServiceWindowInput!] active: Boolean status: String } input FoodVenueUpdateInput { name: String code: String address: OrgPostalAddressInput location: GeoPointInput timezone: String phone: String channels: [String!] stations: [String!] seats: Int ordersPerHour: Int openingHours: [FoodServiceWindowInput!] active: Boolean status: String } type Query { """One media asset by id.""" mediaAsset(id: ID!): MediaAsset """Browse the media library of the caller's account.""" mediaAssets(search: String, kind: String, folderId: ID, folder: String, category: String, tags: [String!], missingAlt: Boolean, unused: Boolean, limit: Int = 50, offset: Int = 0): [MediaAsset!]! """Cross-model full-text search with drill-down facet counts. Page through the ranking with offset or page; relevance order is computed before the window is cut, so pages never reshuffle.""" search(q: String!, models: [String!], status: [String!], locale: [String!], category: [String!], tags: [String!], facets: [FacetFilterInput!], limit: Int = 25, offset: Int = 0, page: Int, perModelLimit: Int = 50, highlight: Boolean = true, snippetLength: Int = 160, maxSnippets: Int = 3): SearchResult! """Single Account by id.""" orgAccount(id: ID!): OrgAccount """Paginated Accounts.""" orgAccounts(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): OrgAccountPage! """Single Alarm category by id.""" alarmCategory(id: ID!): AlarmCategory """Paginated Alarm categories.""" alarmCategories(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): AlarmCategoryPage! """Single Alarm definition by id.""" alarmDefinition(id: ID!): AlarmDefinition """Paginated Alarm definitions.""" alarmDefinitions(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): AlarmDefinitionPage! """Per-locale field values of one Alarm definition.""" alarmDefinitionTranslations(id: ID!): [Translation!]! """Translation history of one Alarm definition.""" alarmDefinitionTranslationRevisions(id: ID!, locale: String, limit: Int = 50, offset: Int = 0): [TranslationRevision!]! """Single Allergen by id.""" foodAllergen(id: ID!): FoodAllergen """Paginated Allergens.""" foodAllergens(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): FoodAllergenPage! """Single Article by id.""" article(id: ID!): Article """Paginated Articles.""" articles(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ArticlePage! """Single Brand by id.""" pimBrand(id: ID!): PimBrand """Paginated Brands.""" pimBrands(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): PimBrandPage! """Single Cart by id.""" shopCart(id: ID!): ShopCart """Paginated Carts.""" shopCarts(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopCartPage! """Single Contact by id.""" orgContact(id: ID!): OrgContact """Paginated Contacts.""" orgContacts(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): OrgContactPage! """Single Country by id.""" country(id: ID!): Country """Paginated Countries.""" countries(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): CountryPage! """Single Customer profile by id.""" shopCustomerProfile(id: ID!): ShopCustomerProfile """Paginated Customer profiles.""" shopCustomerProfiles(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopCustomerProfilePage! """Single Diet label by id.""" foodDiet(id: ID!): FoodDiet """Paginated Diet labels.""" foodDiets(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): FoodDietPage! """Single Discount by id.""" shopDiscount(id: ID!): ShopDiscount """Paginated Discounts.""" shopDiscounts(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopDiscountPage! """Single Fulfilment by id.""" shopFulfillment(id: ID!): ShopFulfillment """Paginated Fulfilments.""" shopFulfillments(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopFulfillmentPage! """Single Ingredient by id.""" foodIngredient(id: ID!): FoodIngredient """Paginated Ingredients.""" foodIngredients(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): FoodIngredientPage! """Single Landing page by id.""" landingPage(id: ID!): LandingPage """Paginated Landing pages.""" landingPages(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): LandingPagePage! """Single Lifecycle status by id.""" lifecycleStatus(id: ID!): LifecycleStatus """Paginated Lifecycle statuses.""" lifecycleStatuses(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): LifecycleStatusPage! """Single Market by id.""" shopMarket(id: ID!): ShopMarket """Paginated Markets.""" shopMarkets(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopMarketPage! """Single Menu by id.""" foodMenu(id: ID!): FoodMenu """Paginated Menus.""" foodMenus(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): FoodMenuPage! """Single Menu category by id.""" foodMenuCategory(id: ID!): FoodMenuCategory """Paginated Menu categories.""" foodMenuCategories(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): FoodMenuCategoryPage! """Single Menu item by id.""" foodMenuItem(id: ID!): FoodMenuItem """Paginated Menu items.""" foodMenuItems(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): FoodMenuItemPage! """Single Modifier group by id.""" foodModifierGroup(id: ID!): FoodModifierGroup """Paginated Modifier groups.""" foodModifierGroups(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): FoodModifierGroupPage! """Single Modifier option by id.""" foodModifierOption(id: ID!): FoodModifierOption """Paginated Modifier options.""" foodModifierOptions(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): FoodModifierOptionPage! """Single Order by id.""" shopOrder(id: ID!): ShopOrder """Paginated Orders.""" shopOrders(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopOrderPage! """Single Payment method by id.""" shopPaymentMethod(id: ID!): ShopPaymentMethod """Paginated Payment methods.""" shopPaymentMethods(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopPaymentMethodPage! """Per-locale field values of one Payment method.""" shopPaymentMethodTranslations(id: ID!): [Translation!]! """Translation history of one Payment method.""" shopPaymentMethodTranslationRevisions(id: ID!, locale: String, limit: Int = 50, offset: Int = 0): [TranslationRevision!]! """Single Payment transaction by id.""" shopPayment(id: ID!): ShopPayment """Paginated Payment transactions.""" shopPayments(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopPaymentPage! """Single Preparation level by id.""" foodPrepLevel(id: ID!): FoodPrepLevel """Paginated Preparation levels.""" foodPrepLevels(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): FoodPrepLevelPage! """Single Pricing policy by id.""" foodPricingPolicy(id: ID!): FoodPricingPolicy """Paginated Pricing policies.""" foodPricingPolicies(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): FoodPricingPolicyPage! """Single Pricing policy version by id.""" foodPricingPolicyVersion(id: ID!): FoodPricingPolicyVersion """Paginated Pricing policy versions.""" foodPricingPolicyVersions(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): FoodPricingPolicyVersionPage! """Single Product by id.""" shopProduct(id: ID!): ShopProduct """Paginated Products.""" shopProducts(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopProductPage! """Per-locale field values of one Product.""" shopProductTranslations(id: ID!): [Translation!]! """Translation history of one Product.""" shopProductTranslationRevisions(id: ID!, locale: String, limit: Int = 50, offset: Int = 0): [TranslationRevision!]! """Single Product category by id.""" productCategory(id: ID!): ProductCategory """Paginated Product categories.""" productCategories(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ProductCategoryPage! """Per-locale field values of one Product category.""" productCategoryTranslations(id: ID!): [Translation!]! """Translation history of one Product category.""" productCategoryTranslationRevisions(id: ID!, locale: String, limit: Int = 50, offset: Int = 0): [TranslationRevision!]! """Single Product characteristic by id.""" productCharacteristic(id: ID!): ProductCharacteristic """Paginated Product characteristics.""" productCharacteristics(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ProductCharacteristicPage! """Single Product offering by id.""" productOffering(id: ID!): ProductOffering """Paginated Product offerings.""" productOfferings(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ProductOfferingPage! """Per-locale field values of one Product offering.""" productOfferingTranslations(id: ID!): [Translation!]! """Translation history of one Product offering.""" productOfferingTranslationRevisions(id: ID!, locale: String, limit: Int = 50, offset: Int = 0): [TranslationRevision!]! """Single Product specification by id.""" productSpecification(id: ID!): ProductSpecification """Paginated Product specifications.""" productSpecifications(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ProductSpecificationPage! """Per-locale field values of one Product specification.""" productSpecificationTranslations(id: ID!): [Translation!]! """Translation history of one Product specification.""" productSpecificationTranslationRevisions(id: ID!, locale: String, limit: Int = 50, offset: Int = 0): [TranslationRevision!]! """Single Product variant by id.""" productVariant(id: ID!): ProductVariant """Paginated Product variants.""" productVariants(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ProductVariantPage! """Single Product variant by id.""" shopVariant(id: ID!): ShopVariant """Paginated Product variants.""" shopVariants(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopVariantPage! """Single Sales channel by id.""" chmChannel(id: ID!): ChmChannel """Paginated Sales channels.""" chmChannels(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ChmChannelPage! """Single Shipping method by id.""" shopShippingMethod(id: ID!): ShopShippingMethod """Paginated Shipping methods.""" shopShippingMethods(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopShippingMethodPage! """Per-locale field values of one Shipping method.""" shopShippingMethodTranslations(id: ID!): [Translation!]! """Translation history of one Shipping method.""" shopShippingMethodTranslationRevisions(id: ID!, locale: String, limit: Int = 50, offset: Int = 0): [TranslationRevision!]! """Single Shipping zone by id.""" shopShippingZone(id: ID!): ShopShippingZone """Paginated Shipping zones.""" shopShippingZones(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopShippingZonePage! """Single Shop category by id.""" shopCategory(id: ID!): ShopCategory """Paginated Shop categories.""" shopCategories(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopCategoryPage! """Single Stock reservation by id.""" shopStockReservation(id: ID!): ShopStockReservation """Paginated Stock reservations.""" shopStockReservations(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopStockReservationPage! """Single Tag by id.""" contentTag(id: ID!): ContentTag """Paginated Tags.""" contentTags(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ContentTagPage! """Single Tax class by id.""" shopTaxClass(id: ID!): ShopTaxClass """Paginated Tax classes.""" shopTaxClasses(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopTaxClassPage! """Single Tax rate by id.""" shopTaxRate(id: ID!): ShopTaxRate """Paginated Tax rates.""" shopTaxRates(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): ShopTaxRatePage! """Single Use case by id.""" useCase(id: ID!): UseCase """Paginated Use cases.""" useCases(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): UseCasePage! """Single Venue by id.""" foodVenue(id: ID!): FoodVenue """Paginated Venues.""" foodVenues(limit: Int = 25, offset: Int = 0, locale: String, publicationState: PublicationState = ANY, search: String, sort: [SortInput!], filters: [FilterInput!], highlight: Boolean = false, highlightFields: [String!], snippetLength: Int = 160, maxSnippets: Int = 3): FoodVenuePage! } type Mutation { """Upload a new file into the media library.""" uploadMediaAsset(input: MediaAssetUploadInput!): MediaAsset! """Patch metadata (alt text, rights, folder, tags) of one asset.""" updateMediaAsset(id: ID!, patch: MediaAssetPatchInput!): MediaAsset! """Delete an asset. Use force to detach it from content first.""" deleteMediaAsset(id: ID!, force: Boolean = false): Boolean! createOrgAccount(data: OrgAccountCreateInput!): OrgAccount! updateOrgAccount(id: ID!, data: OrgAccountUpdateInput!, ifRevision: Int): OrgAccount! deleteOrgAccount(id: ID!): Boolean! publishOrgAccount(id: ID!): OrgAccount! unpublishOrgAccount(id: ID!): OrgAccount! createAlarmCategory(data: AlarmCategoryCreateInput!): AlarmCategory! updateAlarmCategory(id: ID!, data: AlarmCategoryUpdateInput!, ifRevision: Int): AlarmCategory! deleteAlarmCategory(id: ID!): Boolean! publishAlarmCategory(id: ID!): AlarmCategory! unpublishAlarmCategory(id: ID!): AlarmCategory! createAlarmDefinition(data: AlarmDefinitionCreateInput!): AlarmDefinition! updateAlarmDefinition(id: ID!, data: AlarmDefinitionUpdateInput!, ifRevision: Int): AlarmDefinition! deleteAlarmDefinition(id: ID!): Boolean! publishAlarmDefinition(id: ID!): AlarmDefinition! unpublishAlarmDefinition(id: ID!): AlarmDefinition! saveAlarmDefinitionTranslation(id: ID!, locale: String!, values: JSON!, status: String): Translation! deleteAlarmDefinitionTranslation(id: ID!, locale: String!): Boolean! createFoodAllergen(data: FoodAllergenCreateInput!): FoodAllergen! updateFoodAllergen(id: ID!, data: FoodAllergenUpdateInput!, ifRevision: Int): FoodAllergen! deleteFoodAllergen(id: ID!): Boolean! publishFoodAllergen(id: ID!): FoodAllergen! unpublishFoodAllergen(id: ID!): FoodAllergen! createArticle(data: ArticleCreateInput!): Article! updateArticle(id: ID!, data: ArticleUpdateInput!, ifRevision: Int): Article! deleteArticle(id: ID!): Boolean! publishArticle(id: ID!): Article! unpublishArticle(id: ID!): Article! createPimBrand(data: PimBrandCreateInput!): PimBrand! updatePimBrand(id: ID!, data: PimBrandUpdateInput!, ifRevision: Int): PimBrand! deletePimBrand(id: ID!): Boolean! publishPimBrand(id: ID!): PimBrand! unpublishPimBrand(id: ID!): PimBrand! createShopCart(data: ShopCartCreateInput!): ShopCart! updateShopCart(id: ID!, data: ShopCartUpdateInput!, ifRevision: Int): ShopCart! deleteShopCart(id: ID!): Boolean! publishShopCart(id: ID!): ShopCart! unpublishShopCart(id: ID!): ShopCart! createOrgContact(data: OrgContactCreateInput!): OrgContact! updateOrgContact(id: ID!, data: OrgContactUpdateInput!, ifRevision: Int): OrgContact! deleteOrgContact(id: ID!): Boolean! publishOrgContact(id: ID!): OrgContact! unpublishOrgContact(id: ID!): OrgContact! createCountry(data: CountryCreateInput!): Country! updateCountry(id: ID!, data: CountryUpdateInput!, ifRevision: Int): Country! deleteCountry(id: ID!): Boolean! publishCountry(id: ID!): Country! unpublishCountry(id: ID!): Country! createShopCustomerProfile(data: ShopCustomerProfileCreateInput!): ShopCustomerProfile! updateShopCustomerProfile(id: ID!, data: ShopCustomerProfileUpdateInput!, ifRevision: Int): ShopCustomerProfile! deleteShopCustomerProfile(id: ID!): Boolean! publishShopCustomerProfile(id: ID!): ShopCustomerProfile! unpublishShopCustomerProfile(id: ID!): ShopCustomerProfile! createFoodDiet(data: FoodDietCreateInput!): FoodDiet! updateFoodDiet(id: ID!, data: FoodDietUpdateInput!, ifRevision: Int): FoodDiet! deleteFoodDiet(id: ID!): Boolean! publishFoodDiet(id: ID!): FoodDiet! unpublishFoodDiet(id: ID!): FoodDiet! createShopDiscount(data: ShopDiscountCreateInput!): ShopDiscount! updateShopDiscount(id: ID!, data: ShopDiscountUpdateInput!, ifRevision: Int): ShopDiscount! deleteShopDiscount(id: ID!): Boolean! publishShopDiscount(id: ID!): ShopDiscount! unpublishShopDiscount(id: ID!): ShopDiscount! createShopFulfillment(data: ShopFulfillmentCreateInput!): ShopFulfillment! updateShopFulfillment(id: ID!, data: ShopFulfillmentUpdateInput!, ifRevision: Int): ShopFulfillment! deleteShopFulfillment(id: ID!): Boolean! publishShopFulfillment(id: ID!): ShopFulfillment! unpublishShopFulfillment(id: ID!): ShopFulfillment! createFoodIngredient(data: FoodIngredientCreateInput!): FoodIngredient! updateFoodIngredient(id: ID!, data: FoodIngredientUpdateInput!, ifRevision: Int): FoodIngredient! deleteFoodIngredient(id: ID!): Boolean! publishFoodIngredient(id: ID!): FoodIngredient! unpublishFoodIngredient(id: ID!): FoodIngredient! createLandingPage(data: LandingPageCreateInput!): LandingPage! updateLandingPage(id: ID!, data: LandingPageUpdateInput!, ifRevision: Int): LandingPage! deleteLandingPage(id: ID!): Boolean! publishLandingPage(id: ID!): LandingPage! unpublishLandingPage(id: ID!): LandingPage! createLifecycleStatus(data: LifecycleStatusCreateInput!): LifecycleStatus! updateLifecycleStatus(id: ID!, data: LifecycleStatusUpdateInput!, ifRevision: Int): LifecycleStatus! deleteLifecycleStatus(id: ID!): Boolean! publishLifecycleStatus(id: ID!): LifecycleStatus! unpublishLifecycleStatus(id: ID!): LifecycleStatus! createShopMarket(data: ShopMarketCreateInput!): ShopMarket! updateShopMarket(id: ID!, data: ShopMarketUpdateInput!, ifRevision: Int): ShopMarket! deleteShopMarket(id: ID!): Boolean! publishShopMarket(id: ID!): ShopMarket! unpublishShopMarket(id: ID!): ShopMarket! createFoodMenu(data: FoodMenuCreateInput!): FoodMenu! updateFoodMenu(id: ID!, data: FoodMenuUpdateInput!, ifRevision: Int): FoodMenu! deleteFoodMenu(id: ID!): Boolean! publishFoodMenu(id: ID!): FoodMenu! unpublishFoodMenu(id: ID!): FoodMenu! createFoodMenuCategory(data: FoodMenuCategoryCreateInput!): FoodMenuCategory! updateFoodMenuCategory(id: ID!, data: FoodMenuCategoryUpdateInput!, ifRevision: Int): FoodMenuCategory! deleteFoodMenuCategory(id: ID!): Boolean! publishFoodMenuCategory(id: ID!): FoodMenuCategory! unpublishFoodMenuCategory(id: ID!): FoodMenuCategory! createFoodMenuItem(data: FoodMenuItemCreateInput!): FoodMenuItem! updateFoodMenuItem(id: ID!, data: FoodMenuItemUpdateInput!, ifRevision: Int): FoodMenuItem! deleteFoodMenuItem(id: ID!): Boolean! publishFoodMenuItem(id: ID!): FoodMenuItem! unpublishFoodMenuItem(id: ID!): FoodMenuItem! createFoodModifierGroup(data: FoodModifierGroupCreateInput!): FoodModifierGroup! updateFoodModifierGroup(id: ID!, data: FoodModifierGroupUpdateInput!, ifRevision: Int): FoodModifierGroup! deleteFoodModifierGroup(id: ID!): Boolean! publishFoodModifierGroup(id: ID!): FoodModifierGroup! unpublishFoodModifierGroup(id: ID!): FoodModifierGroup! createFoodModifierOption(data: FoodModifierOptionCreateInput!): FoodModifierOption! updateFoodModifierOption(id: ID!, data: FoodModifierOptionUpdateInput!, ifRevision: Int): FoodModifierOption! deleteFoodModifierOption(id: ID!): Boolean! publishFoodModifierOption(id: ID!): FoodModifierOption! unpublishFoodModifierOption(id: ID!): FoodModifierOption! createShopOrder(data: ShopOrderCreateInput!): ShopOrder! updateShopOrder(id: ID!, data: ShopOrderUpdateInput!, ifRevision: Int): ShopOrder! deleteShopOrder(id: ID!): Boolean! publishShopOrder(id: ID!): ShopOrder! unpublishShopOrder(id: ID!): ShopOrder! createShopPaymentMethod(data: ShopPaymentMethodCreateInput!): ShopPaymentMethod! updateShopPaymentMethod(id: ID!, data: ShopPaymentMethodUpdateInput!, ifRevision: Int): ShopPaymentMethod! deleteShopPaymentMethod(id: ID!): Boolean! publishShopPaymentMethod(id: ID!): ShopPaymentMethod! unpublishShopPaymentMethod(id: ID!): ShopPaymentMethod! saveShopPaymentMethodTranslation(id: ID!, locale: String!, values: JSON!, status: String): Translation! deleteShopPaymentMethodTranslation(id: ID!, locale: String!): Boolean! createShopPayment(data: ShopPaymentCreateInput!): ShopPayment! updateShopPayment(id: ID!, data: ShopPaymentUpdateInput!, ifRevision: Int): ShopPayment! deleteShopPayment(id: ID!): Boolean! publishShopPayment(id: ID!): ShopPayment! unpublishShopPayment(id: ID!): ShopPayment! createFoodPrepLevel(data: FoodPrepLevelCreateInput!): FoodPrepLevel! updateFoodPrepLevel(id: ID!, data: FoodPrepLevelUpdateInput!, ifRevision: Int): FoodPrepLevel! deleteFoodPrepLevel(id: ID!): Boolean! publishFoodPrepLevel(id: ID!): FoodPrepLevel! unpublishFoodPrepLevel(id: ID!): FoodPrepLevel! createFoodPricingPolicy(data: FoodPricingPolicyCreateInput!): FoodPricingPolicy! updateFoodPricingPolicy(id: ID!, data: FoodPricingPolicyUpdateInput!, ifRevision: Int): FoodPricingPolicy! deleteFoodPricingPolicy(id: ID!): Boolean! publishFoodPricingPolicy(id: ID!): FoodPricingPolicy! unpublishFoodPricingPolicy(id: ID!): FoodPricingPolicy! createFoodPricingPolicyVersion(data: FoodPricingPolicyVersionCreateInput!): FoodPricingPolicyVersion! updateFoodPricingPolicyVersion(id: ID!, data: FoodPricingPolicyVersionUpdateInput!, ifRevision: Int): FoodPricingPolicyVersion! deleteFoodPricingPolicyVersion(id: ID!): Boolean! publishFoodPricingPolicyVersion(id: ID!): FoodPricingPolicyVersion! unpublishFoodPricingPolicyVersion(id: ID!): FoodPricingPolicyVersion! createShopProduct(data: ShopProductCreateInput!): ShopProduct! updateShopProduct(id: ID!, data: ShopProductUpdateInput!, ifRevision: Int): ShopProduct! deleteShopProduct(id: ID!): Boolean! publishShopProduct(id: ID!): ShopProduct! unpublishShopProduct(id: ID!): ShopProduct! saveShopProductTranslation(id: ID!, locale: String!, values: JSON!, status: String): Translation! deleteShopProductTranslation(id: ID!, locale: String!): Boolean! createProductCategory(data: ProductCategoryCreateInput!): ProductCategory! updateProductCategory(id: ID!, data: ProductCategoryUpdateInput!, ifRevision: Int): ProductCategory! deleteProductCategory(id: ID!): Boolean! publishProductCategory(id: ID!): ProductCategory! unpublishProductCategory(id: ID!): ProductCategory! saveProductCategoryTranslation(id: ID!, locale: String!, values: JSON!, status: String): Translation! deleteProductCategoryTranslation(id: ID!, locale: String!): Boolean! createProductCharacteristic(data: ProductCharacteristicCreateInput!): ProductCharacteristic! updateProductCharacteristic(id: ID!, data: ProductCharacteristicUpdateInput!, ifRevision: Int): ProductCharacteristic! deleteProductCharacteristic(id: ID!): Boolean! publishProductCharacteristic(id: ID!): ProductCharacteristic! unpublishProductCharacteristic(id: ID!): ProductCharacteristic! createProductOffering(data: ProductOfferingCreateInput!): ProductOffering! updateProductOffering(id: ID!, data: ProductOfferingUpdateInput!, ifRevision: Int): ProductOffering! deleteProductOffering(id: ID!): Boolean! publishProductOffering(id: ID!): ProductOffering! unpublishProductOffering(id: ID!): ProductOffering! saveProductOfferingTranslation(id: ID!, locale: String!, values: JSON!, status: String): Translation! deleteProductOfferingTranslation(id: ID!, locale: String!): Boolean! createProductSpecification(data: ProductSpecificationCreateInput!): ProductSpecification! updateProductSpecification(id: ID!, data: ProductSpecificationUpdateInput!, ifRevision: Int): ProductSpecification! deleteProductSpecification(id: ID!): Boolean! publishProductSpecification(id: ID!): ProductSpecification! unpublishProductSpecification(id: ID!): ProductSpecification! saveProductSpecificationTranslation(id: ID!, locale: String!, values: JSON!, status: String): Translation! deleteProductSpecificationTranslation(id: ID!, locale: String!): Boolean! createProductVariant(data: ProductVariantCreateInput!): ProductVariant! updateProductVariant(id: ID!, data: ProductVariantUpdateInput!, ifRevision: Int): ProductVariant! deleteProductVariant(id: ID!): Boolean! publishProductVariant(id: ID!): ProductVariant! unpublishProductVariant(id: ID!): ProductVariant! createShopVariant(data: ShopVariantCreateInput!): ShopVariant! updateShopVariant(id: ID!, data: ShopVariantUpdateInput!, ifRevision: Int): ShopVariant! deleteShopVariant(id: ID!): Boolean! publishShopVariant(id: ID!): ShopVariant! unpublishShopVariant(id: ID!): ShopVariant! createChmChannel(data: ChmChannelCreateInput!): ChmChannel! updateChmChannel(id: ID!, data: ChmChannelUpdateInput!, ifRevision: Int): ChmChannel! deleteChmChannel(id: ID!): Boolean! publishChmChannel(id: ID!): ChmChannel! unpublishChmChannel(id: ID!): ChmChannel! createShopShippingMethod(data: ShopShippingMethodCreateInput!): ShopShippingMethod! updateShopShippingMethod(id: ID!, data: ShopShippingMethodUpdateInput!, ifRevision: Int): ShopShippingMethod! deleteShopShippingMethod(id: ID!): Boolean! publishShopShippingMethod(id: ID!): ShopShippingMethod! unpublishShopShippingMethod(id: ID!): ShopShippingMethod! saveShopShippingMethodTranslation(id: ID!, locale: String!, values: JSON!, status: String): Translation! deleteShopShippingMethodTranslation(id: ID!, locale: String!): Boolean! createShopShippingZone(data: ShopShippingZoneCreateInput!): ShopShippingZone! updateShopShippingZone(id: ID!, data: ShopShippingZoneUpdateInput!, ifRevision: Int): ShopShippingZone! deleteShopShippingZone(id: ID!): Boolean! publishShopShippingZone(id: ID!): ShopShippingZone! unpublishShopShippingZone(id: ID!): ShopShippingZone! createShopCategory(data: ShopCategoryCreateInput!): ShopCategory! updateShopCategory(id: ID!, data: ShopCategoryUpdateInput!, ifRevision: Int): ShopCategory! deleteShopCategory(id: ID!): Boolean! publishShopCategory(id: ID!): ShopCategory! unpublishShopCategory(id: ID!): ShopCategory! createShopStockReservation(data: ShopStockReservationCreateInput!): ShopStockReservation! updateShopStockReservation(id: ID!, data: ShopStockReservationUpdateInput!, ifRevision: Int): ShopStockReservation! deleteShopStockReservation(id: ID!): Boolean! publishShopStockReservation(id: ID!): ShopStockReservation! unpublishShopStockReservation(id: ID!): ShopStockReservation! createContentTag(data: ContentTagCreateInput!): ContentTag! updateContentTag(id: ID!, data: ContentTagUpdateInput!, ifRevision: Int): ContentTag! deleteContentTag(id: ID!): Boolean! publishContentTag(id: ID!): ContentTag! unpublishContentTag(id: ID!): ContentTag! createShopTaxClass(data: ShopTaxClassCreateInput!): ShopTaxClass! updateShopTaxClass(id: ID!, data: ShopTaxClassUpdateInput!, ifRevision: Int): ShopTaxClass! deleteShopTaxClass(id: ID!): Boolean! publishShopTaxClass(id: ID!): ShopTaxClass! unpublishShopTaxClass(id: ID!): ShopTaxClass! createShopTaxRate(data: ShopTaxRateCreateInput!): ShopTaxRate! updateShopTaxRate(id: ID!, data: ShopTaxRateUpdateInput!, ifRevision: Int): ShopTaxRate! deleteShopTaxRate(id: ID!): Boolean! publishShopTaxRate(id: ID!): ShopTaxRate! unpublishShopTaxRate(id: ID!): ShopTaxRate! createUseCase(data: UseCaseCreateInput!): UseCase! updateUseCase(id: ID!, data: UseCaseUpdateInput!, ifRevision: Int): UseCase! deleteUseCase(id: ID!): Boolean! publishUseCase(id: ID!): UseCase! unpublishUseCase(id: ID!): UseCase! createFoodVenue(data: FoodVenueCreateInput!): FoodVenue! updateFoodVenue(id: ID!, data: FoodVenueUpdateInput!, ifRevision: Int): FoodVenue! deleteFoodVenue(id: ID!): Boolean! publishFoodVenue(id: ID!): FoodVenue! unpublishFoodVenue(id: ID!): FoodVenue! } schema { query: Query mutation: Mutation }