{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/toast-tab/refs/heads/main/json-schema/menus-modifier-group-schema.json", "title": "ModifierGroup", "description": "Information about a modifier group configured for this restaurant, including an array of modifier options contained in the group.\n", "type": "object", "properties": { "name": { "description": "A descriptive name for this modifier group, for example, \"Pizza Toppings\" or \"Salad Dressings\".\n", "type": "string", "example": "Example Name" }, "guid": { "description": "A unique identifier for this modifier group, assigned by the Toast POS system.\n", "type": "string", "example": "5a401af8-d2e2-4090-8c45-9f87b8b6c4d1" }, "referenceId": { "description": "An integer identifier that is used to refer to this modifier group by items and portions that use it.\n", "type": "integer", "example": 1 }, "multiLocationId": { "$ref": "#/$defs/MultiLocationId" }, "masterId": { "$ref": "#/$defs/MasterId" }, "posName": { "$ref": "#/$defs/PosName" }, "posButtonColorLight": { "$ref": "#/$defs/PosButtonColorLight" }, "posButtonColorDark": { "$ref": "#/$defs/PosButtonColorDark" }, "visibility": { "$ref": "#/$defs/Visibility" }, "pricingStrategy": { "type": "string", "description": "A string that represents the pricing strategy used for this modifier group.\n\nIf there is no additional charge for the modifier options in this group, or if the modifier options in the group are priced individually, then the `pricingStrategy` value is NONE.\n\nIf the modifier group is priced at the group level and is using the:\n * Fixed Price pricing strategy, then the `pricingStrategy` value is NONE.\n * Sequence Price pricing strategy, then the `pricingStrategy` value is SEQUENCE_PRICE.\n * Size Price pricing strategy, then the `pricingStrategy` value is SIZE_PRICE.\n * Size/Sequence Price pricing strategy, then the `pricingStrategy` value is SIZE_SEQUENCE_PRICE.\n\n \nIf the `pricingStrategy` value is NONE, then the prices for the modifier options in this group are resolved down to the modifier option level and you can retrieve them from the `price` value of the individual `ModifierOption` objects.\n\nIf the `pricingStrategy` value is SIZE_PRICE, SEQUENCE_PRICE, or SIZE_SEQUENCE_PRICE, then you must use the rules provided in _this modifier group's_ `pricingRules` value to calculate the prices for the modifier options in the group.\n", "example": "string" }, "pricingRules": { "type": "object", "description": "A `PricingRules` object with information for calculating the prices for the modifier options contained in this modifier group. You use a modifier group's `pricingRules` object, in conjunction with its `pricingStrategy` value, to calculate prices for the group's modifier options when the group uses the Size Price, Sequence Price, or Size/Sequence Price pricing strategy.\n\nThe `pricingRules` object takes different forms depending on the pricing strategy configured for the modifier group. Use the `pricingStrategy` value to determine which pricing strategy has been used so that you can properly interpret the data in the `pricingRules` object. If the `pricingStrategy` value is NONE, the `pricingRules` object is null because you can retrieve the price from a `ModifierOption` object's `price` value without additional calculation. For the SIZE_PRICE, SEQUENCE_PRICE, and SIZE_SEQUENCE_PRICE pricing strategies, the `pricingRules` object contains additional values that you use to calculate the modifier option prices.\n", "items": { "$ref": "#/$defs/PricingRules" }, "x-nullable": true }, "defaultOptionsChargePrice": { "description": "Indicates whether the prices associated with any default modifiers in this group are added to the cost of the menu items they modify.\n\nValues are:\n * NO: The default modifier price is ignored. No change is made to the cost of the menu item.\n * YES: The default modifier price is added to the menu item price. YES is the default setting for `defaultOptionsChargePrice`.\n\nFor example, consider a scenario where Cheese is a default modifier for a Burger menu item (this means that Cheese is always included as a modifier option when you order a Burger unless it is explicitly removed). The price of the Cheese modifier option is $1 while the price of the Burger is $8. When `defaultOptionsChargePrice` is set to NO, a Burger costs $8 (the Cheese default modifier price is not added to the Burger price). When `defaultOptionsChargePrice` is set to YES, a Burger costs $9 (the Cheese default modifier price is added to the Burger price). If the Cheese default modifier is removed from the Burger menu item, the price of the Burger remains $8. Removing a default modifier from a menu item does not change the menu item\u2019s price, regardless of the `defaultOptionsChargePrice` setting.\n\nThe `defaultOptionsChargePrice` value must be set to NO in order to use substitution pricing. See `defaultOptionsSubstitutionPricing` for more information.\n", "type": "string", "enum": [ "NO", "YES" ], "example": "NO" }, "defaultOptionsSubstitutionPricing": { "description": "Indicates whether substitution pricing is enabled for the modifier group.\n\nIn Toast Web, you must set the `defaultOptionsChargePrice` configuration for a modifier group to NO before you can enable substitution pricing for the group. This means that the costs of default modifiers in the group do not increase the price of the menu items they apply to. These default modifiers continue to have a monetary value, however. By enabling substitution pricing, you are configuring the modifier group so that if any of its default modifiers are removed from a menu item, the monetary value of those default modifiers can be applied to the purchase of other modifier options within the same modifier group (even though the cost of those default modifiers was not explicitly added to the cost of the menu item).\n\nFor example, a guest orders a salad that comes with chicken by default but asks to substitute salmon for the chicken. The price of the chicken option is $7. The price of the salmon option is $9. In this case, the Toast POS system calculates the difference and charges the substitution price of $2 for the salmon (not the regular price of $9).\n\nValues for `defaultOptionsSubstitutionPricing` include:\n * YES: Substitution pricing is enabled. Substitution pricing allows a guest to remove one or more default modifiers from a menu item and apply the value of those modifiers toward the purchase of one or more other modifier options in the same modifier group.\n * NO: Substitution pricing is not enabled. Removing a default modifier from a menu item has no impact on the price of the menu item or on any other modifier options that get added. For example, a guest orders a burger that comes with cheese by default but asks to substitute bacon instead of cheese. The price of the burger is $8. The price of the default cheese modifier is $1 but it is not added to the cost of the burger because `defaultOptionsChargePrice` is set to NO. The price of the bacon modifier option is $3. In this scenario, the customer would pay $11, $8 for the burger and $3 for the bacon. No credit is given for removing the cheese modifier option. `NO` is the default setting for `defaultOptionsSubstitutionPricing`.\n\nRemoving default modifiers from a menu item never reduces the price of the menu item. If you remove the chicken from a $10 salad that includes chicken by default, the price of the salad remains $10. If you remove the chicken and substitute other modifier options that cost less than the chicken, the price of the salad remains $10. If you remove the chicken and replace it with modifier options that cost more than the chicken, the price increases by the difference in modifier option cost if you have substitution pricing enabled.\n", "type": "string", "enum": [ "NO", "YES" ], "example": "NO" }, "minSelections": { "type": "integer", "description": "The minimum number of modifier options that a customer can choose from this modifier group.\n\nIf a server is not required to select a modifier option from this modifier group, `minSelections` is set to 0.\n\nIf a server must select a modifier option from this modifier group, `minSelections` must be set to 1 or higher. For example, a Temperature modifier group could be set to 1 to require a server to choose a temperature (Rare, Medium Rare, Medium, or Well Done) when placing a steak order. The orders API rejects an order if it does not follow the `minSelections` requirement for a modifier group.\n\nThe `minSelections` and `maxSelections` values can be used in conjunction with one another. For example, consider the following modifier group configuration:\n\n* Modifier Group: Cheese\n* Modifier Options: ( Cheddar, American, Swiss )\n* maxSelections: 2\n* minSelections: 1\n\nWith this configuration:\n * You can select AT MOST two different cheeses from this group to apply to the menu item (the `maxSelections` value).\n * You must select AT LEAST one cheese from this group to apply to the menu item (the `minSelections` value).\n", "example": 1 }, "maxSelections": { "type": "integer", "description": "The maximum number of modifier options that a customer can choose from this modifier group. `maxSelections` is null if a customer can choose an unlimited number of modifier options from this modifier group. It is 1 if the modifier group is not enabled for multiple selections. The orders API rejects an order if it does not follow the `maxSelections` requirement for a modifier group.\n\nThe `minSelections` and `maxSelections` values can be used in conjunction with one another. For example, consider the following modifier group configuration:\n\n* Modifier Group: Cheese\n* Modifier Options: ( Cheddar, American, Swiss )\n* maxSelections: 2\n* minSelections: 1\n\nWith this configuration:\n * You can select AT MOST two different cheeses from this group to apply to the menu item (the `maxSelections` value).\n * You must select AT LEAST one cheese from this group to apply to the menu item (the `minSelections` value).\n", "x-nullable": true, "example": 1 }, "requiredMode": { "description": "Specifies how the modifier group appears and behaves in the Toast POS app. Values include:\n * REQUIRED: Forces a server to make a selection from the modifier group before continuing to the next screen in the Toast POS app. Note that the orders API rejects an order if a modifier option is not included for a modifier group whose `requiredMode` value is set to REQUIRED.\n * OPTIONAL FORCE SHOW: Prompts the server to view the modifier group but does not force them to choose a modifier option from it before continuing to the next screen in the Toast POS app. This setting is typically used for upselling.\n * OPTIONAL: The modifier group does not appear when an associated menu item is selected but the server can access it on the Toast POS app if necessary.\n", "type": "string", "enum": [ "REQUIRED", "OPTIONAL_FORCE_SHOW", "OPTIONAL" ], "example": "REQUIRED" }, "isMultiSelect": { "type": "boolean", "description": "Indicates whether you can select more than one modifier option from this modifier group.\n\nThe `isMultiSelect` value provides similar information to the `maxSelections` value in a different format. If `isMultiSelect` is TRUE, then by definition more than one modifier option can be selected from the modifier group, so `maxSelections` must be greater than 1 or null (a null value indicates that an unlimited number of selections can be made from the modifier group). If `isMultiSelect` is FALSE, then only one modifier option may be selected from the modifier group and the Toast POS system enforces a setting of 1 for `maxSelections`.\n\nAlso, if `isMultiSelect` is FALSE for a modifier group, the Toast POS system enforces a setting of FALSE for the `allowsDuplicates` value of the group\u2019s modifier options. This prevents more than one instance of a modifier option being selected for the group. Similarly, the orders API rejects any orders that specify more than one modifier option for a modifier group whose `isMultiSelect` value is FALSE.\n", "example": true }, "preModifierGroupReference": { "type": "integer", "description": "The `referenceId` of a `PreModifierGroup` object. This object defines the premodifiers that can be applied to the modifier options contained in this modifier group. Premodifiers alter the display of modifier options on receipts and tickets to satisfy guest requests such as EXTRA or ON THE SIDE. Premodifiers can also be configured to modify the cost of the modifier options they are applied to, for example, by charging more for an EXTRA serving of a modifier option.\n", "example": 1 }, "modifierOptionReferences": { "type": "array", "description": "An array of `referenceId`s for `ModifierOption` objects. These objects define the modifier options contained in this modifier group.\n", "minItems": 0, "items": { "type": "integer" } } }, "$defs": { "MultiLocationId": { "type": "string", "description": "An identifier that is used to identify and consolidate menu entities that are versions of each other.\n\n`multiLocationId` replaces `masterId`. `multiLocationId` and `masterId` always have the same value.\n\nMenu entities can be versioned. Those versions can be assigned to specific restaurant locations, or groups of locations, in a management group. For example, you could have two versions of a burger, one for a Boston location and another for a New York City location. Versioned menu entities share the majority of, but not all of, their data. For example, the Boston version is called the Minuteman Burger and has pickles, while the New York City version is called the Empire Burger and does not.\n\nYou use the `multiLocationId` to identify menu entities that are versions of each other. To continue the example above, the Minuteman Burger in the JSON returned for the Boston location has the same `multilocationId` as the Empire Burger in the JSON returned for the New York City location. These matching `multlocationId` values indicate that the two items are related versions of the same item. In Toast reports, this allows a restaurant to track sales of the burger across both locations.\n\nThe Toast POS system ensures that once a `multilocationId` value is assigned to a set of versions within a management group, that `multiLocationId` is not used for any other version sets in the same management group. It does not guarantee, however, that the `multiLocationId` is not used by another management group to identify a set of versions within it.\n\nSee Toast identifiers in the Toast Developer Guide for more information on the `multiLocationId` and its relationship to other Toast identifiers.\n\nSee Enterprise module overview in the Toast Platform Guide for more information on the enterprise module and versioning.\n" }, "MasterId": { "type": "integer", "format": "int64", "description": "This value is deprecated. Instead of `masterId`, use `multiLocationId`.\n\nAn identifier that is used to identify and consolidate menu entities that are versions of each other.\n" }, "PosName": { "type": "string", "description": "The button label name that appears for this menu entity in the Toast POS app. `posName` contains an empty string if a `posName` has not been defined for the menu entity and the `name` value is used for the button label instead.\n" }, "PosButtonColorLight": { "type": "string", "description": "The color of the menu entity's button on the Toast POS app, when the app is running in light mode.\n \nWhen an employee configures a POS button's color, they select a color pairing that consists of two colors, one for light mode and one for dark mode. `posButtonColorLight` contains the HEX code for the light mode color.\n\n`posButtonColorLight` defaults to `#f7f7f7`, the HEX code when the `WHITE` color pairing is chosen.\n\nThe following list shows the possible HEX codes for `posButtonColorLight`, with the associated color pairing in parentheses.\n\n* #f7f7f7 (WHITE)\n* #ffe6e9 (TERRACOTTA_1)\n* #efa49f (TERRACOTTA_2)\n* #f07166 (TERRACOTTA_3)\n* #e45a4e (TERRACOTTA_4)\n* #fbd9b6 (ORANGE_1)\n* #f7be6e (ORANGE_2)\n* #f98c1f (ORANGE_3)\n* #e56f1a (ORANGE_4) \n* #fbf5b6 (YELLOW_1)\n* #fed850 (YELLOW_2)\n* #e9b10c (YELLOW_3)\n* #c78605 (YELLOW_4) \n* #e8f7d4 (GRASS_1)\n* #afe26c (GRASS_2)\n* #71b314 (GRASS_3)\n* #32a206 (GRASS_4) \n* #e3f0fb (SKY_1)\n* #9fc5f0 (SKY_2)\n* #77a5e4 (SKY_3)\n* #558edd (SKY_4) \n* #f1e3fd (LAVENDER_1)\n* #dab2f7 (LAVENDER_2)\n* #b26ee2 (LAVENDER_3)\n* #a270db (LAVENDER_4) \n* #d0d0d0 (GRAY_1)\n* #c3c3c3 (GRAY_2)\n* #b1b1b1 (GRAY_3)\n* #989898 (GRAY_4)\n" }, "PosButtonColorDark": { "type": "string", "description": "The color of the menu entity's button on the Toast POS app, when the app is running in dark mode.\n \nWhen an employee configures a POS button's color, they select a color pairing that consists of two colors, one for light mode and one for dark mode. `posButtonColorDark` contains the HEX code for the dark mode color.\n\n`posButtonColorDark` defaults to `#1a1c23`, the HEX code when the `WHITE` color pairing is chosen.\n\nThe following list shows the possible HEX codes for `posButtonColorDark`, with the associated color pairing in parentheses.\n\n* #1a1c23 (WHITE)\n* #7e635d (TERRACOTTA_1)\n* #74504D (TERRACOTTA_2)\n* #722e25 (TERRACOTTA_3)\n* #561408 (TERRACOTTA_4)\n* #8f5f3d (ORANGE_1)\n* #7e4116 (ORANGE_2)\n* #803500 (ORANGE_3)\n* #682d03 (ORANGE_4) \n* #7e6b44 (YELLOW_1)\n* #7b5f27 (YELLOW_2)\n* #7c5000 (YELLOW_3)\n* #633d09 (YELLOW_4) \n* #657552 (GRASS_1)\n* #556e34 (GRASS_2)\n* #37570a (GRASS_3)\n* #113a00 (GRASS_4) \n* #637486 (SKY_1)\n* #4d6074 (SKY_2)\n* #2a456b (SKY_3)\n* #213554 (SKY_4) \n* #78668a (LAVENDER_1)\n* #5e4776 (LAVENDER_2)\n* #402960 (LAVENDER_3)\n* #25174f (LAVENDER_4) \n* #6c6c6c (GRAY_1)\n* #5f5f5f (GRAY_2)\n* #474747 (GRAY_3)\n* #404040 (GRAY_4)\n" }, "Visibility": { "type": "array", "description": "An array of strings that indicate where this menu entity is visible:\n\n* POS: The menu entity is visible in the Toast POS app. \n\n* KIOSK: The menu entity is visible on a Toast kiosk. \n\n* TOAST_ONLINE_ORDERING: The menu entity is visible in the Toast online\n ordering site for this restaurant. \n\n* ORDERING_PARTNERS: The restaurants wants this menu entity to be visible\n on online ordering sites that integrate with the Toast POS system using the orders API. \n\n* GRUBHUB: Deprecated. The menu entity is included during a menu sync to\n Grubhub and will be visible on the Grubhub online ordering service after a\n menu sync has completed. _Note:_ Conceptually, the _Grubhub_ configuration\n option that was associated with the `GRUBHUB` string in this array has\n been replaced by the more general _Online orders: Ordering partners_\n configuration option and restaurants that used the _Grubhub_ option have\n been automatically migrated to the new _Online orders: Ordering partners_\n option. This means that any menu entity that had the _Grubhub_ option set\n to _Yes_ will now have the _Online orders: Ordering partners_ option\n enabled and the `ORDERING_PARTNERS` enum will be present in the\n `visibility` array for it. To support backwards compatibility, the\n `visibility` array for these entities will also continue to contain the\n `GRUBHUB` enum for a short period of time. See Menu\n Visibility Enhancements (Rolled Out) for more information.\n\nThe `visibility` array is empty if the menu entity is not configured to be visible for any of the use cases listed above.\n", "items": { "type": "string", "enum": [ "POS", "KIOSK", "GRUBHUB", "TOAST_ONLINE_ORDERING", "ORDERING_PARTNERS" ] } }, "PricingRules": { "type": "object", "description": "The PricingRules object is a multi-use object that provides pricing rules for:\n * A menu item or modifier option item reference that uses the Time Specific Price or Size Price pricing strategy.\n * A modifier group that uses the Size Price, Sequence Price, or Size/Sequence Price pricing strategy.\n", "properties": { "timeSpecificPricingRules": { "description": "An array of `TimeSpecificPrice` objects that define the time-specific prices for a menu item or modifier option item reference that uses the Time Specific Price pricing strategy. If the menu item or modifier option item reference does not use time-specific prices, this array is empty.\n", "type": "array", "items": { "$ref": "#/$defs/TimeSpecificPrice" } }, "sizeSpecificPricingGuid": { "description": "The GUID of a Size modifier group that defines sizes and prices for a menu item or a modifier option item reference that uses the Size Price pricing strategy.\n\nIf the menu item or modifier option item reference does not use the Size Price pricing strategy, then `sizeSpecificPricingGuid` is null.\n\nThe Toast POS system automatically creates a Size modifier group when you choose the Size Price pricing strategy for a menu item or modifier option item reference and stores the sizes and prices you specify in it. You use the `sizeSpecificPricingGuid` value to locate the correct Size modifier group to use when pricing a menu item or modifier option item reference that uses size pricing. In the JSON fragment below, you can see that the Cheese Pizza menu item uses the SIZE_PRICE pricing strategy and the Size modifier group where the sizes and prices for Cheese Pizza are defined has a GUID that ends in `31b0`.\n\n```\n{\n \"restaurantGuid\": \"2071fb81-988b-4d75-b8dc-c5c17cff9706\",\n ...\n \"menus\": [\n {\n \"name\": \"Dinner\",\n \"guid\": \"ddd681de-3c12-4d45-b8b1-a5b2ea898210\",\n ...\n \"menuGroups\": [\n {\n \"name\": \"Pizza\",\n \"guid\": \"dc868006-919a-4950-a4cc-3a03f9770fd7\",\n ...\n \"menuItems\": [\n {\n \"name\": \"Cheese Pizza\",\n \"guid\": \"95c5d500-8d92-46f2-bec4-fb2a42a46621\",\n ...\n \"price\": null,\n \"pricingStrategy\": \"SIZE_PRICE\",\n \"pricingRules\": {\n \"timeSpecificPricingRules\": [],\n \"sizeSpecificPricingGuid\": \"23c02762-9d6a-4d3f-a298-71c989bf31b0\",\n \"sizeSequencePricingRules\": []\n },\n ...\n \"modifierGroupReferences\": [\n 2,\n 6,\n ...\n ],\n ...\n }\n ]\n }\n ]\n }\n ],\n \"modifierGroupReferences\": {\n ...\n \"2\": {\n \"referenceId\": 2,\n \"name\": \"Size\",\n \"guid\": \"23c02762-9d6a-4d3f-a298-71c989bf31b0\",\n ...\n \"pricingStrategy\": \"NONE\",\n \"pricingRules\": null,\n ...\n \"modifierOptionReferences\": [\n 12,\n 13\n ],\n ...\n },\n ...\n },\n \"modifierOptionReferences\": {\n ...\n \"12\": {\n \"referenceId\": 12,\n \"name\": \"Small\",\n \"guid\": \"352244f2-a952-4a3a-a3ae-7775fa221ce7\",\n ...\n \"price\": 8.0,\n \"pricingStrategy\": \"BASE_PRICE\",\n \"pricingRules\": null,\n ...\n \"modifierGroupReferences\": []\n },\n \"13\": {\n \"referenceId\": 13,\n \"name\": \"Large\",\n \"guid\": \"4ff89bca-b448-4892-bc4c-62c37a28ac44\",\n ...\n \"price\": 10.0,\n \"pricingStrategy\": \"BASE_PRICE\",\n \"pricingRules\": null,\n ...\n \"modifierGroupReferences\": []\n }\n ...\n }\n}\n```\n\n\nWhen the `PricingRules` object appears in the context of a modifier\ngroup, the `sizeSpecificPricingGuid` value it contains is also used to\nfind matching sizes between menu items and any modifier options that\nuse the Size Price or Size/Sequence Pricing pricing strategies (for\nexample, toppings on a small pizza cost $1 while toppings on a large\npizza cost $2). In this scenario, the Toast POS system locates the\nmodifier option size that matches the menu item size and uses the\nprice defined for that size of the modifier option. The sizes for the\nmenu item are defined in the Size modifier group specified by the\n`sizeSpecificPricingGuid` value. The sizes for the modifier options\nare defined in objects contained in the `sizeSequencePricingRules`\narray that is contained in the modifier group's `PricingRules` object.\nSizes are considered matching when their names are identical. For\ndetailed information on the **Size Price** and **Size/Sequence Price**\npricing strategies, see [Pricing\nStrategies](https://doc.toasttab.com/doc/platformguide/adminPricingStrategies.html)\nin the _Toast Platform Guide_.\n\nIn the example below, the Cheese Pizza menu item and the Toppings\nmodifier group use the `SIZE_PRICE` pricing strategy. The menu item\nsizes and prices are defined in the Size modifier group with a GUID\nending in `31b0`. The sizes and prices for the modifier options are\ndefined in the `sizeSequencePricingRules` value that is a child of the\nToppings modifier group.\n\n```\n{\n \"restaurantGuid\": \"2071fb81-988b-4d75-b8dc-c5c17cff9706\",\n ...\n \"menus\": [\n {\n \"name\": \"Dinner\",\n \"guid\": \"ddd681de-3c12-4d45-b8b1-a5b2ea898210\",\n ...\n \"menuGroups\": [\n {\n \"name\": \"Pizza\",\n \"guid\": \"dc868006-919a-4950-a4cc-3a03f9770fd7\",\n ...\n \"menuItems\": [\n {\n \"name\": \"Cheese Pizza\",\n \"guid\": \"95c5d500-8d92-46f2-bec4-fb2a42a46621\",\n ...\n \"price\": null,\n \"pricingStrategy\": \"SIZE_PRICE\",\n \"pricingRules\": {\n \"timeSpecificPricingRules\": [],\n \"sizeSpecificPricingGuid\": \"23c02762-9d6a-4d3f-a298-71c989bf31b0\",\n \"sizeSequencePricingRules\": []\n },\n ...\n \"modifierGroupReferences\": [\n 2,\n 3,\n ...\n ],\n ...\n }\n ]\n }\n ]\n }\n ],\n \"modifierGroupReferences\": {\n ...\n \"2\": {\n \"referenceId\": 2,\n \"name\": \"Size\",\n \"guid\": \"23c02762-9d6a-4d3f-a298-71c989bf31b0\",\n ...\n \"pricingStrategy\": \"NONE\",\n \"pricingRules\": null,\n ...\n \"modifierOptionReferences\": [\n 12,\n 13\n ],\n ...\n },\n \"3\": {\n \"referenceId\": 3,\n \"name\": \"Toppings\",\n \"guid\": \"58b79986-f88f-411d-ba18-14b1e2441e9d\",\n ...\n \"pricingStrategy\": \"SIZE_PRICE\",\n \"pricingRules\": {\n \"timeSpecificPricingRules\": [],\n \"sizeSpecificPricingGuid\": \"23c02762-9d6a-4d3f-a298-71c989bf31b0\",\n \"sizeSequencePricingRules\": [\n {\n \"sizeName\": \"Small\",\n \"sizeGuid\": \"352244f2-a952-4a3a-a3ae-7775fa221ce7\",\n \"sequencePrices\": [\n {\n \"sequence\": 1,\n \"price\": 2.0\n }\n ]\n },\n {\n \"sizeName\": \"Large\",\n \"sizeGuid\": \"4ff89bca-b448-4892-bc4c-62c37a28ac44\",\n \"sequencePrices\": [\n {\n \"sequence\": 1,\n \"price\": 4.0\n }\n ]\n }\n ]\n },\n ...\n \"modifierOptionReferences\": [\n 10,\n 11\n ],\n ...\n },\n ...\n },\n \"modifierOptionReferences\": {\n ...\n \"10\": {\n \"referenceId\": 10,\n \"name\": \"Mushrooms\",\n \"guid\": \"fa24fee9-76c4-40ba-ae3c-7dfccafdd8d3\",\n ...\n \"price\": null,\n \"pricingStrategy\": \"GROUP_PRICE\",\n \"pricingRules\": null,\n ...\n \"modifierGroupReferences\": []\n },\n \"11\": {\n \"referenceId\": 11,\n \"name\": \"Onions\",\n \"guid\": \"afee6be7-8280-4c69-a170-9fdf4c76bf7b\",\n ...\n \"price\": null,\n \"pricingStrategy\": \"GROUP_PRICE\",\n \"pricingRules\": null,\n ...\n \"modifierGroupReferences\": []\n },\n \"12\": {\n \"referenceId\": 12,\n \"name\": \"Small\",\n \"guid\": \"352244f2-a952-4a3a-a3ae-7775fa221ce7\",\n ...\n \"price\": 8.0,\n \"pricingStrategy\": \"BASE_PRICE\",\n \"pricingRules\": null,\n ...\n \"modifierGroupReferences\": []\n },\n \"13\": {\n \"referenceId\": 13,\n \"name\": \"Large\",\n \"guid\": \"4ff89bca-b448-4892-bc4c-62c37a28ac44\",\n ...\n \"price\": 10.0,\n \"pricingStrategy\": \"BASE_PRICE\",\n \"pricingRules\": null,\n ...\n \"modifierGroupReferences\": []\n },\n ...\n }\n} \n``` \n", "type": "string", "x-nullable": true, "example": "5a401af8-d2e2-4090-8c45-9f87b8b6c4d1" }, "sizeSequencePricingRules": { "type": "array", "description": "An array of `SizeSequencePricingRule` objects that define the prices for the modifier options in a modifier group that uses the Size Price, Sequence Price, or Size/Sequence Pricing pricing strategy. If the modifier group does not use one of these pricing strategies, this array is empty.\n", "items": { "$ref": "#/$defs/SizeSequencePricingRule" } } } }, "TimeSpecificPrice": { "type": "object", "description": "Represents the pricing rules for a menu item that uses a time-specific price.\n", "properties": { "timeSpecificPrice": { "type": "number", "format": "double", "description": "The price of the menu item during the periods of time defined by the associated `schedule` array.\n", "example": 1.0 }, "basePrice": { "type": "number", "format": "double", "description": "The base price of the menu item, used for time periods when a time-specific price has not been defined.\n", "example": 1.0 }, "schedule": { "type": "array", "description": "An array of `Schedule` objects that indicate the specific days and times that a time-specific price is available.\n", "items": { "$ref": "#/$defs/Schedule" } } } }, "Schedule": { "type": "object", "description": "A multi-use object that is used to:\n\n* Define when a menu is available.\n* Define when a time-specific price is available for a menu item or modifier option.\n\nA `Schedule` object defines a set of days of the week and a set of time ranges for those days. Days that have identical time ranges are grouped into a single `Schedule` object, for example, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, and FRIDAY in the example below have identical time ranges and are in the same `Schedule` object while SATURDAY and SUNDAY are in a separate `Schedule` object because their time ranges differ from the weekday time ranges.\n\n```\n\"availability\": {\n \"alwaysAvailable\": false,\n \"schedule\": [\n {\n \"days\": [\n \"MONDAY\", \n \"TUESDAY\", \n \"WEDNESDAY\", \n \"THURSDAY\"\n ],\n \"timeRanges\": [\n {\n \"start\": \"09:00\",\n \"end\": \"18:00\"\n }\n ]\n },\n {\n \"days\": [\n \"FRIDAY\", \n \"SATURDAY\"\n ],\n \"timeRanges\": [\n {\n \"start\": \"09:00\",\n \"end\": \"18:00\"\n },\n {\n \"start\": \"20:00\",\n \"end\": \"23:00\"\n }\n ]\n }\n ]\n}\n```\n\nTime ranges are in 24-hour HH:MM format.\n\nIf a day is not represented in the `Schedule` objects, the menu or time-specific price is not available on that day. \n", "properties": { "days": { "type": "array", "description": "An array of days of the week that are associated with identical time ranges. The time ranges are defined in a corresponding `timeRanges` value. Names of the days are in upper case, for example, MONDAY.\n", "items": { "type": "string", "description": "A day of the week, for example, SUNDAY or THURSDAY.", "enum": [ "SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY" ] } }, "timeRanges": { "type": "array", "description": "An array of `TimeRange` objects that define the time ranges that a menu or a time-specific price is available on the days defined by the corresponding `days` value. A `TimeRange` object contains a `start` time and an `end` time, expressed in the restaurant\u2019s local time. If both the `start` and `end` times for a given day are 00:00, it indicates that the menu or the time-specific price is available 24 hours on the associated days. Time ranges may also run overnight, for example, a time range that starts at \"07:00\" and ends at \"03:00\" runs from 7am until 3am the next day. \n", "items": { "$ref": "#/$defs/TimeRange" } } } }, "TimeRange": { "type": "object", "description": "Represents a time range for when a menu or a time-specific price is available.\n", "properties": { "start": { "type": "string", "description": "The start time of the time range. Expressed in the restaurant\u2019s local time.\n", "example": "string" }, "end": { "type": "string", "description": "The end time of the time range. Expressed in the restaurant\u2019s local time.\n", "example": "string" } } }, "SizeSequencePricingRule": { "type": "object", "description": "A multi-use object that defines the pricing rules for modifier options that belong to a modifier group that uses the Size Price, Sequence Price, or Size/Sequence Price pricing strategy. The contents of this object depend on the pricing strategy that is in effect.\n", "properties": { "sizeName": { "type": "string", "description": "A string that represents the size of a modifier option in this modifier group, for example, Small, Medium, or Large.\n\nWith Size Price and the Size/Sequence Price pricing strategies, the price of a modifier option changes based on the size of the menu item it is applied to, for example, a topping costs $1 on a small pizza and $2 on a large pizza. To determine which size and size-based price to use for a modifier option, the Toast POS system matches the size name of the modifier option to the size name of the menu item. For example, the Small size of a modifier option would match the Small size of a menu item. The `sizeName` value of the `SizeSequencePricingRule` object represents the modifier option size while the `sizeGuid` value represents the matching menu item size.\n\nThe Toast POS system does allow a configuration where the size of the modifier option is specified independently from the size of the menu item it applies to. In this scenario, you could order a Large menu item and apply a Small size of the modifier option to it. This configuration is unusual but the menus API supports it. When this configuration is in use, the `sizeName` value is populated with the modifier option size but the `sizeGuid` value that represents the menu item size will be null because there is no matching menu item size.\n\nThe `sizeName` value is null if the modifier group uses the Sequence Price pricing strategy because this strategy does not use sizes.\n\nSee the Pricing strategies section in the Toast Platform Guide for information on the Size Price, Sequence Price, and Size/Sequence Price pricing strategies.\n", "x-nullable": true, "example": "Example Name" }, "sizeGuid": { "type": "string", "description": "The GUID of the modifier option where a menu item size has been defined that matches the `sizeName` value. For example, if a menu item has Small and Large sizes, those sizes are represented in a Size modifier group with a Small modifier option and a Large modifier option. It is the GUID of one of those size modifier options that appears in this value. If the `sizeName` value is Small, then the `sizeGuid` value would contain the Small modifier option\u2019s GUID.\n\nWith Size Price and the Size/Sequence Price pricing strategies, the price of a modifier option changes based on the size of the menu item it is applied to, for example, a topping costs $1 on a small pizza and $2 on a large pizza. To determine which size and size-based price to use for a modifier option, the Toast POS system matches the size name of the modifier option to the size name of the menu item. For example, the Small size of a modifier option would match the Small size of a menu item. The `sizeName` value represents the modifier option size while the `sizeGuid` value represents the matching menu item size.\n\nThe Toast POS system does allow a configuration where the size of the modifier option is specified independently from the size of the menu item it applies to. In this scenario, you could order a Large menu item and apply a Small size of the modifier option to it. This configuration is unusual but the menus API supports it. When this configuration is in use, the `sizeName` value is populated with the modifier option size but there is no corresponding `sizeGuid` for the menu item size.\n\nThe `sizeGuid` value is null if the modifier group uses the Sequence Price pricing strategy because this strategy does not use sizes.\n\nSee the Pricing strategies section in the Toast Platform Guide for information on the Size Price, Sequence Price, and Size/Sequence Price pricing strategies.\n", "x-nullable": true, "example": "5a401af8-d2e2-4090-8c45-9f87b8b6c4d1" }, "sequencePrices": { "type": "array", "description": "An array of `SequencePrices` objects that define the size, sequence, or size/sequence prices for the modifier options in this modifier group.\n\nBecause they are multi use objects, the `SequencePrices` objects always contain `sequence` and `price` values for all three pricing strategies. However, the `sequence` is always 1 for the Size Price pricing strategy because only one price is defined per size for that strategy. For example, the `sequencePrices` value for a modifier group priced using the Size Price pricing strategy looks similar to the following:\n```\n\"sizeSequencePricingRules\": [\n {\n \"sizeName\": \"Small\",\n \"sizeGuid\": \"e02d1a57-5f9f-4800-a8c3-a5fe1a0b029b\",\n \"sequencePrices\": [\n {\n \"sequence\": 1,\n \"price\": 2\n }\n ]\n },\n {\n \"sizeName\": \"Large\",\n \"sizeGuid\": \"0e206b2d-72ab-46d1-b273-a5425cbef9a5\",\n \"sequencePrices\": [\n {\n \"sequence\": 1,\n \"price\": 4\n }\n ]\n }\n ]\n``` \n\nThe modifier options in this group cost $2.00 for the Small size and $4.00 for the Large size.\n\nThe `sequencePrices` value for a modifier group priced using the Sequence Price pricing strategy looks like this:\n```\n\"sizeSequencePricingRules\": [\n {\n \"sizeName\": null,\n \"sizeGuid\": null,\n \"sequencePrices\": [\n {\n \"sequence\": 1,\n \"price\": 1\n },\n {\n \"sequence\": 2,\n \"price\": 2\n },\n {\n \"sequence\": 3,\n \"price\": 2.5\n }\n ]\n }\n ]\n```\n\nThe first modifier option in this group costs $1.00, the second modifier option costs $2.00, and any additional modifier options from this group costs $2.50.\n\nThe `sequencePrices` value for a modifier group using the Size/Sequence Price pricing strategy looks like this:\n```\n\"sizeSequencePricingRules\": [\n {\n \"sizeName\": \"Small\",\n \"sizeGuid\": \"e02d1a57-5f9f-4800-a8c3-a5fe1a0b029b\",\n \"sequencePrices\": [\n {\n \"sequence\": 1,\n \"price\": 1\n },\n {\n \"sequence\": 2,\n \"price\": 2\n }\n ]\n },\n {\n \"sizeName\": \"Large\",\n \"sizeGuid\": \"0e206b2d-72ab-46d1-b273-a5425cbef9a5\",\n \"sequencePrices\": [\n {\n \"sequence\": 1,\n \"price\": 3\n },\n {\n \"sequence\": 2,\n \"price\": 4\n }\n ]\n }\n ]\n```\n\nThe first modifier option on a Small menu item costs $1.00 and additional modifier options on a Small cost $2.00, while the first modifier option on a Large menu item costs $3.00 and additional modifier options on a Large cost $4.00.\n", "items": { "$ref": "#/$defs/SequencePrice" } } } }, "SequencePrice": { "type": "object", "description": "Defines the size, sequence, or size/sequence prices for modifier options contained in a modifier group that uses the Size Price, Sequence Price, or Size/Sequence Price pricing strategy.\n", "properties": { "sequence": { "type": "integer", "format": "int32", "description": "Specifies the order of the prices.\n\nFor modifier groups that use the Size Price pricing strategy, the `sequence` is always 1 because only one price is defined per size for that strategy.\n\nFor modifier groups that use the Sequence Price or Size/Sequence Price pricing strategy, this value starts at 1 and increases with each successive price in the sequence. For example, in the JSON snippet below, `\"sequence\":1` defines the first price in the sequence and `\"sequence\":2` defines the second price in the sequence.\n```\n\"sequencePrices\": [\n {\n \"sequence\": 1,\n \"price\": 3\n },\n {\n \"sequence\": 2,\n \"price\": 4\n }\n ]\n```\n", "example": 1 }, "price": { "type": "number", "format": "double", "description": "The price for a modifier option when it is ordered at the specified point in the sequence.\n", "example": 1.0 } } } } }