Create a Menu Using Data Management Menu Features
Menu creation is the process of retrieving a list of products, combos, modifiers, and discounts from our system's backend, and formatting the data to present to customers. These topics cover the methods used to retrieve menu data and define the data objects our system uses for menu elements.
The high level process for menu creation follows the steps below:
Menu creation uses the following Data Management resources:
Each Data Management resource includes multiple endpoints, filters, and pagination options, which make it easier to parse the data. More information on these resources can be found in the Data Management API topics.
Menu Creation
The following topics describe how to use the Data Management API to create an online menu for a restaurant. The Data Management API is flexible and can support different formats and workflows for creating menus. The methods presented below are provided as an example to help users get started building their own menu.
Organization
The organization of an online menu determines how customers find the items that they want to order. Use the Portal API to define the organizational structure of a menu by creating categories and groups and adding items to them.
Use the /menu, /menu-category, and /menu-item-group endpoints to access the menu structure. Then use the data to build a web page.
The steps below show how to request the categories and the items they contain using the Data Management API:
Send a GET request to the /menu resource, and capture the correct set of
menu_category_entity_idsbased on theavailable_daysproperty. The example below shows a response from the /menu request:{ "items": [ { "_id": "9999999999999999", "name": "Food", "menu_category_entity_ids": [ "9999999999999999", "9999999999999999", "9999999999999999", "9999999999999999", "9999999999999999" ], "date_range_entity_ids": [], "day_part_entity_ids": [], "entity_id": "9999999999999999", "available_days": [ "sun", "mon", "tue", "wed", "thu", "fri", "sat" ] }, { "_id": "9999999999999999", "name": "Food", "menu_category_entity_ids": [ "9999999999999999", "9999999999999999", "9999999999999999", "9999999999999999", "9999999999999999", "9999999999999999" ], "entity_id": "9999999999999999", "date_range_entity_ids": [], "day_part_entity_ids": [] } ], "total": 2, "page_count": 1, "current_page": 1, "page_size": 100 }Send a GET request to the /menu-category resource. Capture the name and the
menu_group_entity_idsassociated with themenu_category_idscaptured in step 1. The example below shows a response from the /menu-category request:{ "items": [ { "_id": "9999999999999999", "entity_id": "9999999999999999", "menu_group_entity_ids": [ "9999999999999999" ], "name": "Beverage" }, { "_id": "9999999999999999", "entity_id": "9999999999999999", "menu_group_entity_ids": [ "9999999999999999" ], "name": "Retail" }, { "_id": "9999999999999999", "name": "Burgers", "menu_group_entity_ids": [ "9999999999999999" ], "entity_id": "9999999999999999" }, { "_id": "9999999999999999", "name": "Sandwiches and More", "menu_group_entity_ids": [ "9999999999999999" ], "entity_id": "9999999999999999" }, { "_id": "9999999999999999", "name": "Apps", "menu_group_entity_ids": [ "9999999999999999" ], "entity_id": "9999999999999999" }, { "_id": "9999999999999999", "name": "Dessert", "menu_group_entity_ids": [ "9999999999999999" ], "entity_id": "9999999999999999" }, { "_id": "9999999999999999", "name": "Sides", "menu_group_entity_ids": [ "9999999999999999" ], "entity_id": "9999999999999999" } ], "total": 7, "page_count": 1, "current_page": 1, "page_size": 100 }Send a GET request to the /menu-item-group. Capture the name and
product_entity_idfor each item in the "items" array of each of themenu_group_entity_idscaptured in step 2. The example below shows a response from the /menu_item_group resource :{ "items": [ { "_id": "9999999999999999", "entity_id": "9999999999999999", "menu_group_entity_ids": [ "9999999999999999" ], "name": "Beverage" }, { "_id": "9999999999999999", "entity_id": "9999999999999999", "menu_group_entity_ids": [ "9999999999999999" ], "name": "Retail" }, { "_id": "9999999999999999", "name": "Burgers", "menu_group_entity_ids": [ "9999999999999999" ], "entity_id": "9999999999999999" }, { "_id": "9999999999999999", "name": "Sandwiches and More", "menu_group_entity_ids": [ "9999999999999999" ], "entity_id": "9999999999999999" }, { "_id": "9999999999999999", "name": "Apps", "menu_group_entity_ids": [ "9999999999999999" ], "entity_id": "9999999999999999" }, { "_id": "9999999999999999", "name": "Dessert", "menu_group_entity_ids": [ "9999999999999999" ], "entity_id": "9999999999999999" }, { "_id": "9999999999999999", "name": "Sides", "menu_group_entity_ids": [ "9999999999999999" ], "entity_id": "9999999999999999" } ], "total": 7, "page_count": 1, "current_page": 1, "page_size": 100 }
This process creates a set of categories and products. Use these elements to build a webpage that displays the categories and requests the correct set of products when a customer makes a selection.
Note: It is possible to obtain the same information using a single call:
https://{{dm-url}}/menu/current?$select=name,categories.name,categories.groups.name,categories.groups.items.product_entity_id,categories.groups.color1,categories.groups.color2&include_entities=[%22menu-category%22,%22menu-item-group%22]&effective_date=20YY-07-16T22:31:00.573ZThe request above returns the following response:
{
"items": [
{
"_id": "9999999999999999",
"name": "Food",
"menu_category_entity_ids": [
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999"
],
"date_range_entity_ids": [],
"day_part_entity_ids": [],
"entity_id": "9999999999999999",
"available_days": [
"sun",
"mon",
"tue",
"wed",
"thu",
"fri",
"sat"
],
"categories": [
{
"_id": "9999999999999999",
"name": "Apps",
"menu_group_entity_ids": [
"9999999999999999"
],
"entity_id": "9999999999999999",
"groups": [
{
"_id": "9999999999999999",
"name": "Appetizers",
"items": [
{
"product_entity_id": "9999999999999999",
"name": "Pretty Gouda Mac n' Cheese"
},
{
"product_entity_id": "9999999999999999",
"name": "Cheesy Fries"
}
],
"color1": "#8080ff",
"color2": "#54fdff",
"entity_id": "9999999999999999"
}
]
},
{
"_id": "9999999999999999",
"name": "Burgers",
"menu_group_entity_ids": [
"9999999999999999"
],
"entity_id": "9999999999999999",
"groups": [
{
"_id": "9999999999999999",
"name": "Burgers",
"items": [
{
"product_entity_id": "9999999999999999",
"name": "Kobe Burger"
},
{
"product_entity_id": "9999999999999999",
"name": "The Bacon Jam"
},
{
"product_entity_id": "9999999999999999",
"name": "Double Stack"
},
{
"product_entity_id": "9999999999999999",
"name": "The Kalua King"
},
{
"product_entity_id": "9999999999999999",
"name": "The Mini Cooper"
},
{
"product_entity_id": "9999999999999999",
"name": "The Tower"
}
],
"color1": "#8080ff",
"color2": "#54fdff",
"entity_id": "9999999999999999"
}
]
},
{
"_id": "9999999999999999",
"name": "Sandwiches and More",
"menu_group_entity_ids": [
"9999999999999999"
],
"entity_id": "9999999999999999",
"groups": [
{
"_id": "9999999999999999",
"name": "Sandwiches",
"items": [
{
"product_entity_id": "9999999999999999",
"name": "Flavortown Special"
},
{
"product_entity_id": "9999999999999999",
"name": "Flamethrower Fish Sandwich"
},
{
"product_entity_id": "9999999999999999",
"name": "'Merica Dog"
},
{
"product_entity_id": "9999999999999999",
"name": "The Classic Chicken Sandwich"
},
{
"product_entity_id": "9999999999999999",
"name": "Popcorn Chicken Bites"
},
{
"product_entity_id": "9999999999999999",
"name": "Coke"
}
],
"color1": "#8080ff",
"color2": "#54fdff",
"entity_id": "9999999999999999"
}
]
},
{
"_id": "9999999999999999",
"entity_id": "9999999999999999",
"menu_group_entity_ids": [
"9999999999999999"
],
"name": "Beverage",
"groups": [
{
"_id": "9999999999999999",
"name": "Beverage",
"items": [
{
"product_entity_id": "9999999999999999",
"name": "Diet Coke"
},
{
"product_entity_id": "9999999999999999",
"name": "Dr Pepper"
},
{
"product_entity_id": "9999999999999999",
"name": "Iced Tea"
},
{
"product_entity_id": "9999999999999999",
"name": "Sprite"
}
],
"color1": "#8080ff",
"color2": "#54fdff",
"entity_id": "9999999999999999"
}
]
},
{
"_id": "9999999999999999",
"name": "Dessert",
"menu_group_entity_ids": [
"9999999999999999"
],
"entity_id": "9999999999999999",
"groups": [
{
"_id": "9999999999999999",
"name": "Desserts",
"items": [
{
"product_entity_id": "9999999999999999",
"name": "Chocolate Shake"
},
{
"product_entity_id": "9999999999999999",
"name": "Oreo Shake"
},
{
"product_entity_id": "9999999999999999",
"name": "Vanilla Shake"
},
{
"product_entity_id": "9999999999999999",
"name": "Strawberry Shake"
}
],
"color1": "#8080ff",
"color2": "#54fdff",
"entity_id": "9999999999999999"
}
]
}
]
},
{
"_id": "9999999999999999",
"name": "Food",
"menu_category_entity_ids": [
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999"
],
"entity_id": "9999999999999999",
"date_range_entity_ids": [],
"day_part_entity_ids": [],
"categories": [
{
"_id": "9999999999999999",
"name": "Apps",
"menu_group_entity_ids": [
"9999999999999999"
],
"entity_id": "9999999999999999",
"groups": [
{
"_id": "9999999999999999",
"name": "Appetizers",
"items": [
{
"product_entity_id": "9999999999999999",
"name": "Pretty Gouda Mac n' Cheese"
},
{
"product_entity_id": "9999999999999999",
"name": "Cheesy Fries"
}
],
"color1": "#8080ff",
"color2": "#54fdff",
"entity_id": "9999999999999999"
}
]
},
{
"_id": "9999999999999999",
"name": "Burgers",
"menu_group_entity_ids": [
"9999999999999999"
],
"entity_id": "9999999999999999",
"groups": [
{
"_id": "9999999999999999",
"name": "Burgers",
"items": [
{
"product_entity_id": "9999999999999999",
"name": "Kobe Burger"
},
{
"product_entity_id": "9999999999999999",
"name": "The Bacon Jam"
},
{
"product_entity_id": "9999999999999999",
"name": "Double Stack"
},
{
"product_entity_id": "9999999999999999",
"name": "The Kalua King"
},
{
"product_entity_id": "9999999999999999",
"name": "The Mini Cooper"
},
{
"product_entity_id": "9999999999999999",
"name": "The Tower"
}
],
"color1": "#8080ff",
"color2": "#54fdff",
"entity_id": "9999999999999999"
}
]
},
{
"_id": "9999999999999999",
"name": "Sandwiches and More",
"menu_group_entity_ids": [
"9999999999999999"
],
"entity_id": "9999999999999999",
"groups": [
{
"_id": "9999999999999999",
"name": "Sandwiches",
"items": [
{
"product_entity_id": "9999999999999999",
"name": "Flavortown Special"
},
{
"product_entity_id": "9999999999999999",
"name": "Flamethrower Fish Sandwich"
},
{
"product_entity_id": "9999999999999999",
"name": "'Merica Dog"
},
{
"product_entity_id": "9999999999999999",
"name": "The Classic Chicken Sandwich"
},
{
"product_entity_id": "9999999999999999",
"name": "Popcorn Chicken Bites"
},
{
"product_entity_id": "9999999999999999",
"name": "Coke"
}
],
"color1": "#8080ff",
"color2": "#54fdff",
"entity_id": "9999999999999999"
}
]
},
{
"_id": "9999999999999999",
"name": "Sides",
"menu_group_entity_ids": [
"9999999999999999"
],
"entity_id": "9999999999999999",
"groups": [
{
"_id": "9999999999999999",
"name": "Sides",
"items": [
{
"product_entity_id": "9999999999999999",
"name": "Truffle Fries"
},
{
"product_entity_id": "9999999999999999",
"name": "Crinkle Cut Chips"
}
],
"color1": "#8080ff",
"color2": "#54fdff",
"entity_id": "9999999999999999"
}
]
},
{
"_id": "9999999999999999",
"entity_id": "9999999999999999",
"menu_group_entity_ids": [
"9999999999999999"
],
"name": "Beverage",
"groups": [
{
"_id": "9999999999999999",
"name": "Beverage",
"items": [
{
"product_entity_id": "9999999999999999",
"name": "Diet Coke"
},
{
"product_entity_id": "9999999999999999",
"name": "Dr Pepper"
},
{
"product_entity_id": "9999999999999999",
"name": "Iced Tea"
},
{
"product_entity_id": "9999999999999999",
"name": "Sprite"
}
],
"color1": "#8080ff",
"color2": "#54fdff",
"entity_id": "9999999999999999"
}
]
},
{
"_id": "9999999999999999",
"name": "Dessert",
"menu_group_entity_ids": [
"9999999999999999"
],
"entity_id": "9999999999999999",
"groups": [
{
"_id": "9999999999999999",
"name": "Desserts",
"items": [
{
"product_entity_id": "9999999999999999",
"name": "Chocolate Shake"
},
{
"product_entity_id": "9999999999999999",
"name": "Oreo Shake"
},
{
"product_entity_id": "9999999999999999",
"name": "Vanilla Shake"
},
{
"product_entity_id": "9999999999999999",
"name": "Strawberry Shake"
}
],
"color1": "#8080ff",
"color2": "#54fdff",
"entity_id": "9999999999999999"
}
]
}
]
}
],
"total": 2,
"page_count": 1,
"current_page": 1,
"page_size": 100
}The response above shows menu categories and the products they include.
Product Display
This topic shows how to use the /product resource to obtain the following details about products:
Product Name
Images
Product Description
Nutrition Information
Prices
Add-on Items
Modifiers
Combo Options
Use this data to build pages that display products.
Call the product/current resource to obtain details about the products intended for display. The following sample GET request returns product details for two products:
{{dm_url}}/product/current?&effective_date=20YY-07-23T15:12:29.603Z&include_entities=['product-price','time-period']&entity_ids=['9999999999999999','9999999999999999']The include_entities operation requests additional entities for the products, and the entity_ids operation specifies the entity_ids of the products.
The request above returns the following response:
{
"items": [
{
"_id": 9999999999999999,
"name": "Truffle Fries",
"product_id": "TruffleFries",
"product_type": "standard",
"revenue_class": "default",
"reporting_category": {
"minor_reporting_category_entity_id": 9999999999999999,
"major_reporting_category_entity_id": 9999999999999999
},
"alt_item_name": "",
"images": [
{
"image_set_entity_id": 9999999999999999,
"tag": "Truffle+Fries.jpg",
"source_url": "https://xoo-images.xenial.com/9999999999999999.jpg"
},
{
"image_set_entity_id": 9999999999999999,
"tag": "Truffle+Fries.jpg",
"source_url": "https://xoo-images.xenial.com/9999999999999999.jpg"
},
{
"image_set_entity_id": 9999999999999999,
"tag": "Truffle+Fries.jpg",
"source_url": "https://xoo-images.xenial.com/9999999999999999.jpg"
}
],
"item_description": "Our double fried french fries tossed in
truffle oil and parmesan cheese. Ooo la la.",
"is_open_price": false,
"is_bundle": false,
"builds": [],
"kitchen_routing_category_entity_ids": [
9999999999999999,
9999999999999999
],
"tax_group_entity_id": 9999999999999999,
"prompt_for_quantity": false,
"default_cost": 3,
"kitchen_routing_type": "by_category",
"product_tag_entity_ids": [],
"product_category_entity_ids": [],
"prompt_item_conversio_on_change": false,
"entity_id": 9999999999999999,
"item_type": "product",
"nutritional_data": [
{
"name": "Calories",
"value": 350,
"unit": "Count"
}
],
"include_on_item_count": true,
"include_on_item_count_value": 1,
"unit_type": "none",
"restricted_order_source_entity_ids": [],
"restrict_availability_order_source": false,
"prices": [
{
"_id": 9999999999999999,
"type": "standard",
"unit_price": 2.99,
"time_period_entity_ids": [],
"product_entity_id": 9999999999999999,
"product_id": "TruffleFries",
"external_id": "",
"entity_id": 9999999999999999,
"time_periods": []
}
],
"child_prices": []
},
{
"_id": 9999999999999999,
"name": "Crinkle Cut Chips",
"product_id": "CrinkleChips",
"product_type": "standard",
"revenue_class": "default",
"reporting_category": {
"minor_reporting_category_entity_id": 9999999999999999,
"major_reporting_category_entity_id": 9999999999999999
},
"alt_item_name": "",
"images": [
{
"image_set_entity_id": 9999999999999999,
"tag": "Crinkle+Cut+Chips.jpg",
"source_url": "https://xoo-images.xenial.com/9999999999999999.jpg"
},
{
"image_set_entity_id": 9999999999999999,
"tag": "Crinkle+Cut+Chips.jpg",
"source_url": "https://xoo-images.xenial.com/9999999999999999.jpg"
},
{
"image_set_entity_id": 9999999999999999,
"tag": "Crinkle+Cut+Chips.jpg",
"source_url": "https://xoo-images.xenial.com/9999999999999999.jpg"
}
],
"item_description": "House-fried crinkle cut potato chips
dusted with sea salt.",
"is_open_price": false,
"is_bundle": false,
"builds": [],
"kitchen_routing_category_entity_ids": [
9999999999999999,
9999999999999999
],
"tax_group_entity_id": 9999999999999999,
"prompt_for_quantity": false,
"default_cost": 2,
"kitchen_routing_type": "by_category",
"product_tag_entity_ids": [],
"product_category_entity_ids": [],
"prompt_item_conversio_on_change": false,
"entity_id": 9999999999999999,
"item_type": "product",
"nutritional_data": [
{
"name": "Calories",
"value": 209.8,
"unit": "Count"
}
],
"include_on_item_count": true,
"include_on_item_count_value": 1,
"unit_type": "none",
"restricted_order_source_entity_ids": [],
"restrict_availability_order_source": false,
"prices": [
{
"_id": 9999999999999999,
"type": "standard",
"unit_price": 1.99,
"time_period_entity_ids": [],
"product_entity_id": 9999999999999999,
"product_id": "CrinkleChips",
"external_id": "",
"entity_id": 9999999999999999,
"time_periods": []
}
],
"child_prices": []
}
],
"total": 2,
"page_count": 1,
"current_page": 1,
"page_size": 100
}The response is an array of items. Each item in the array includes the following properties:
name - The name of the product. Use this as the display name for the menu.
images - The images property is an array of images. Each image includes a
image_set_entity_id, tag, andsource_url. Use this data to display the appropriate image of the product on the menu.item_description - A short text description of the product. Use this as the description of the product on the menu.
entity_id - The
entity_idof the product sent in the request. Use this value to verify that the menu displays the correct product details.nutritional_data - An array of name-value pair representation of the contents of the product. Use this data to display nutrition information on the menu.
prices - An array of price information about the product. Use the unit_price property and the time_periods property to display the correct price on the menu.
is_bundle - A boolean that identifies whether an item is part of a bundle. Use the
is_bundleproperty when creating menu displays to display only bundles by filtering out single items that are not available as bundles, or display bundles as up-sell items.
Modifiers
Modifiers give customers the option to add or remove elements from their meals. For example, a "no tomato" modifier could tell the kitchen to make a sandwich without a slice of tomato. When displaying a product, give customers the option to select appropriate modifiers. Use the call to the /product/current endpoint below to retrieve a list of modifiers for a particular product:
{{dm_url}}/product/current?entity_ids=["9999999999999999"]&include_entities=["modifier-collection","modifier-group","product"]&effective_date={{date}}T14:41:37.452ZInclude the entity_id of the product intended for display in the entity_ids array. Request the "modifier-collection" and the "modifier-group" data using the include_entities resource.
The sample response below shows the modifier details in the "modifier-collection" property:
{
"items": [
{
"_id": "9999999999999999",
"name": "Sm 1/4 CB Burger",
"product_id": "Sm CB Burger",
"product_type": "standard",
"include_on_item_count": true,
"include_on_item_count_value": 1,
"item_type": "product",
"unit_type": "none",
"revenue_class": "default",
"reporting_category": {
"minor_reporting_category_entity_id": "9999999999999999",
"major_reporting_category_entity_id": "9999999999999999"
},
"alt_item_name": "",
"images": [],
"item_description": "",
"is_open_price": false,
"is_bundle": true,
"builds": [],
"kitchen_routing_category_entity_ids": [],
"tax_group_entity_id": "9999999999999999",
"prompt_for_quantity": false,
"default_cost": 0,
"modifier_collection_entity_id": "9999999999999999",
"kitchen_routing_type": "by_category",
"variation_info": {
"variations": [
{
"product_entity_id": "9999999999999999",
"variant_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "1/4 CB Burger",
"product_id": "CB Burger",
"entity_id": "9999999999999999"
}
},
{
"product_entity_id": "9999999999999999",
"variant_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Sm 1/4 CB Burger",
"product_id": "Sm CB Burger",
"entity_id": "9999999999999999"
}
}
]
},
"product_tag_entity_ids": [
"9999999999999999"
],
"nutritional_data": [],
"restricted_order_source_entity_ids": [],
"restrict_availability_order_source": false,
"bundle_components_entity_ids": [
"9999999999999999",
"9999999999999999",
"9999999999999999"
],
"product_category_entity_ids": [
"9999999999999999"
],
"prompt_item_conversio_on_change": false,
"entity_id": "9999999999999999",
"modifier_collection": {
"_id": "9999999999999999",
"name": "Sandwich Modifiers",
"9999999999999999": false,
"modifier_entity_ids": [
"9999999999999999",
"9999999999999999"
],
"modifier_group_entity_ids": [
"9999999999999999",
"9999999999999999"
],
"modifier_build_entity_ids": [],
"entity_id": "9999999999999999",
"modifier_groups": [
{
"_id": "9999999999999999",
"modifier_group_id": "CheeseOptions",
"name": "Cheese Options",
"minimum_to_select": 0,
"maximum_to_select": 2,
"required": false,
"print_modifiers_in_red": true,
"modifier_entity_ids": [
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999"
],
"entity_id": "9999999999999999",
"allow_bypass_modifier_group": false,
"modifiers": [
{
"_id": "9999999999999999",
"allow_quantity": false,
"always_print_in_red": true,
"caption": "",
"default_cost": 0,
"include_in_plain_builds": true,
"is_open_price": false,
"kitchen_routing_category_entity_ids": [
"9999999999999999",
"9999999999999999"
],
"name": "Cheddar Cheese",
"product_id": "CheddarCheese",
"product_type": "modifier",
"prompt_for_quantity": false,
"reporting_category": {
"minor_reporting_category_entity_id": "9999999999999999",
"major_reporting_category_entity_id": "9999999999999999"
},
"tax_group_entity_id": "9999999999999999",
"revenue_class": "default",
"show_confirmaion_prompt": false,
"prompt_item_conversio_on_change": false,
"allow_plain_builds": false,
"kitchen_routing_type": "by_category",
"item_type": "product",
"entity_id": "9999999999999999",
"product_tag_entity_ids": [],
"tag_entity_ids": [],
"variation_info": {
"variations": [
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Add Cheddar Cheese",
"product_id": "CheddarCheese_add",
"entity_id": "9999999999999999"
}
},
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "No Cheddar Cheese",
"product_id": "CheddarCheese_no",
"entity_id": "9999999999999999"
}
},
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Double Cheddar Cheese",
"product_id": "CheddarCheese_double",
"entity_id": "9999999999999999"
}
},
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Lite Cheddar Cheese",
"product_id": "CheddarCheese_lite",
"entity_id": "9999999999999999"
}
},
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Extra Cheddar Cheese",
"product_id": "CheddarCheese_extra",
"entity_id": "9999999999999999"
}
},
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Sub Cheddar Cheese",
"product_id": "CheddarCheese_sub",
"entity_id": "9999999999999999"
}
},
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Small Cheddar Cheese",
"product_id": "CheddarCheese_small",
"entity_id": "9999999999999999"
}
},
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Medium Cheddar Cheese",
"product_id": "CheddarCheese_medium",
"entity_id": "9999999999999999"
}
},
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Large Cheddar Cheese",
"product_id": "CheddarCheese_large",
"entity_id": "9999999999999999"
}
}
]
}
}
]
},
{
"_id": "9999999999999999",
"modifier_group_id": "ToppingsOptions",
"name": "Toppings",
"minimum_to_select": 0,
"maximum_to_select": 9999,
"required": false,
"print_modifiers_in_red": true,
"modifier_entity_ids": [
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999"
],
"entity_id": "9999999999999999",
"allow_bypass_modifier_group": false,
"modifiers": [
{
"_id": "9999999999999999",
"allow_quantity": false,
"always_print_in_red": true,
"caption": "",
"default_cost": 1,
"include_in_plain_builds": true,
"is_open_price": false,
"kitchen_routing_category_entity_ids": [
"9999999999999999",
"9999999999999999"
],
"name": "Bacon",
"product_id": "Bacon",
"product_type": "modifier",
"prompt_for_quantity": false,
"reporting_category": {
"minor_reporting_category_entity_id": "9999999999999999",
"major_reporting_category_entity_id": "9999999999999999"
},
"tax_group_entity_id": "9999999999999999",
"revenue_class": "default",
"show_confirmaion_prompt": false,
"prompt_item_conversio_on_change": false,
"allow_plain_builds": false,
"kitchen_routing_type": "by_category",
"item_type": "product",
"entity_id": "9999999999999999",
"product_tag_entity_ids": [],
"tag_entity_ids": [],
"variation_info": {
"variations": [
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Add Bacon",
"product_id": "Bacon_add",
"entity_id": "9999999999999999"
}
},
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "No Bacon",
"product_id": "Bacon_no",
"entity_id": "9999999999999999"
}
},
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Extra Bacon",
"product_id": "Bacon_extra",
"entity_id": "9999999999999999"
}
},
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Sub Bacon",
"product_id": "Bacon_sub",
"entity_id": "9999999999999999"
}
},
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Double Bacon",
"product_id": "Bacon_double",
"entity_id": "9999999999999999"
}
},
{
"variant_entity_id": "9999999999999999",
"product_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Small Bacon",
"product_id": "Bacon_small",
"entity_id": "9999999999999999"
}
}
]
}
},
]
}
],
"modifiers": [
{
"_id": "9999999999999999",
"allow_quantity": false,
"always_print_in_red": true,
"caption": "",
"default_cost": 0,
"include_in_plain_builds": true,
"is_open_price": false,
"kitchen_routing_category_entity_ids": [
"9999999999999999",
"9999999999999999"
],
"name": "Biscuit",
"product_id": "Biscuit",
"product_type": "modifier",
"prompt_for_quantity": false,
"reporting_category": {
"minor_reporting_category_entity_id": "9999999999999999",
"major_reporting_category_entity_id": "9999999999999999"
},
"tag_entity_ids": [],
"tax_group_entity_id": "9999999999999999",
"revenue_class": "default",
"show_confirmaion_prompt": false,
"prompt_item_conversio_on_change": false,
"allow_plain_builds": false,
"kitchen_routing_type": "by_category",
"item_type": "product",
"entity_id": "9999999999999999"
}
]
}
}
],
"total": 1,
"page_count": 1,
"current_page": 1,
"page_size": 100
}The example above includes two modifier groups and one stand alone modifier: CheeseOptions, ToppingsOptions, and Biscuit. Each modifier group includes one or more modifier entities. A modifier entity describes the modifier, for example, "Cheddar Cheese", and includes the different variations that apply to that modifier. The "Add" variant applied to the "Cheddar Cheese" modifier, creates an "Add Cheddar Cheese" variation.
Bundles
Bundles link multiple items to create combos or specials. When a user displays a product, they can offer the combo as an option by displaying a "Make it a meal" button on the product page. If a customer clicks the button, display the bundle item options that the customer can select. For example, a user can give their customer the option to choose a beverage and a side. The product price updates automatically before the customer adds the combo meal to the cart.
When a user sends the request to /product/current they can request information about the available bundles by sending "bundle-component" and "product" in the include_entities array, as shown in the example below:
{{dm_url}}/product/current?entity_ids=["9999999999999999"]&include_entities=["bundle-component", "product"]&effective_date={{date}}T14:41:37.452ZThe resource returns an items array as a response. The array includes a bundle_components array, which lists the product types and entity IDs of the products that make up the bundle. The sample response message below includes the bundle_components array:
{
"items": [
{
"_id": "9999999999999999",
"name": "Sm 1/4 CB Burger",
"product_id": "Sm CB Burger",
"product_type": "standard",
"include_on_item_count": true,
"include_on_item_count_value": 1,
"item_type": "product",
"unit_type": "none",
"revenue_class": "default",
"reporting_category": {
"minor_reporting_category_entity_id": "9999999999999999",
"major_reporting_category_entity_id": "9999999999999999"
},
"alt_item_name": "",
"images": [],
"item_description": "",
"is_open_price": false,
"is_bundle": true,
"builds": [],
"kitchen_routing_category_entity_ids": [],
"tax_group_entity_id": "9999999999999999",
"prompt_for_quantity": false,
"default_cost": 0,
"modifier_collection_entity_id": "9999999999999999",
"kitchen_routing_type": "by_category",
"variation_info": {
"variations": [
{
"product_entity_id": "9999999999999999",
"variant_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "1/4 CB Burger",
"product_id": "CB Burger",
"entity_id": "9999999999999999"
}
},
{
"product_entity_id": "9999999999999999",
"variant_entity_id": "9999999999999999",
"product": {
"_id": "9999999999999999",
"name": "Sm 1/4 CB Burger",
"product_id": "Sm CB Burger",
"entity_id": "9999999999999999"
}
}
]
},
"product_tag_entity_ids": [
"9999999999999999"
],
"nutritional_data": [],
"restricted_order_source_entity_ids": [],
"restrict_availability_order_source": false,
"bundle_components_entity_ids": [
"9999999999999999",
"9999999999999999",
"9999999999999999"
],
"product_category_entity_ids": [
"9999999999999999"
],
"prompt_item_conversio_on_change": false,
"entity_id": "9999999999999999",
"bundle_components": [
{
"_id": "9999999999999999",
"sort_order": 0,
"name": "Burger",
"is_enabled": true,
"component_type": "group",
"product_choices_entity_ids": [
"9999999999999999"
],
"allowed_destination_entity_ids": [
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999"
],
"default_products": [
{
"default_quantity": 1,
"product_entity_id": "9999999999999999"
}
],
"minimum_quantity": 1,
"maximum_quantity": 1,
"default_quantity": 1,
"choice_label": "",
"pricing_change_action": "replace",
"entity_id": "9999999999999999"
},
{
"_id": "9999999999999999",
"sort_order": 1,
"name": "Sides",
"is_enabled": true,
"component_type": "group",
"product_choices_entity_ids": [
"9999999999999999",
"9999999999999999",
"9999999999999999"
],
"allowed_destination_entity_ids": [
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999"
],
"default_products": [
{
"product_entity_id": "9999999999999999",
"default_quantity": 1
}
],
"minimum_quantity": 1,
"maximum_quantity": 1,
"default_quantity": 1,
"choice_label": "",
"pricing_change_action": "replace",
"entity_id": "9999999999999999"
},
{
"_id": "9999999999999999",
"sort_order": 2,
"name": "Drinks",
"is_enabled": true,
"component_type": "group",
"product_choices_entity_ids": [
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999"
],
"allowed_destination_entity_ids": [
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999"
],
"default_products": [],
"minimum_quantity": 1,
"maximum_quantity": 1,
"default_quantity": 1,
"choice_label": "",
"pricing_change_action": "replace",
"entity_id": "9999999999999999"
}
]
}
],
"total": 1,
"page_count": 1,
"current_page": 1,
"page_size": 100
}The response above describes a bundle that consists of three elements: Burger, Drinks, and Sides. Each bundle component includes a "name" property, which users can use to describe the combo on their menu. Each bundle_component includes an array of "product_choice_entity_ids" that lists each product that can be added to the combo. The example above lists 10 entity IDs for drink choices. Use these entity IDs to display the options for drinks or sides to customers.
Order Creation
Use the Online Ordering API to create and manage orders. See the Creating, Submitting, and Modifying Online Orders using Online Ordering API page for details about creating orders. The Online Ordering API backend calculates prices and taxes, and sends the order to the correct store for preparation.
Resource Definitions
The following topics define a set of Data Management resources that are useful for building menus:
More information on these resources can be found in the Data Management API topics.
Bundle Component
The Bundle Component resource returns an items array that contains one or more bundle definitions. Each bundle definition includes the bundle component group name (e.g. "Drinks"), the product_entity_ids of the products in that group (e.g. Pepsi), and the entity_ids of the bundles that group is part of (e.g., Sandwich Combos).
The example below shows a sample GET request to the /bundle-component endpoint:
{{dm_url}}/bundle-component/current/?effective_date={{date}}T00:00:00.000ZThe example below shows a sample response from the Bundle Component resource:
{
"items": [
{
"_id": "9999999999999999",
"sort_order": 0,
"name": "Drinks",
"is_enabled": true,
"component_type": "group",
"product_choices_entity_ids": [
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999"
],
"allowed_destination_entity_ids": [
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999"
],
"default_products": [
{
"product_entity_id": "9999999999999999",
"default_quantity": 1
},
{
"product_entity_id": "9999999999999999",
"default_quantity": 1
},
{
"product_entity_id": "9999999999999999",
"default_quantity": 1
},
{
"product_entity_id": "9999999999999999",
"default_quantity": 1
},
{
"product_entity_id": "9999999999999999",
"default_quantity": 1
}
],
"minimum_quantity": 0,
"maximum_quantity": 1,
"default_quantity": 1,
"choice_label": "",
"pricing_change_action": "replace",
"entity_id": "9999999999999999"
}
],
"total": 1,
"page_count": 1,
"current_page": 1,
"page_size": 100
}To use the Bundle Component resource, send a GET request to the /bundle-component/current endpoint, defined in detail here.
GET /bundle-component/current
Request Parameters
In | Field Name | Type | Required | Description |
|---|---|---|---|---|
header |
| string | Yes | The identifier of the company to manage data for |
header |
| [ csv of string ] | No | The unique identifiers (UIDs) of the site to manage data for |
query |
| string | no | A filter expression in OData v4 format |
query |
| int32 | No | The maximum documents to return |
query |
| int32 | No | The documents to skip before returning |
query |
| string | No | An order by expression in OData v4 format |
query |
| string | Yes | The date and time to query against |
query |
| [ string ] | No | An array of entity identifiers |
query |
| boolean | No | Hydrates-related nested objects when returning a result (For example, populate a menu with menu categories and menu groups) |
query |
| boolean | No | Include the mappings for the document |
query |
| [ csv of string ] | No | Specifies entity types for which to add mappings (For example, |
query |
| [ csv of string ] | No | Specifies |
query |
| boolean | No | Adds audit fields to each document when returning a result ( |
query |
| boolean | No | Includes the documents that are inactive for the current sites |
Success Schema
Field Name | Type | Description |
|---|---|---|
| integer | |
| [ array, object ] | Stores the definition of a bundle component |
| string | The name of the bundle component |
| boolean | Decide if the component is available for this bundle |
| string | The type of Bundle Component. The possible values are "group" (default) or "item." |
| integer | The order this component appears in |
| integer | The minimum quantity of this component. The default is 0. |
| integer | The default quantity of this component. The default is 1. |
| integer | The maximum quantity of this component. The default is 0. |
| string | An optional label for the on-screen product choices |
| [ string, object ] | The available choices for this component |
| [ array, object ] | The products to be used as defaults |
| integer | The default quantity of this component |
| string, object | The object identifier of one of the member products to use as a default |
| string | The type of price change to apply. The possible values are "off" (default), "replace," or "adjust." |
| [ string, object ] | Choose the destinations where this component is available |
| string | The auto-assigned system document identifier |
| string | The identifier of the company that owns the document |
| string | The auto-assigned UID of the entity, set on creation. All future versions of the entity share the same |
| boolean | |
| boolean | Marking property is the essence of active documents. Sets in |
| string | |
| string | The identifier of the OPRA user or site that created the document |
| string | The identifier of the OPRA user or site that last updated the document |
| string | The date and time (date-time) the document was created |
| string | The last date and time the document was updated |
Response Codes
Response | Description |
|---|---|
200 OK | Success |
400 Bad Request | Bad request, for more information look at body error |
403 Forbidden | Invalid token |
404 Not Found | Not found |
422 Unprocessable Entity | Unprocessable error |
Default | Unexpected error |
Discount Definition
The Discount Definition resource returns a items array that contains one or more discount definitions.
The example below shows a sample request to the /discount-definition endpoint:
{{dm_url}}/discount-definition/current/?effective_date={{date}}T00:00:00.000Z&entity_ids=['9999999999999999']The example below shows a sample response from the Discount Definition resource:
{
"items": [
{
"_id": "9999999999999999",
"name": "Hero Discount",
"code": "Hero Discount",
"type": "discount",
"calc": {
"type": "fixed_rate",
"value": 10,
"max_value": 0
},
"apply_type": "manual",
"use_loyalty": false,
"where_available": [
"order",
"tender"
],
"exclusive": [],
"exclude_modifiers": true,
"exclude_children": true,
"customer_info_prompts": [],
"permissions": {
"restrict_by_roles": false
},
"entity_id": "9999999999999999"
}
],
"total": 1,
"page_count": 1,
"current_page": 1,
"page_size": 100
}The Discount Definition resource is defined in detail here.
GET /discount-definition/current
Request Parameters
In | Field Name | Type | Required | Description |
|---|---|---|---|---|
header |
| string | Yes | The identifier of the company to manage data for |
header |
| [ csv of string ] | No | The unique identifiers (UIDs) of the site to manage data for |
query |
| string | no | A filter expression in OData v4 format |
query |
| int32 | No | The maximum documents to return |
query |
| int32 | No | The documents to skip before returning |
query |
| string | No | An order by expression in OData v4 format |
query |
| string | Yes | The date and time to query against |
query |
| [ string ] | No | An array of entity identifiers |
query |
| boolean | No | Hydrates-related nested objects when returning a result (For example, populate a menu with menu categories and menu groups) |
query |
| boolean | No | Include the mappings for the document |
query |
| [ csv of string ] | No | Specifies entity types for which to add mappings (For example, |
query |
| [ csv of string ] | No | Specifies |
query |
| boolean | No | Adds audit fields to each document when returning a result ( |
query |
| boolean | No | Includes the documents that are inactive for the current sites |
Success Schema
Field Name | Type | Description |
|---|---|---|
| integer | |
| [ array, object ] | |
| string | The name of the discount |
| boolean | The flag that indicates if the discount is active or not |
| string | The type of the discount. The possible values are "discount," "comp," "promo," "coupon," or "loyalty." |
| string | User friendly and memorable discount code |
| boolean | This flag is used by the Mobile API and other integrating systems to indicate that this specific discount needs to be processed through the loyalty engine |
| string, object | The discount calculation type. The possible values are "percentage," "fixed_amt," "variable_percentage," "variable_amt," or "fixed_price." fixed_amt = the value in the value field is a fixed discount amount variable_amt = the value in value field is variable amount. fixed_rate = the value in the value field is fixed percentage variable_rate = the value in the value field is variable percentage alter_price = the value in the value field is alter price (alter price calculation will discount the qualifying items in such a manner that the net price of the item will match the alter_price value. For example, get two sandwiches for $2.00 (alter_price). If the original price of each sandwich is $1.50, $.50 is applied to each sandwich so that the net price of the two items will be $2.00). |
| number | The examples are fixed amount, variable amount, fixed percentage, variable percentage, and alter price value. See the calc description for more details. |
| number | The calc_value cap. The calc value (variable_amt, variable_rate) cannot exceed the max_value. |
| string | The type of the discount. The possible values are "manual" or "automatic." |
| boolean | The flag that indicates whether to apply to liability items or not |
| [ string ] | Where the discount is available to apply. For example, at the order entry screen only, at the tender screen only, or available both at the order entry screen and tender screen. The possible values are "order_entry" or "tender." |
| [ string, array ] | Indicates if the discount is exclusive to other discounts. The possible values are "after" or "before." "after" = no discount is allowed after this discount "before" = discount is not allowed if the item or order has discount(s) |
| number | The maximum discount amount limit for the discount |
| string | The possible values are "lowest," "highest," or "median." "lowest" = discount lowest priced item if more than one item qualifies for the discount "highest" = discount highest priced item if more than one item qualifies for the discount "median" = discount median priced item if more than one item qualifies for the discount |
| [ array, string ] | The customer information prompts for specific discount types, such as the student's or firefighter's badge (object) name (string) |
| object, string | The name of the customer information prompt |
| string | |
| object | Defines the availability of the discount |
| string | The discount start date and time (date-time) |
| string | The expiry date and time (date-time) of the discount |
| [ array, string ] | The days and times when the discount is available in a week. (object) days (array) (optional) (string: sun, mon, tue, wed, thu, fri, sat) array of week days, e.g., sun, mon, tue, wed, thu, fri, sat. |
| [ array, string ] | The array of the week days. For example, sun, mon, tue, wed, thu, fri, or sat. |
| string | The start time of the discount for a given week day(s) |
| string | The expiry time of the discount for a given week day(s) |
| integer | The priority of the discount rule |
| boolean | The flag that indicates whether or not to exclude child item prices in the discount calculation if the parent item qualifies for the discounts |
| boolean | This discount should be applied after all applicable taxes have been applied to the subtotal |
| boolean | The flag that indicates whether or not to exclude modifier prices in the discount calculation if the parent item qualifies for the discount |
| object | The discount evaluation criteria. [ rules ] (object) |
| [ array, object ] | |
| integer | The rule identifier |
| [ string ] | The array of the item descriptions |
| unspecified | |
| string | The quantity. Which property of the parent items to total. The possible values are "qty," "weight," or "price." |
| string | The conditional sign ( =, <, >, <=, >= ) |
| number | The target value to compare after totaling the item quantity, weight, or price |
| string | The possible values are "AND" or "OR." The expression formed between the rules (For example, 1 AND 2 OR 3 , where 1,2,3 are rule IDs). |
| object | Apply criteria for the discount when the discount evaluation criteria is met |
| [ string, object ] | The array of the item descriptions |
| string | The possible values are "none," "item," "unit," or "unit_per_item" |
| integer | The quantity |
| unspecified | |
| object | The discount print options |
| string | The discount text to print on the receipt |
| boolean | The print discount details under each qualifying item, if enabled |
| boolean | The print discount details at the bottom of the receipt below subtotal, if enabled |
| integer | The number of discount copies to print |
| integer | The number of discount store copies to print |
| boolean | The print signature line on the store copy |
| object | This property contains access control definitions |
| boolean | Restrict discounts by specific roles |
| string | The auto-assigned system document identifier |
| string | The identifier of the company that owns the document |
| string | The auto-assigned UID of the entity, set on creation. All future versions of the entity share the same |
| boolean | |
| boolean | Marking property is the essence of active documents. Sets in |
| string | |
| string | The identifier of the OPRA user or site that created the document |
| string | The identifier of the OPRA user or site that last updated the document |
| string | The date and time the document was created |
| string | The last date and time the document was updated |
Response Codes
Response | Description |
|---|---|
200 OK | Success |
400 Bad Request | Bad request, for more information look at body error |
403 Forbidden | Invalid token |
404 Not Found | Not found |
422 Unprocessable Entity | Unprocessable error |
Default | Unexpected error |
Modifier Collection
The Modifier Collection resource returns an items array that contains definitions for one or more modifier collections. Each modifier collection includes the name of the collection (e.g., "Sandwich Modifiers"), and a list of the product_entity_ids of the specific modifiers that are part of the collection.
The example below shows a sample GET request to the /modifier-collection endpoint:
{{dm_url}}/modifier-collection/current/?effective_date={{date}}T00:00:00.000ZThe example below shows a sample response from the Modifier Collection resource:
{
"items": [
{
"_id": "9999999999999999",
"name": "Sandwich Modifiers",
"9999999999999999": false,
"modifier_entity_ids": [
"9999999999999999",
"9999999999999999"
],
"modifier_group_entity_ids": [
"9999999999999999",
"9999999999999999"
],
"modifier_build_entity_ids": [],
"entity_id": "9999999999999999"
},
{
"_id": "9999999999999999",
"name": "Drink Modifiers",
"9999999999999999": false,
"modifier_entity_ids": [],
"modifier_group_entity_ids": [
"9999999999999999"
],
"modifier_build_entity_ids": [],
"entity_id": "9999999999999999"
}
],
"total": 2,
"page_count": 1,
"current_page": 1,
"page_size": 100
}To use the Modifier Collection resource, send a GET request to the /modifier-collection/current endpoint, defined in detail here.
GET /modifier-collection/current
Request Parameters
In | Field Name | Type | Required | Description |
|---|---|---|---|---|
header |
| string | Yes | The identifier of the company to manage data for |
header |
| [ csv of string ] | No | The unique identifiers (UIDs) of the site to manage data for |
query |
| string | no | A filter expression in OData v4 format |
query |
| int32 | No | The maximum documents to return |
query |
| int32 | No | The documents to skip before returning |
query |
| string | No | An order by expression in OData v4 format |
query |
| string | Yes | The date and time to query against |
query |
| [ string ] | No | An array of entity identifiers |
query |
| boolean | No | Hydrates-related nested objects when returning a result (For example, populate a menu with menu categories and menu groups) |
query |
| boolean | No | Include the mappings for the document |
query |
| [ csv of string ] | No | Specifies entity types for which to add mappings (For example, |
query |
| [ csv of string ] | No | Specifies |
query |
| boolean | No | Adds audit fields to each document when returning a result ( |
query |
| boolean | No | Includes the documents that are inactive for the current sites |
Success Schema
Field Name | Type | Description |
|---|---|---|
| integer | |
| [ array, object ] | Stores the definition of a Modifier Collection |
| string | The name of the Modifier Collection |
| boolean | The flag that indicates whether or not the collection is prompted for after the parent product was added to an order |
| [ array ] | The array of product entity identifiers (string, object) |
| [ array] | The array of modifier group entity identifiers which belong to this collection (string, object) |
| [ string, object ] | The array of modifier build entity identifiers which belong to this collection |
| string | The auto-assigned system document identifier |
| string | The identifier of the company that owns the document |
| string | The auto-assigned UID of the entity, set on creation. All future versions of the entity share the same |
| boolean | |
| boolean | Marking property is the essence of active documents. Sets in |
| string | |
| string | The identifier of the OPRA user or site that created the document |
| string | The identifier of the OPRA user or site that last updated the document |
| string | The date and time the document was created |
| string | The last date and time the document was updated |
Response Codes
Response | Description |
|---|---|
200 OK | Success |
404 Not Found | Not found |
Default | Unexpected error |
Modifier Group
Modifier Groups define the ways that orders can be customized. The Modifier Group resource returns an items array that contains definitions for one or more modifier groups. Each modifier group includes the name of the group (e.g. "Toppings") and a list of the modifier_entity_ids of the specific modifiers that are part of the group.
The example below shows a sample GET request to the /modifier-group endpoint:
{{dm_url}}/modifier-group/current/?effective_date={{date}}T00:00:00.000ZThe example below shows a sample response from the Modifier Group resource:
{
"items": [
{
"_id": "9999999999999999",
"modifier_group_id": "ToppingsOptions",
"name": "Toppings",
"minimum_to_select": 0,
"maximum_to_select": 9999,
"required": false,
"print_modifiers_in_red": true,
"modifier_entity_ids": [
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999",
"9999999999999999"
],
"entity_id": "9999999999999999",
"allow_bypass_modifier_group": false
}
],
"total": 1,
"page_count": 1,
"current_page": 1,
"page_size": 100
}To use the Modifier Group resource, send a GET request to the /modifier-group/current endpoint, defined in detail here.
GET /modifier-group/current
Request Parameters
In | Field Name | Type | Required | Description |
|---|---|---|---|---|
header |
| string | Yes | The identifier of the company to manage data for |
header |
| [ csv of string ] | No | The unique identifiers (UIDs) of the site to manage data for |
query |
| string | no | A filter expression in OData v4 format |
query |
| int32 | No | The maximum documents to return |
query |
| int32 | No | The documents to skip before returning |
query |
| string | No | An order by expression in OData v4 format |
query |
| string | Yes | The date and time to query against |
query |
| [ string ] | No | An array of entity identifiers |
query |
| boolean | No | Hydrates-related nested objects when returning a result (For example, populate a menu with menu categories and menu groups) |
query |
| boolean | No | Include the mappings for the document |
query |
| [ csv of string ] | No | Specifies entity types for which to add mappings (For example, |
query |
| [ csv of string ] | No | Specifies |
query |
| boolean | No | Adds audit fields to each document when returning a result ( |
query |
| boolean | No | Includes the documents that are inactive for the current sites |
Success Schema
Field Name | Type | Description |
|---|---|---|
| integer | |
| [ array, object ] | Stores the definition of a Modifier Group |
| string | The user defined identifier for this Modifier Group |
| string | The name of the Modifier Group |
| number | The minimum number of modifiers that must be selected from this group |
| number | The maximum number of modifiers that can be selected from this group |
| boolean | When checked, this allows users with the |
| boolean | Whether or not this modifier group is required to have a selection made |
| boolean | Whether or not modifiers from this group should be displayed in red |
| [ array ] | The array of product entity identifiers (string, object) |
| string | The auto-assigned system document identifier |
| string | The identifier of the company that owns the document |
| string | The auto-assigned UID of the entity, set on creation. All future versions of the entity share the same |
| boolean | |
| boolean | Marking property is the essence of active documents. Sets in |
| string | |
| string | The identifier of the OPRA user or site that created the document |
| string | The identifier of the OPRA user or site that last updated the document |
| string | The date and time the document was created |
| string | The last date and time the document was updated |
Response Codes
Response | Description |
|---|---|
200 OK | Success |
404 Not Found | Not found |
Default | Unexpected error |
Modifier Build
A Modifier Build is a group of modifiers that are frequently added to an item together. For example, "The Works" could be a modifier build that adds all the available toppings to a sandwich. The Modifier Build resource returns an items array that contains definitions for one or more modifier builds. Each modifier build includes the name of the build (e.g., "Sandwich Modifiers"), and a list of the entity_ids of the specific modifiers that are part of the build.
The example below shows a sample GET request to the /modifier-collection endpoint:
{{dm_url}}/modifier-build/current/?effective_date={{date}}T00:00:00.000ZTo use the Modifier Build resource, send a GET request to the /modifier-build/current endpoint, defined in detail here.
GET /modifier-build/current
Request Parameters
In | Field Name | Type | Required | Description |
|---|---|---|---|---|
header |
| string | Yes | The identifier of the company to manage data for |
header |
| [ csv of string ] | No | The unique identifiers (UIDs) of the site to manage data for |
query |
| string | no | A filter expression in OData v4 format |
query |
| int32 | No | The maximum documents to return |
query |
| int32 | No | The documents to skip before returning |
query |
| string | No | An order by expression in OData v4 format |
query |
| string | Yes | The date and time to query against |
query |
| [ string ] | No | An array of entity identifiers |
query |
| boolean | No | Hydrates-related nested objects when returning a result (For example, populate a menu with menu categories and menu groups) |
query |
| boolean | No | Include the mappings for the document |
query |
| [ csv of string ] | No | Specifies entity types for which to add mappings (For example, |
query |
| [ csv of string ] | No | Specifies |
query |
| boolean | No | Adds audit fields to each document when returning a result ( |
query |
| boolean | No | Includes the documents that are inactive for the current sites |
Success Schema
Field Name | Type | Description |
|---|---|---|
| integer | |
| [ array, object ] | Stores the definition of a Modifier Build |
| string | The name of the build. For example, "Default" or "The Works." |
| boolean | |
| [ array ] | The array of product entity identifiers (string, object) |
| string | The auto-assigned system document identifier |
| string | The identifier of the company that owns the document |
| string | The auto-assigned UID of the entity, set on creation. All future versions of the entity share the same |
| boolean | |
| boolean | Marking property is the essence of active documents. Sets in |
| string | |
| string | The identifier of the OPRA user or site that created the document |
| string | The identifier of the OPRA user or site that last updated the document |
| string | The date and time the document was created |
| string | The last date and time the document was updated |
Response Codes
Response | Description |
|---|---|
200 OK | Success |
404 Not Found | Not found |
Default | Unexpected error |
Order Destination
Order destinations define the ways that restaurants can deliver orders to the customers: for example, "Dine In" or "Carry Out". The Order Destination resource returns an items array that contains definitions for one or more order destinations. Each order destination definition includes the name of the order destination (e.g., "Drive Through") and a set of relevant attributes, including receipt printing colors.
The example below shows a sample GET request to the /order-destination endpoint:
{{dm_url}}/order-destination/current/?effective_date={{date}}T00:00:00.000ZThe example below shows a sample response from the Order Destination resource:
{
"items": [
{
"_id": "9999999999999999",
"entity_id": "9999999999999999",
"name": "Carry Out",
"short_name": "OUT",
"id": "carry-out",
"text_color": "#fff",
"background_color": "#098100",
"required_customer_info": [],
"optional_customer_info": [],
"segment_name": "tray"
},
{
"_id": "9999999999999999",
"entity_id": "9999999999999999",
"name": "Dine In",
"short_name": "IN",
"id": "dine-in",
"text_color": "#fff",
"background_color": "#000093",
"required_customer_info": [],
"optional_customer_info": [],
"segment_name": "tray"
},
{
"_id": "9999999999999999",
"entity_id": "9999999999999999",
"name": "Drive Thru",
"short_name": "DT",
"id": "drive thru",
"text_color": "#fff",
"background_color": "#440087",
"required_customer_info": [],
"optional_customer_info": [],
"segment_name": "tray"
},
{
"_id": "9999999999999999",
"entity_id": "9999999999999999",
"name": "Delivery",
"short_name": "DLV",
"id": "delivery",
"text_color": "#fff",
"background_color": "#a16100",
"required_customer_info": [
"address1",
"last_name",
"phone_cell",
"city",
"state",
"zip_code",
"delivery_date_time"
],
"optional_customer_info": [
"address2",
"first_name",
"email"
],
"segment_name": "tray"
}
],
"total": 4,
"page_count": 1,
"current_page": 1,
"page_size": 100
}To use the Order Destination resource, send a GET request to the /order-destination/current endpoint, defined in detail here.
GET /order-destination/current
Request Parameters
In | Field Name | Type | Required | Description |
|---|---|---|---|---|
header |
| string | Yes | The identifier of the company to manage data for |
header |
| [ csv of string ] | No | The unique identifiers (UIDs) of the site to manage data for |
query |
| string | no | A filter expression in OData v4 format |
query |
| int32 | No | The maximum documents to return |
query |
| int32 | No | The documents to skip before returning |
query |
| string | No | An order by expression in OData v4 format |
query |
| string | Yes | The date and time to query against |
query |
| [ string ] | No | An array of entity identifiers |
query |
| boolean | No | Hydrates-related nested objects when returning a result (For example, populate a menu with menu categories and menu groups) |
query |
| boolean | No | Include the mappings for the document |
query |
| [ csv of string ] | No | Specifies entity types for which to add mappings (For example, |
query |
| [ csv of string ] | No | Specifies |
query |
| boolean | No | Adds audit fields to each document when returning a result ( |
query |
| boolean | No | Includes the documents that are inactive for the current sites |
Success Schema
Field Name | Type | Description |
|---|---|---|
| integer | |
| [ array, object ] | Stores the definition of an Order Destination |
| string | The name of the destination (For example, "Carry Out") |
| string | The short name of the destination (For example, "CAOU") |
| string | The user-defined identifier of the destination (For example, "carry-out") |
| string, hex | The hexadecimal value of the color |
| string, hex | The hexadecimal value of the color |
| [ array ] | The required customer fields to capture for this order destination: (string: address1, address2, city, delivery_date_time, email, first_name, last_name, phone_cell, phone_home, phone_work, pickup_date_time, state, table_tent, zip_code, country) |
| [ array ] | The optional customer fields to capture for this order destination: (string: address1, address2, city, delivery_date_time, email, first_name, last_name, phone_cell, phone_home, phone_work, pickup_date_time, state, table_tent, zip_code, country) |
| string | The name of the order segment. The possible values are "tray," "seat," or "bag." |
| string | The consumption type. The possible values are "OnPremises" or "OffPremises." |
| boolean | Configure the default taxable destination |
| string | The auto-assigned system document identifier |
| string | The identifier of the company that owns the document |
| string | The auto-assigned UID of the entity, set on creation. All future versions of the entity share the same |
| boolean | |
| boolean | Marking property is the essence of active documents. Sets in |
| string | |
| string | The identifier of the OPRA user or site that created the document |
| string | The identifier of the OPRA user or site that last updated the document |
| string | The date and time the document was created |
| string | The last date and time the document was updated |
Response Codes
Response | Description |
|---|---|
200 OK | Success |
404 Not Found | Not found |
Default | Unexpected error |
Order Source
Order sources define the ways that customers can place orders: for example, "Web" or "Phone". The Order Source resource returns an items array that contains definitions for one or more order sources. Each order source definition includes the name of the order source (e.g. "Mobile") and a set of relevant attributes.
The example below shows a sample GET request to the /order-source endpoint:
{{dm_url}}/order-source/current/?effective_date={{date}}T00:00:00.000ZThe example below shows a sample response from the Order Source resource:
{
"items": [
{
"_id": "9999999999999999",
"name": "Web",
"order_source_id": "Web",
"restrict_re_tendering": false,
"entity_id": "9999999999999999"
},
{
"_id": "9999999999999999",
"name": "Mobile",
"order_source_id": "Mobile",
"restrict_re_tendering": false,
"entity_id": "9999999999999999"
}
],
"total": 2,
"page_count": 1,
"current_page": 1,
"page_size": 100
}To use the Order Source resource, send a GET request to the /order-source/current endpoint, defined in detail here.
GET /order-source/current
Request Parameters
In | Field Name | Type | Required | Description |
|---|---|---|---|---|
header |
| string | Yes | The identifier of the company to manage data for |
header |
| [ csv of string ] | No | The unique identifiers (UIDs) of the site to manage data for |
query |
| string | no | A filter expression in OData v4 format |
query |
| int32 | No | The maximum documents to return |
query |
| int32 | No | The documents to skip before returning |
query |
| string | No | An order by expression in OData v4 format |
query |
| string | Yes | The date and time to query against |
query |
| [ string ] | No | An array of entity identifiers |
query |
| boolean | No | Hydrates-related nested objects when returning a result (For example, populate a menu with menu categories and menu groups) |
query |
| boolean | No | Include the mappings for the document |
query |
| [ csv of string ] | No | Specifies entity types for which to add mappings (For example, |
query |
| [ csv of string ] | No | Specifies |
query |
| boolean | No | Adds audit fields to each document when returning a result ( |
query |
| boolean | No | Includes the documents that are inactive for the current sites |
Success Schema
Field Name | Type | Description |
|---|---|---|
| integer | |
| [ array, object ] | Stores the definition of the Order Source |
| string | The Order Source name |
| string | The Order Source identifier |
| boolean | The flag that indicates whether or not to restrict the re-tender operation for orders which come from sources |
| string | The auto-assigned system document identifier |
| string | The identifier of the company that owns the document |
| string | The auto-assigned UID of the entity, set on creation. All future versions of the entity share the same |
| boolean | |
| boolean | Marking property is the essence of active documents. Sets in |
| string | |
| string | The identifier of the OPRA user or site that created the document |
| string | The identifier of the OPRA user or site that last updated the document |
| string | The date and time the document was created |
| string | The last date and time the document was updated |
Response Codes
Response | Description |
|---|---|
200 OK | Success |
404 Not Found | Not found |
Default | Unexpected error |
Product
The Product resource returns an items array that contains definitions for one or more products. Each product definition includes the product name (e.g., "Flamethrower Fish Sandwich"), product images, a product description, price and tax information, and entity_ids for any groups or collections that the product belongs to.
The example below shows a sample GET request to the /product endpoint:
{{dm_url}}/product/current?effective_date={{date}}T00:00:01.590Z&entity_ids=['9999999999999999']The example below shows a sample response from the Product resource:
{
"items": [
{
"_id": "9999999999999999",
"name": "Flamethrower Fish Sandwich",
"product_id": "FlamethrowerFish",
"product_type": "standard",
"revenue_class": "default",
"reporting_category": {
"minor_reporting_category_entity_id": "9999999999999999",
"major_reporting_category_entity_id": "9999999999999999"
},
"alt_item_name": "",
"images": [
{
"image_set_entity_id": "9999999999999999",
"tag": "Flamethrower+Fish+Sandwich.jpg",
"source_url": "https://xoo-images.xenial.com/Flamethrower+Fish+Sandwich.jpg"
},
{
"image_set_entity_id": "9999999999999999",
"tag": "Flamethrower+Fish+Sandwich.jpg",
"source_url": "https://xoo-images.xenial.com/Flamethrower+Fish+Sandwich.jpg"
},
{
"image_set_entity_id": "9999999999999999",
"tag": "Flamethrower+Fish+Sandwich.jpg",
"source_url": "https://xoo-images.xenial.com/Flamethrower+Fish+Sandwich.jpg"
}
],
"item_description": "This fish sandwich is straight fire. We take a fried filet of
wild-caught Alaskan cod and top it with red onion, spring mix
lettuce and a spicy house-made Sriracha sauce on a fresh baked
bun.",
"is_open_price": false,
"is_bundle": false,
"builds": [
{
"is_default": true,
"name": "Default",
"products": [
{
"product_entity_id": "9999999999999999",
"9999999999999999": false
},
{
"product_entity_id": "9999999999999999",
"9999999999999999": false
},
{
"product_entity_id": "9999999999999999",
"9999999999999999": false
},
{
"product_entity_id": "9999999999999999",
"9999999999999999": false
}
]
}
],
"kitchen_routing_category_entity_ids": [
"9999999999999999",
"9999999999999999"
],
"tax_group_entity_id": "9999999999999999",
"prompt_for_quantity": false,
"default_cost": 10,
"kitchen_routing_type": "by_category",
"product_tag_entity_ids": [],
"product_category_entity_ids": [],
"prompt_item_conversio_on_change": false,
"entity_id": "9999999999999999",
"item_type": "product",
"modifier_collection_entity_id": "9999999999999999",
"nutritional_data": [
{
"name": "Calories",
"value": 789.5,
"unit": "Count"
}
],
"include_on_item_count": true,
"include_on_item_count_value": 1,
"unit_type": "none",
"restricted_order_source_entity_ids": [],
"restrict_availability_order_source": false,
"bundle_components_entity_ids": [],
"bundle_components": []
}
],
"total": 1,
"page_count": 1,
"current_page": 1,
"page_size": 100
}To use the Product resource, send a GET request to the /product/current endpoint, defined in detail here.
GET /product/current
Request Parameters
In | Field Name | Type | Required | Description |
|---|---|---|---|---|
header |
| string | Yes | The identifier of the company to manage data for |
header |
| [ csv of string ] | No | The unique identifiers (UIDs) of the site to manage data for |
query |
| string | no | A filter expression in OData v4 format |
query |
| int32 | No | The maximum documents to return |
query |
| int32 | No | The documents to skip before returning |
query |
| string | No | An order by expression in OData v4 format |
query |
| string | Yes | The date and time to query against |
query |
| [ string ] | No | An array of entity identifiers |
query |
| boolean | No | Hydrates-related nested objects when returning a result (For example, populate a menu with menu categories and menu groups) |
query |
| boolean | No | Include the mappings for the document |
query |
| [ csv of string ] | No | Specifies entity types for which to add mappings (For example, |
query |
| [ csv of string ] | No | Specifies |
query |
| boolean | No | Adds audit fields to each document when returning a result ( |
query |
| boolean | No | Includes the documents that are inactive for the current sites |
Success Schema
Field Name | Type | Description |
|---|---|---|
| integer | |
| [ array, object ] | The product JSON-schema for validation create |
| string | |
| string | The product identifier |
| string | The product caption. The caption supports maximum five (5) lines and 255 characters. |
| string | The type of product. The possible values are "standard," "modifier," "comment," "placeholder," "modifier_placeholder," "gift_card," "gift_certificate," "fee," or "retail_item." |
| string | |
| boolean | The flag that indicates if this product needs to be added to the item count |
| integer | The field to determine how a product affects the count |
| object | |
| string, object | |
| string, object | |
| string | |
| string | |
| boolean | |
| boolean | The flag that indicates whether or not this product is a bundle |
| [ array ] | An array of |
| [ array ] | An array of |
| string, object | The |
| [ array ] | The product build JSON-schema id (string, object) (optional) |
| string, object | |
| string | |
| boolean | |
| [ array, object ] |
|
| string, object | |
| boolean | |
| string, object | |
| number | The default cost of the product |
| integer | Allows the user to set the size for each unit for the price that will be configured |
| string | Allows the user to select the type of the unit that makes up the item. The possible values are "none," "pack," "each," "case," "bottle," "can," "gallon," "quart," "milliliter," "liter," "pound," "ounce," "gram," or "kilograms." |
| boolean | The flag that indicates whether or not this modifier always prints in red (overrides modifier group setting) |
| boolean | The flag that indicates whether or not this modifier is included by default in a build |
| boolean | The flag that indicates whether or not this modifier allows changing quantities |
| object |
|
| string, object | The entity identifier of the variant that this modifier represents. For example the "EXTRA" or "NO" variant or an empty string if this is a parent modifier. |
| string, object | The parent modifier entity identifier that this product is a variant of. For example, the "Cheese" modifier, if this is the "EXTRA Cheese" modifier, or an empty string if this is a parent modifier. |
| [ array ] | The variations that are associated to this parent product (object) variant_entity_id |
| string, object | The entity identifier of the modifier variant (For example, the "EXTRA" or "NO" variant) |
| string, object | The product entity identifier that represents the modifier (For example, the "EXTRA Cheese" modifier) |
| boolean | |
| boolean | |
| boolean | |
| [ array ] | The category identifiers provided by IRIS/EDM not exposed to the Data Management (DM) user interface (UI) (string) |
| [ array ] | The external tag identifiers (string) |
| [ array ] | An array of the product related images (object).
|
| string, object | The image set entity identifier |
| string | The product image string tag (image description) |
| string | The product image source URL |
| [ array ] | An array of the nutritional data for the product (object) name |
| string | The nutritional information name. For example, Calcium, Calories, Saturated Fat, Polyunsaturated Fat, Monounsaturated Fat, Cholesterol, Carbohydrates, Fiber, Iron, Magnesium, Potassium, Protein, Sodium, Sugar, Vitamin A, Vitamin B12, Vitamin C, Vitamin D. |
| number | The nutritional information minValue |
| number | The nutritional information value or maxValue in case of range |
| string | The nutritional information unit. For example Milligrams, Count, Grams, or IU. |
| [ array ] | An array of Product Category entity identifiers (string, object) |
| [ array ] | An array of tag entity identifiers (string, object) |
| boolean | Configure the prompt for the quantity setting for products |
| string | The type of kitchen routing. The possible values are "by_category" or "by_destination." |
| string, object | The order destination entity identifier |
| [ array ] | An array of objects with |
| [ array ] | An array of |
| [ array ] | An array of tag entity identifiers (string, object) |
| [ array ] | An array of alternate price look up (PLU) codes (string) |
| boolean | The flag that indicates if this product is a liability item (For example, gift card) |
| string | The product type. The possible values are "product," "gift_card," "gift_certificate," "retail_item," or "fee." |
| object | An array of the pay type entity identifiers.
|
| [ array ] | An array of the restricted Order Source entity identifiers (string, object) |
| boolean | The flag that indicates whether or not to restrict availability by the order source or not |
| string | The primary product name for use with voice ordering |
| string | The typical pronunciations of the product name or alternate names for the product (comma separated) |
| boolean | Enables time-based pricing logic |
| string | The auto-assigned system document identifier |
| string | The identifier of the company that owns the document |
| string | The auto-assigned UID of the entity, set on creation. All future versions of the entity share the same |
| boolean | |
| boolean | Marking property is the essence of active documents. Sets in |
| string | |
| string | The identifier of the OPRA user or site that created the document |
| string | The identifier of the OPRA user or site that last updated the document |
| string | The date and time the document was created |
| string | The last date and time the document was updated |
Response Codes
Response | Description |
|---|---|
200 OK | Success |
404 Not Found | Not found |
Default | Unexpected error |
Product Category
The Product Category resource returns an items array that contains definitions for one or more product categories. Each product category definition includes the name of the category (e.g., "Small Combo") and the entity_id of the category.
The example below shows a sample GET request to the /product-category endpoint:
{{dm_url}}/product-category/current?effective_date={{date}}T00:00:01.590ZThe example below shows a sample response from the Product Category resource:
{
"items": [
{
"_id": "9999999999999999",
"entity_id": "9999999999999999",
"name": "Small Combo",
"category_id": "9999999"
},
{
"_id": "9999999999999999",
"entity_id": "9999999999999999",
"name": "Medium Combo",
"category_id": "9999999"
},
{
"_id": "9999999999999999",
"entity_id": "9999999999999999",
"name": "Large Combo",
"category_id": "9999999"
}
],
"total": 3,
"page_count": 1,
"current_page": 1,
"page_size": 100
}To use the Product Category resource, send a GET request to the /product-category/current endpoint, defined in detail here.
GET /product-category/current
Request Parameters
In | Field Name | Type | Required | Description |
|---|---|---|---|---|
header |
| string | Yes | The identifier of the company to manage data for |
header |
| [ csv of string ] | No | The unique identifiers (UIDs) of the site to manage data for |
query |
| string | no | A filter expression in OData v4 format |
query |
| int32 | No | The maximum documents to return |
query |
| int32 | No | The documents to skip before returning |
query |
| string | No | An order by expression in OData v4 format |
query |
| string | Yes | The date and time to query against |
query |
| [ string ] | No | An array of entity identifiers |
query |
| boolean | No | Hydrates-related nested objects when returning a result (For example, populate a menu with menu categories and menu groups) |
query |
| boolean | No | Include the mappings for the document |
query |
| [ csv of string ] | No | Specifies entity types for which to add mappings (For example, |
query |
| [ csv of string ] | No | Specifies |
query |
| boolean | No | Adds audit fields to each document when returning a result ( |
query |
| boolean | No | Includes the documents that are inactive for the current sites |
Success Schema
Field Name | Type | Description |
|---|---|---|
| integer | |
| [ array, object ] | The product category request create validation JSON-schema |
| string | The name of the product category |
| string | |
| string | The auto-assigned system document identifier |
| string | The identifier of the company that owns the document |
| string | The auto-assigned UID of the entity, set on creation. All future versions of the entity share the same |
| boolean | |
| boolean | Marking property is the essence of active documents. Sets in |
| string | |
| string | The identifier of the OPRA user or site that created the document |
| string | The identifier of the OPRA user or site that last updated the document |
| string | The date and time the document was created |
| string | The last date and time the document was updated |
Response Codes
Response | Description |
|---|---|
200 OK | Success |
404 Not Found | Not found |
Default | Unexpected error |
Product Price
The Product Price resource returns an items array that contains pricing details for one or more products. The products can be standard products or variations. Each product price definition includes the name of the product (e.g., "Small Coke"), the unit price of the product, and the way that product price type is applied to an order.
The example below shows a sample GET request to the /product-price endpoint:
{{dm_url}}/product-price/current?effective_date={{date}}T00:00:01.590Z&entity_ids=['9999999999999999', '9999999999999999']The example below shows a sample response from the Product Price resource:
{
"items": [
{
"_id": "9999999999999999",
"type": "standard",
"unit_price": 20,
"time_period_entity_ids": [],
"product_entity_id": "9999999999999999",
"product_id": "Kobe Burger",
"external_id": "",
"entity_id": "9999999999999999"
},
{
"_id": "9999999999999999",
"unit_price": 10,
"time_period_entity_ids": [],
"name": "Cheese for Kobe Burger",
"type": "child-product",
"apply_type": "replace",
"entity_id": "9999999999999999",
"parent_product_entity_ids": [
"9999999999999999"
],
"product_entity_id": "9999999999999999",
"product_id": "ProvoloneCheese",
"external_id": ""
}
],
"total": 2,
"page_count": 1,
"current_page": 1,
"page_size": 100
}To use the Product Price resource, send a GET request to the /product-price/current endpoint, defined in detail here.
GET /product-price/current
Request Parameters
In | Field Name | Type | Required | Description |
|---|---|---|---|---|
header |
| string | Yes | The identifier of the company to manage data for |
header |
| [ csv of string ] | No | The unique identifiers (UIDs) of the site to manage data for |
query |
| string | no | A filter expression in OData v4 format |
query |
| int32 | No | The maximum documents to return |
query |
| int32 | No | The documents to skip before returning |
query |
| string | No | An order by expression in OData v4 format |
query |
| string | Yes | The date and time to query against |
query |
| [ string ] | No | An array of entity identifiers |
query |
| boolean | No | Hydrates-related nested objects when returning a result (For example, populate a menu with menu categories and menu groups) |
query |
| boolean | No | Include the mappings for the document |
query |
| [ csv of string ] | No | Specifies entity types for which to add mappings (For example, |
query |
| [ csv of string ] | No | Specifies |
query |
| boolean | No | Adds audit fields to each document when returning a result ( |
query |
| boolean | No | Includes the documents that are inactive for the current sites |
Success Schema
Field Name | Type | Description |
|---|---|---|
| integer | |
| [ array, object ] | The product price request create validation JSON-schema - name (string) (optional) |
| string | |
| string | The possible values are "standard," "conditional," "child-tag," "child-product," or "child-both." |
| number | |
| string | |
| [ string, object ] | |
| string, object | |
| [ string, object ] | |
| [ string, object ] | |
| [ string ] | |
| object | |
| integer | |
| integer | |
| string | The possible values are "replace" or "adjust" |
| [ array ] | The category identifiers provided by IRIS/EDM not exposed to the Data Management (DM) user interface (UI) (string) |
| [ array ] | An array of the Product Category entity identifiers (string, object) |
| string, object | |
| string | The auto-assigned system document identifier |
| string | The identifier of the company that owns the document |
| string | The auto-assigned UID of the entity, set on creation. All future versions of the entity share the same |
| boolean | |
| boolean | Marking property is the essence of active documents. Sets in |
| string | |
| string | The identifier of the OPRA user or site that created the document |
| string | The identifier of the OPRA user or site that last updated the document |
| string | The date and time the document was created |
| string | The last date and time the document was updated |
Response Codes
Response | Description |
|---|---|
200 OK | Success |
404 Not Found | Not found |
Default | Unexpected error |
Tax Definition
Tax definitions define different taxes and rates that will be applied to orders. The Tax Definition resource returns an items array that contains one or more tax definitions. Each tax definition includes the name of the tax definition (e.g., "Sales Tax"), the tax rate, the type, and filters that determine how the tax is applied.
The example below shows a sample GET request to the /tax-definition endpoint:
{{dm_url}}/tax-definition/current?effective_date={{date}}T00:00:01.590ZThe example below shows a sample response from the Tax Definition resource:
{
"items": [
{
"_id": "9999999999999999",
"based_on": "price",
"tax_inclusive": false,
"entity_id": "9999999999999999",
"name": "Sales Tax",
"type": "fixed_rate",
"value": 8.25
},
{
"_id": "9999999999999999",
"name": "South Charlotte",
"type": "fixed_rate",
"value": 7.32,
"based_on": "price",
"tax_inclusive": false,
"filter": {
"item_tax_groups": [
"9999999999999999"
],
"modifier_tax_groups": [
"9999999999999999"
],
"consumption_types": []
},
"tax_on_tax": false,
"entity_id": "9999999999999999"
}
],
"total": 2,
"page_count": 1,
"current_page": 1,
"page_size": 100
}To use the Tax Definition resource, send a GET request to the /tax-definition/current endpoint, defined in detail here.
GET /tax-definition/current
Request Parameters
In | Field Name | Type | Required | Description |
|---|---|---|---|---|
header |
| string | Yes | The identifier of the company to manage data for |
header |
| [ csv of string ] | No | The unique identifiers (UIDs) of the site to manage data for |
query |
| string | no | A filter expression in OData v4 format |
query |
| int32 | No | The maximum documents to return |
query |
| int32 | No | The documents to skip before returning |
query |
| string | No | An order by expression in OData v4 format |
query |
| string | Yes | The date and time to query against |
query |
| [ string ] | No | An array of entity identifiers |
query |
| boolean | No | Hydrates-related nested objects when returning a result (For example, populate a menu with menu categories and menu groups) |
query |
| boolean | No | Include the mappings for the document |
query |
| [ csv of string ] | No | Specifies entity types for which to add mappings (For example, |
query |
| [ csv of string ] | No | Specifies |
query |
| boolean | No | Adds audit fields to each document when returning a result ( |
query |
| boolean | No | Includes the documents that are inactive for the current sites |
Success Schema
Field Name | Type | Description |
|---|---|---|
| integer | |
| [ array, object ] |
|
| string | The name of the tax (For example, NC sales tax) |
| string | Specifies the type of tax rate. The possible values are "fixed_amount" or "fixed_rate." |
| number | The value is either a percentage or a fixed amount based on the type value |
| string | The possible values are "price" or "quantity" |
| boolean | If active: Hide the tax amounts both in the guest check and within the order entry |
| object |
|
| [ string, object ] | A list of item names or tax category names to filter on |
| [ string ] | The list of destinations |
| [ string, object ] | The list of destination entity identifiers |
| [ string, object ] | The list of item names or tax category names to filter on |
| [ string ] | The list of tender type names to filter on |
| [ string ] | The list of discount names to filter on |
| object | Specifies the condition around items that satisfy the filter tags.
|
| string | The scope of the conditions. The possible values are "order," "item," or "tender." The scope of the condition is the whole order if the scope is "order," limited to the current item and child items if the scope is "item," and limited to the tender type if the scope is "tender." |
| string | The possible values are "price" or "count." The total is the price of the items across the check if the |
| string | The condition sign ( ==, >, <, >=, <= ) |
| string | The target value for the condition |
| [ string ] | The consumption types. The possible values are "OnPremises" or "OffPremises." |
| number | |
| number | |
| [ array, object ] |
|
| string | |
| number | |
| number | |
| number | |
| [ array, object ] |
|
| string | |
| number | |
| number | |
| number | |
| boolean | The flag that indicates if the tax rule is active or not |
| boolean | The possible values are "Yes" or "No." The default value is "No." If "Yes," the tax on tax is calculated after calculating all the regular taxes first, and then loop back and calculate the tax on tax on the total taxes. For example, on a single item $1.00 order where three 10% tax rates apply with the second two having tax on tax value "Yes," tax1 would be $0.10, and tax2 and tax3 would be $0.13, which is 10% of $1.00 + 10% of (0.10+0.10+0.10). |
| string | The possible values are "roundup," "rounddown," or "nearest." The default value is "nearest." It is the rounding method to apply on each tax value. |
| boolean | The tax buckets that have this value set as "True" are collectively rounded instead of individually rounded to produce total tax |
| string | The auto-assigned system document identifier |
| string | The identifier of the company that owns the document |
| string | The auto-assigned UID of the entity, set on creation. All future versions of the entity share the same |
| boolean | |
| boolean | Marking property is the essence of active documents. Sets in |
| string | |
| string | The identifier of the OPRA user or site that created the document |
| string | The identifier of the OPRA user or site that last updated the document |
| string | The date and time the document was created |
| string | The last date and time the document was updated |
Response Codes
Response | Description |
|---|---|
200 OK | Success |
404 Not Found | Not found |
Default | Unexpected error |
Tax Group
Tax groups define categories that indicate the different taxes that apply to a particular order. The Tax Group resource returns an items array that contains definitions for one or more tax groups. Each tax group definition includes the name of the tax group (e.g. "Non-taxable"), and the entity_id of the group.
The example below shows a sample GET request to the /tax-group endpoint:
{{dm_url}}/tax-group/current?effective_date={{date}}T00:00:01.590ZThe example below shows a sample response from the Tax Group resource:
{
"items": [
{
"_id": "9999999999999999",
"name": "Non-Taxable",
"tax_code": "1",
"entity_id": "9999999999999999"
},
{
"_id": "9999999999999999",
"name": "Prepared",
"tax_code": "2",
"entity_id": "9999999999999999"
},
{
"_id": "9999999999999999",
"name": "Pre-packaged",
"tax_code": "3",
"entity_id": "9999999999999999"
},
{
"_id": "9999999999999999",
"name": "TestTaxes",
"tax_code": "TestTaxes",
"entity_id": "9999999999999999"
}
],
"total": 4,
"page_count": 1,
"current_page": 1,
"page_size": 100
}To use the Tax Group resource, send a GET request to the /tax-group/current endpoint, defined in detail here.
GET /tax-group/current
Request Parameters
In | Field Name | Type | Required | Description |
|---|---|---|---|---|
header |
| string | Yes | The identifier of the company to manage data for |
header |
| [ csv of string ] | No | The unique identifiers (UIDs) of the site to manage data for |
query |
| string | no | A filter expression in OData v4 format |
query |
| int32 | No | The maximum documents to return |
query |
| int32 | No | The documents to skip before returning |
query |
| string | No | An order by expression in OData v4 format |
query |
| string | Yes | The date and time to query against |
query |
| [ string ] | No | An array of entity identifiers |
query |
| boolean | No | Hydrates-related nested objects when returning a result (For example, populate a menu with menu categories and menu groups) |
query |
| boolean | No | Include the mappings for the document |
query |
| [ csv of string ] | No | Specifies entity types for which to add mappings (For example, |
query |
| [ csv of string ] | No | Specifies |
query |
| boolean | No | Adds audit fields to each document when returning a result ( |
query |
| boolean | No | Includes the documents that are inactive for the current sites |
Success Schema
Field Name | Type | Description |
|---|---|---|
| integer | |
| [ array, object ] | Stores the definition of a tax group |
| string | The name of the tax group |
| string | |
| string | The auto-assigned system document identifier |
| string | The identifier of the company that owns the document |
| string | The auto-assigned UID of the entity, set on creation. All future versions of the entity share the same |
| boolean | |
| boolean | Marking property is the essence of active documents. Sets in |
| string | |
| string | The identifier of the OPRA user or site that created the document |
| string | The identifier of the OPRA user or site that last updated the document |
| string | The date and time the document was created |
| string | The last date and time the document was updated |
Response Codes
Response | Description |
|---|---|
200 OK | Success |
404 Not Found | Not found |
Default | Unexpected error |
Variant
Variants define the ways that modifiers can be applied to products: for example "Add" or "No". The Variant resource returns an items array that contains definitions for one or more variants. Each variant definition includes the name of the variant (e.g. "Extra"), details about price and quantity adjustments that the variant may require, and the entity_id of the variant.
The example below shows a sample GET request to the /variant endpoint:
{{dm_url}}/variant/current?effective_date={{date}}T00:00:01.590ZThe example below shows a sample response from the Variant resource:
{
"items": [
{
"_id": "9999999999999999",
"name": "Add",
"product_type": "modifier",
"price_adjustment_type": "none",
"price_adjustment_value": 0,
"9999999999999999": "none",
"quantity_adjustment_value": 0,
"action": "add",
"sort_order": 1,
"entity_id": "9999999999999999"
},
{
"_id": "9999999999999999",
"name": "No",
"product_type": "modifier",
"price_adjustment_type": "none",
"price_adjustment_value": 0,
"9999999999999999": "none",
"quantity_adjustment_value": 0,
"action": "no",
"sort_order": 2,
"entity_id": "9999999999999999"
},
{
"_id": "9999999999999999",
"name": "Lite",
"product_type": "modifier",
"price_adjustment_type": "none",
"price_adjustment_value": 0,
"9999999999999999": "none",
"quantity_adjustment_value": 0,
"action": "none",
"sort_order": 3,
"entity_id": "9999999999999999"
},
{
"_id": "9999999999999999",
"name": "Extra",
"product_type": "modifier",
"price_adjustment_type": "none",
"price_adjustment_value": 0,
"9999999999999999": "none",
"quantity_adjustment_value": 0,
"action": "none",
"sort_order": 4,
"entity_id": "9999999999999999"
}
],
"total": 15,
"page_count": 1,
"current_page": 1,
"page_size": 100
}To use the Variant resource, send a GET request to the /variant/current endpoint, defined in detail here.
GET /variant/current
Request Parameters
In | Field Name | Type | Required | Description |
|---|---|---|---|---|
header |
| string | Yes | The identifier of the company to manage data for |
header |
| [ csv of string ] | No | The unique identifiers (UIDs) of the site to manage data for |
query |
| string | no | A filter expression in OData v4 format |
query |
| int32 | No | The maximum documents to return |
query |
| int32 | No | The documents to skip before returning |
query |
| string | No | An order by expression in OData v4 format |
query |
| string | Yes | The date and time to query against |
query |
| [ string ] | No | An array of entity identifiers |
query |
| boolean | No | Hydrates-related nested objects when returning a result (For example, populate a menu with menu categories and menu groups) |
query |
| boolean | No | Include the mappings for the document |
query |
| [ csv of string ] | No | Specifies entity types for which to add mappings (For example, |
query |
| [ csv of string ] | No | Specifies |
query |
| boolean | No | Adds audit fields to each document when returning a result ( |
query |
| boolean | No | Includes the documents that are inactive for the current sites |
Success Schema
Field Name | Type | Description |
|---|---|---|
| integer | |
| [ array, object ] | Stores the definition of a variant. |
| string | The name of the variant |
| string | The type of product the variant can be applied to. The possible values are "standard" or "modifier." |
| string, object | The |
| string | How the variant affects the price, either by a fixed amount or a percentage. The possible values are "none," "fixed_amount," or "fixed_rate." |
| number | The value of the price multiplier, either a currency value such as 0.50 for $0.50 or 0.50 for 50%. |
| string | How the variant affects the quantity, either by a fixed amount or a percentage. The possible values are "none," "fixed_amount," or "fixed_rate." |
| number | The value of the quantity multiplier, either a currency value such as 0.50 for $0.50 or 0.50 for 50% |
| string | Identifies whether or not the variation is the |
| integer | The sort option for the variant positioning. For example, Small (1), Medium (2), Large (3). |
| string | The auto-assigned system document identifier |
| string | The identifier of the company that owns the document |
| string | The auto-assigned UID of the entity, set on creation. All future versions of the entity share the same |
| boolean | |
| boolean | Marking property is the essence of active documents. Sets in |
| string | |
| string | The identifier of the OPRA user or site that created the document |
| string | The identifier of the OPRA user or site that last updated the document |
| string | The date and time the document was created |
| string | The last date and time the document was updated |
Response Codes
Response | Description |
|---|---|
200 OK | Success |
404 Not Found | Not found |
Default | Unexpected error |
Variant Type
The Variant Type resource returns an items array that contains definitions for one or more variant types. Each variant type definition includes the name of the variant type (e.g., "Size") and a set of relevant attributes.
The example below shows a sample GET request to the /variant-type endpoint:
{{dm_url}}/variant-type/current?effective_date={{date}}T00:00:01.590ZThe example below shows a sample response from the Variant Type resource:
{
"items": [
{
"_id": "9999999999999999",
"name": "Size",
"code": "size",
"sync_product_variations": "sync_all",
"entity_id": "9999999999999999"
},
{
"_id": "9999999999999999",
"name": "Meal",
"code": "meal",
"sync_product_variations": "sync_all",
"entity_id": "9999999999999999"
}
],
"total": 2,
"page_count": 1,
"current_page": 1,
"page_size": 100
}To use the Variant Type resource, send a GET request to the /variant-type/current endpoint, defined in detail here.
GET /variant-type/current
Request Parameters
In | Field Name | Type | Required | Description |
|---|---|---|---|---|
header |
| string | Yes | The identifier of the company to manage data for |
header |
| [ csv of string ] | No | The unique identifiers (UIDs) of the site to manage data for |
query |
| string | no | A filter expression in OData v4 format |
query |
| int32 | No | The maximum documents to return |
query |
| int32 | No | The documents to skip before returning |
query |
| string | No | An order by expression in OData v4 format |
query |
| string | Yes | The date and time to query against |
query |
| [ string ] | No | An array of entity identifiers |
query |
| boolean | No | Hydrates-related nested objects when returning a result (For example, populate a menu with menu categories and menu groups) |
query |
| boolean | No | Include the mappings for the document |
query |
| [ csv of string ] | No | Specifies entity types for which to add mappings (For example, |
query |
| [ csv of string ] | No | Specifies |
query |
| boolean | No | Adds audit fields to each document when returning a result ( |
query |
| boolean | No | Includes the documents that are inactive for the current sites |
Success Schema
Field Name | Type | Description |
|---|---|---|
| integer | |
| [ array, object ] | Describes the variation type of the product |
| string | The name of the variation type |
| string | |
| string | The product variations synchronization method applied at Data Management (DM). The possible values are "sync_all" or "prompt." |
| string | The auto-assigned system document identifier |
| string | The identifier of the company that owns the document |
| string | The auto-assigned UID of the entity, set on creation. All future versions of the entity share the same |
| boolean | |
| boolean | Marking property is the essence of active documents. Sets in |
| string | |
| string | The identifier of the OPRA user or site that created the document |
| string | The identifier of the OPRA user or site that last updated the document |
| string | The date and time the document was created |
| string | The last date and time the document was updated |
Response Codes
Response | Description |
|---|---|
200 OK | Success |
404 Not Found | Not found |
Default | Unexpected error |