Create Menu Item
curl --request POST \
--globoff \
--url 'https://api.example.com/stores/{{store_id}}/menu/items?active=true' \
--header 'Content-Type: application/json' \
--data '
{
"menu_ids": [
{}
],
"category_ids": [
{}
],
"excluded_ids": [
{}
],
"included_ids": [
{}
]
}
'import requests
url = "https://api.example.com/stores/{{store_id}}/menu/items?active=true"
payload = {
"menu_ids": [{}],
"category_ids": [{}],
"excluded_ids": [{}],
"included_ids": [{}]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({menu_ids: [{}], category_ids: [{}], excluded_ids: [{}], included_ids: [{}]})
};
fetch('https://api.example.com/stores/{{store_id}}/menu/items?active=true', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/stores/{{store_id}}/menu/items?active=true",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'menu_ids' => [
[
]
],
'category_ids' => [
[
]
],
'excluded_ids' => [
[
]
],
'included_ids' => [
[
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/stores/{{store_id}}/menu/items?active=true"
payload := strings.NewReader("{\n \"menu_ids\": [\n {}\n ],\n \"category_ids\": [\n {}\n ],\n \"excluded_ids\": [\n {}\n ],\n \"included_ids\": [\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/stores/{{store_id}}/menu/items?active=true")
.header("Content-Type", "application/json")
.body("{\n \"menu_ids\": [\n {}\n ],\n \"category_ids\": [\n {}\n ],\n \"excluded_ids\": [\n {}\n ],\n \"included_ids\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/stores/{{store_id}}/menu/items?active=true")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"menu_ids\": [\n {}\n ],\n \"category_ids\": [\n {}\n ],\n \"excluded_ids\": [\n {}\n ],\n \"included_ids\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"message": "<string>",
"success": true
}Menu Items
Create Menu Item
Add items to specific menus within a store, controlling which products appear in different menu configurations through category and item-level management.
POST
/
stores
/
{store_id}
/
menu
/
items?active=true
Create Menu Item
curl --request POST \
--globoff \
--url 'https://api.example.com/stores/{{store_id}}/menu/items?active=true' \
--header 'Content-Type: application/json' \
--data '
{
"menu_ids": [
{}
],
"category_ids": [
{}
],
"excluded_ids": [
{}
],
"included_ids": [
{}
]
}
'import requests
url = "https://api.example.com/stores/{{store_id}}/menu/items?active=true"
payload = {
"menu_ids": [{}],
"category_ids": [{}],
"excluded_ids": [{}],
"included_ids": [{}]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({menu_ids: [{}], category_ids: [{}], excluded_ids: [{}], included_ids: [{}]})
};
fetch('https://api.example.com/stores/{{store_id}}/menu/items?active=true', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/stores/{{store_id}}/menu/items?active=true",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'menu_ids' => [
[
]
],
'category_ids' => [
[
]
],
'excluded_ids' => [
[
]
],
'included_ids' => [
[
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/stores/{{store_id}}/menu/items?active=true"
payload := strings.NewReader("{\n \"menu_ids\": [\n {}\n ],\n \"category_ids\": [\n {}\n ],\n \"excluded_ids\": [\n {}\n ],\n \"included_ids\": [\n {}\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/stores/{{store_id}}/menu/items?active=true")
.header("Content-Type", "application/json")
.body("{\n \"menu_ids\": [\n {}\n ],\n \"category_ids\": [\n {}\n ],\n \"excluded_ids\": [\n {}\n ],\n \"included_ids\": [\n {}\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/stores/{{store_id}}/menu/items?active=true")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"menu_ids\": [\n {}\n ],\n \"category_ids\": [\n {}\n ],\n \"excluded_ids\": [\n {}\n ],\n \"included_ids\": [\n {}\n ]\n}"
response = http.request(request)
puts response.read_body{
"message": "<string>",
"success": true
}This endpoint manages the association of items with specific menus, allowing precise control over which products are available in each menu configuration.
Menu item management provides granular control over product visibility, enabling businesses to create specialized menus for different times, customer segments, or operational requirements.
Path Parameters
string
required
The unique identifier of the store to add menu items for
Query Parameters
boolean
default:"true"
Whether to set the menu items as active upon creation
Request Body
array
required
Array of menu identifiers to add items to
array
Array of category identifiers to include in the menus (adds all items in these categories)
array
Array of specific item identifiers to exclude from the menu
array
required
Array of specific item identifiers to include in the menu
Request Example
{
"menu_ids": [
"813f8ac7-cae5-4d2d-92ef-d6798547f95c"
],
"category_ids": [],
"excluded_ids": [],
"included_ids": [
"c81d64ff-0651-48af-ab61-9b503be9f020",
"3e3e0adb-5555-4832-9632-8bb71d861281"
]
}
Response
string
Confirmation message indicating the operation result
boolean
Whether the operation completed successfully
Response Example
{
"message": "Store item(s) menu updated",
"success": true
}
Menu Item Management Strategies
Menu Item Management Strategies
Category-Based Management
- Add entire product categories to menus efficiently
- Maintain category associations for new items
- Simplify menu management for large inventories
- Enable automatic inclusion of new category items
- Precise control over specific item visibility
- Override category-based inclusions with specific exclusions
- Handle special items that don’t fit standard categories
- Support custom menu configurations
- Combine category and individual item management
- Use category inclusion with specific item exclusions
- Create complex menu structures with precise control
- Balance efficiency with customization needs
Inclusion Priority: Individual item inclusions and exclusions take precedence over category-based selections, allowing for fine-tuned menu control.
Batch Operations: Use multiple menu_ids to apply the same item configuration across several menus simultaneously, improving efficiency for multi-menu updates.
Use Cases
Common Menu Item Creation Scenarios
Common Menu Item Creation Scenarios
Specialized Menu Creation
- Create breakfast menus with specific morning items
- Build lunch menus excluding breakfast-only products
- Design dinner menus with premium items
- Develop limited-time offer menus with promotional items
- Include entire beverage category in all menus
- Add all dessert items to dinner menus
- Include fresh produce in healthy eating menus
- Add seasonal items to special event menus
- Exclude high-cost items from discount menus
- Include only available items in current inventory menus
- Add featured items to promotional menus
- Remove discontinued items from all menus
- Apply consistent item sets across franchise locations
- Coordinate promotional items across multiple menus
- Standardize core offerings while allowing customization
- Manage inventory-driven menu changes
Item Selection Logic
How Item Selection Works
How Item Selection Works
Processing Order
- Category Inclusion: All items from specified categories are added
- Individual Inclusion: Specific items from included_ids are added
- Exclusion Processing: Items in excluded_ids are removed
- Final Validation: Ensure all included items are valid and available
- Excluded items override category inclusions
- Individual inclusions override category-based exclusions
- Invalid item IDs are silently skipped
- Empty arrays are processed without errors
- Only available inventory items can be included
- Out-of-stock items may be automatically excluded
- Seasonal availability affects item inclusion
- Real-time inventory updates influence menu item visibility
Validation Rules
Menu Item Validation
Menu Item Validation
Menu Validation
- All menu IDs must exist and belong to the specified store
- Menus must be in a valid state for item assignment
- User must have permissions to modify the specified menus
- Menu configuration must support the requested item types
- All item IDs must correspond to valid inventory items
- Items must be available for the store location
- Items must be compatible with menu requirements
- Category IDs must exist in the store’s catalog
- Alcohol items may require special menu designation
- Age-restricted items need appropriate menu labeling
- Seasonal items are validated for current availability
- Promotional items require valid campaign associations
Error Handling
Common Error Scenarios
Common Error Scenarios
Invalid Menu IDsInvalid Item IDsStore Access ErrorEmpty Request
{
"error": "Invalid menu IDs",
"message": "One or more menu IDs do not exist or are not accessible",
"invalid_menus": ["invalid-menu-id"]
}
{
"error": "Invalid item IDs",
"message": "Some items could not be found in inventory",
"invalid_items": ["invalid-item-id-1", "invalid-item-id-2"]
}
{
"error": "Store access denied",
"message": "Insufficient permissions to modify menus for this store"
}
{
"error": "Invalid request",
"message": "At least one of category_ids or included_ids must be specified"
}
Best Practices
Menu Item Management Best Practices
Menu Item Management Best Practices
Planning and Strategy
- Plan menu item associations based on business goals
- Consider customer preferences and purchasing patterns
- Align menu items with inventory management strategies
- Coordinate with marketing and promotional campaigns
- Use category-based inclusion for large-scale menu updates
- Leverage batch operations for multiple menu updates
- Implement validation checks before submitting requests
- Monitor item availability for menu accuracy
- Verify item associations after menu updates
- Test menu functionality from customer perspective
- Review menu performance after item changes
- Maintain consistency across related menus
- Batch multiple menu updates when possible
- Use appropriate granularity for item management
- Monitor system performance during large updates
- Implement proper error handling and retry logic
Integration Patterns
System Integration Approaches
System Integration Approaches
Inventory Integration
- Sync menu items with current inventory levels
- Automatically update menu availability based on stock
- Handle inventory-driven item exclusions
- Coordinate with procurement and supply chain systems
- Update POS systems with current menu item associations
- Ensure consistent item availability across all channels
- Coordinate pricing and promotional information
- Sync modifier and customization options
- Update mobile apps and websites with current menu items
- Ensure consistent customer experience across platforms
- Coordinate with ordering and delivery systems
- Maintain real-time accuracy for customer-facing displays
- Track menu item performance and customer preferences
- Analyze the impact of menu changes on sales
- Generate insights for menu optimization
- Support data-driven menu management decisions
Menu Item Lifecycle
Managing Item Lifecycle
Managing Item Lifecycle
Item Addition Process
- Validate item eligibility for menu inclusion
- Configure item-specific menu settings
- Update all related systems and platforms
- Monitor customer response and performance
- Regular review of menu item performance
- Adjustment based on inventory and seasonal factors
- Coordination with promotional and marketing activities
- Optimization based on customer feedback and analytics
- Plan removal strategy to minimize customer disruption
- Update all systems and customer-facing platforms
- Archive historical data for analysis and reporting
- Document reasons for removal for future reference
- Track individual item contribution to menu success
- Monitor customer engagement with specific items
- Analyze seasonal and promotional performance patterns
- Use data insights to optimize future menu configurations

