Public API
Menus API
Menu Create
8min
creating menus the menucreate mutation enables integrators to create market ready location level menus due to the size of menu creation requests, when one is received we return a menucreationrequestid and enqueue the menu to be processed asyncronously t he provided uuid can be used with the menu creation request docid 75j30izdnoxmqtj6v1pfv query to retrieve detailed information about the status of the specific menu creation request to be automatically infromed when the request has completed and this information is available we recommend subscribing to menu notifications docid\ gjaiaywoubugvfi8lfy6e mutation mutation mutation menucreate($menu menuinput!) { menucreate(menu $menu) { errors { details message } success menucreationrequestid } } variables variables { "menu" { "name" "your menu name", "locationid" "ezcater caterer id", "posid" "your menu version id", "startdate" "2025 05 01", "enddate" "2025 06 01", "categories" \[ { "name" "pizzas", "posid" "pizzas category id", "sortorder" 2, "description" "a selection of our famous pizzas", "itemposids" \[ "margherita pizza item id" ] }, { "name" "desserts", "posid" "desserts category id", "sortorder" 3, "description" "a selection of our amazing desserts", "itemposids" \[ "chocolate cake item id" ] }, { "name" "drinks", "posid" "drinks category id", "sortorder" 4, "description" null, "itemposids" \[ "assorted sodas item id" ] } ], "items" \[ { "name" "margherita pizza", "posid" "margherita pizza item id", "channels" \["marketplace"], "imageurl" "https //your domain com/menu item images/margherita pizza jpg", "selections" \[ { "price" 16 75, "posid" "12 inch pizza item selection id", "size" "12\\" pizza", "serves" 2, "mincalories" 512, "maxcalories" 1024, "sortorder" 1 }, { "price" 24 75, "posid" "16 inch pizza item selection id", "size" "16\\" pizza", "serves" 4, "mincalories" 512, "maxcalories" 1024, "sortorder" 1 }, { "price" 32 75, "posid" "20 inch pizza item selection id", "size" "20\\" pizza", "serves" 8, "mincalories" 512, "maxcalories" 1024, "sortorder" 1 } ], "description" "thin crust margherita pizza", "taxcategory" "prepared food", "quantityunit" "pizza", "itemtypetags" \[], "optionposids" \[ "cheese addon options id" ], "foodlabelingtags" \["popular","vegetarian"], "individualwrapstatus" "never" }, { "name" "chocolate cake", "posid" "chocolate cake item id", "channels" \["marketplace"], "imageurl" null, "selections" \[ { "price" 5 75, "posid" "chocolate cake item selection id", "size" "1", "serves" 5, "sortorder" 1 } ], "description" "rich and creamy flourless dark chocolate cake", "taxcategory" "cakes and pies", "quantityunit" "cake", "itemtypetags" \["dessert"], "optionposids" \[], "foodlabelingtags" \["gluten free"] }, { "name" "assorted sodas", "posid" "assorted sodas item id", "channels" \["marketplace"], "imageurl" null, "selections" \[ { "price" 2 75, "posid" "assorted sodas item selection id", "size" "2ltr soda", "serves" 4, "sortorder" 1 } ], "description" "assorted 2 liter soda bottles", "taxcategory" "soda", "quantityunit" "two liter", "itemtypetags" \["drinks"], "optionposids" \[ "soda options id" ], "foodlabelingtags" \["gluten free", "vegan", "vegetarian"] } ], "options" \[ { "name" "cheese addon", "posid" "cheese addon options id", "catererlabel" "cheese", "choiceposids" \[ "feta choice id", "parmigiano reggiano choice id", "parmesan choice id" ], "customerprompt" "add additional cheese?", "maxchoiceselections" null, "minchoiceselections" 2 }, { "name" "soda", "posid" "soda options id", "catererlabel" "soda", "choiceposids" \[ "brand name soda choice id", "diet brand name soda choice id" ], "customerprompt" "select soda", "maxchoiceselections" 1, "minchoiceselections" 1 } ], "choices" \[ { "name" "feta", "posid" "feta choice id", "selections" \[ { "price" 1 75, "posid" "feta choice 12 inch selection id", "sortorder" 1 }, { "price" 3 75, "posid" "feta choice 16 inch selection id", "sortorder" 2 }, { "price" 5 75, "posid" "feta choice 20 inch selection id", "sortorder" 3 } ], "description" "feta cheese", "choicetypetags" \[], "foodlabelingtags" \["vegetarian"], "enablesubquantities" false }, { "name" "parmigiano reggiano", "posid" "parmigiano reggiano choice id", "selections" \[ { "price" 1 75, "posid" "parmigiano reggiano choice 12 inch selection id", "sortorder" 1 }, { "price" 3 75, "posid" "parmigiano reggiano choice 16 inch selection id", "sortorder" 2 }, { "price" 5 75, "posid" "parmigiano reggiano choice 20 inch selection id", "sortorder" 3 } ], "description" "parmigiano reggiano cheese", "choicetypetags" \[], "foodlabelingtags" \["vegetarian"], "enablesubquantities" false }, { "name" "parmesan", "posid" "parmesan choice id", "selections" \[ { "price" 1 75, "posid" "parmesan choice 12 inch selection id", "sortorder" 1 }, { "price" 3 75, "posid" "parmesan choice 16 inch selection id", "sortorder" 2 }, { "price" 5 75, "posid" "parmesan choice 20 inch selection id", "sortorder" 3 } ], "description" "parmesan cheese", "choicetypetags" \[], "foodlabelingtags" \["vegetarian"], "enablesubquantities" false }, { "name" "brand name soda", "posid" "brand name soda choice id", "selections" \[ { "price" 0 0, "posid" "brand name soda selection id", "sortorder" 1 } ], "description" "refreshing brand name soda", "choicetypetags" \["drinks"], "foodlabelingtags" \[], "enablesubquantities" false }, { "name" "diet brand name soda", "posid" "diet brand name soda choice id", "selections" \[ { "price" 0 0, "posid" "diet brand name soda choice selection id", "sortorder" 1 } ], "description" "refreshing diet brand name soda", "choicetypetags" \["drinks"], "foodlabelingtags" \[], "enablesubquantities" false } ] } } variables null { "menu" { "name" null, "locationid" null, "posid" null, "startdate" null, "enddate" null, "categories" \[ { "description" null, "itemposids" null, "name" null, "posid" null, "sortorder" null } ], "items" \[ { "caterernote" null, "channels" null, "daybeforecutofftime" null, "description" null, "description2" null, "foodlabelingtags" null, "imageurl" null, "individualwrapstatus" null, "itemtypetags" null, "leadtime" null, "name" null, "optionposids" null, "posid" null, "quantityoptions" null, "quantityunit" null, "selections" \[ { "maxcalories" null, "mincalories" null, "posid" null, "price" null, "serves" null, "size" null, "sortorder" null } ], "selectionprompt" null, "sizelabel" null, "sortorder" null, "taxcategory" null, "vegetarianoption" null } ], "options" \[ { "catererlabel" null, "choiceposids" null, "customerprompt" null, "maxchoiceselections" null, "minchoiceselections" null, "name" null, "posid" null } ], "choices" \[ { "caterernote" null, "choicetypetags" null, "defaultchoice" null, "description" null, "enablesubquantities" null, "foodlabelingtags" null, "name" null, "posid" null, "selections" \[ { "posid" null, "price" null, "sortorder" null } ], "sortorder" null } ] } } arguments argument name description menu menu schema reference docid\ ibvuqpk0mwpaa9dskeujy input object for creating a new menu return type returns a menu schema reference docid\ ibvuqpk0mwpaa9dskeujy success response when the menucreate mutation succeeds you can expect the response payload to look like response { "data" { "menucreate" { "errors" \[], "menucreationrequestid" "your ezcater menu creation request id", "success" true } } } failure response not authenticated when an the user is unable to be authenticated response { "errors" \[ { "message" "not authenticated ", "extensions" { "code" "err unauthenticated" } } ] } 400 bad request when the menucreate mutation fails due to bad user input you can expect a http 400 bad request and the response payload to look like response required field { "errors" \[ { "message" "variable \\"$menu\\" got invalid value { name \\"your menu name\\", locationid \\"ezcater caterer id\\", posid \\"your menu version id\\", startdate \\"2025 04 16\\", enddate \\"2025 04 26\\", items \[\[object], \[object], \[object], \[object], \[object], \[object], \[object], \[object], \[object], \[object], 11 more items], options \[\[object], \[object], \[object], \[object], \[object], \[object], \[object]], choices \[\[object], \[object], \[object], \[object], \[object], \[object], \[object], \[object], \[object], \[object], 7 more items] }; field \\"categories\\" of required type \\"\[categoryinput!]!\\" was not provided ", "extensions" { "code" "bad user input" } } ] } response invalid field value { "errors" \[ { "message" "variable \\"$menu\\" got invalid value null at \\"menu items\[1] selections\[0] price\\"; expected non nullable type \\"float!\\" not to be null ", "extensions" { "code" "bad user input" } } ] }