Create Store Menu
curl --request POST \
--url 'https://api.example.com/stores/{{store_id}}/menu/' \
--header 'Content-Type: application/json' \
--data '
{
"menu_name": "<string>",
"is_default": true,
"status": "<string>",
"menu_hours": [
{
"day_of_week": 123,
"open_time": "<string>",
"close_time": "<string>",
"is_closed": true
}
]
}
'import requests
url = "https://api.example.com/stores/{{store_id}}/menu/"
payload = {
"menu_name": "<string>",
"is_default": True,
"status": "<string>",
"menu_hours": [
{
"day_of_week": 123,
"open_time": "<string>",
"close_time": "<string>",
"is_closed": True
}
]
}
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_name: '<string>',
is_default: true,
status: '<string>',
menu_hours: [
{
day_of_week: 123,
open_time: '<string>',
close_time: '<string>',
is_closed: true
}
]
})
};
fetch('https://api.example.com/stores/{{store_id}}/menu/', 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/",
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_name' => '<string>',
'is_default' => true,
'status' => '<string>',
'menu_hours' => [
[
'day_of_week' => 123,
'open_time' => '<string>',
'close_time' => '<string>',
'is_closed' => true
]
]
]),
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/"
payload := strings.NewReader("{\n \"menu_name\": \"<string>\",\n \"is_default\": true,\n \"status\": \"<string>\",\n \"menu_hours\": [\n {\n \"day_of_week\": 123,\n \"open_time\": \"<string>\",\n \"close_time\": \"<string>\",\n \"is_closed\": true\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/")
.header("Content-Type", "application/json")
.body("{\n \"menu_name\": \"<string>\",\n \"is_default\": true,\n \"status\": \"<string>\",\n \"menu_hours\": [\n {\n \"day_of_week\": 123,\n \"open_time\": \"<string>\",\n \"close_time\": \"<string>\",\n \"is_closed\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/stores/{{store_id}}/menu/")
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_name\": \"<string>\",\n \"is_default\": true,\n \"status\": \"<string>\",\n \"menu_hours\": [\n {\n \"day_of_week\": 123,\n \"open_time\": \"<string>\",\n \"close_time\": \"<string>\",\n \"is_closed\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"menu_name": "<string>",
"store_id": "<string>",
"is_default": true,
"status": "<string>",
"created_by_id": "<string>",
"external_menu_id": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"menu_hours": [
{
"id": "<string>",
"day_of_week": 123,
"open_time": "<string>",
"close_time": "<string>",
"is_closed": true,
"menu_id": "<string>",
"created_by_id": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
}
]
}Menus
Create Store Menu
Create a new menu for a specific store with customizable operating hours and configuration settings.
POST
/
stores
/
{store_id}
/
menu
/
Create Store Menu
curl --request POST \
--url 'https://api.example.com/stores/{{store_id}}/menu/' \
--header 'Content-Type: application/json' \
--data '
{
"menu_name": "<string>",
"is_default": true,
"status": "<string>",
"menu_hours": [
{
"day_of_week": 123,
"open_time": "<string>",
"close_time": "<string>",
"is_closed": true
}
]
}
'import requests
url = "https://api.example.com/stores/{{store_id}}/menu/"
payload = {
"menu_name": "<string>",
"is_default": True,
"status": "<string>",
"menu_hours": [
{
"day_of_week": 123,
"open_time": "<string>",
"close_time": "<string>",
"is_closed": True
}
]
}
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_name: '<string>',
is_default: true,
status: '<string>',
menu_hours: [
{
day_of_week: 123,
open_time: '<string>',
close_time: '<string>',
is_closed: true
}
]
})
};
fetch('https://api.example.com/stores/{{store_id}}/menu/', 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/",
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_name' => '<string>',
'is_default' => true,
'status' => '<string>',
'menu_hours' => [
[
'day_of_week' => 123,
'open_time' => '<string>',
'close_time' => '<string>',
'is_closed' => true
]
]
]),
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/"
payload := strings.NewReader("{\n \"menu_name\": \"<string>\",\n \"is_default\": true,\n \"status\": \"<string>\",\n \"menu_hours\": [\n {\n \"day_of_week\": 123,\n \"open_time\": \"<string>\",\n \"close_time\": \"<string>\",\n \"is_closed\": true\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/")
.header("Content-Type", "application/json")
.body("{\n \"menu_name\": \"<string>\",\n \"is_default\": true,\n \"status\": \"<string>\",\n \"menu_hours\": [\n {\n \"day_of_week\": 123,\n \"open_time\": \"<string>\",\n \"close_time\": \"<string>\",\n \"is_closed\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/stores/{{store_id}}/menu/")
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_name\": \"<string>\",\n \"is_default\": true,\n \"status\": \"<string>\",\n \"menu_hours\": [\n {\n \"day_of_week\": 123,\n \"open_time\": \"<string>\",\n \"close_time\": \"<string>\",\n \"is_closed\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"menu_name": "<string>",
"store_id": "<string>",
"is_default": true,
"status": "<string>",
"created_by_id": "<string>",
"external_menu_id": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"menu_hours": [
{
"id": "<string>",
"day_of_week": 123,
"open_time": "<string>",
"close_time": "<string>",
"is_closed": true,
"menu_id": "<string>",
"created_by_id": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
}
]
}This endpoint creates a new menu for a store, allowing businesses to define multiple menus with different operating hours, status settings, and configurations.
Store menus define when and how products are available to customers. Each menu can have unique operating hours for different days of the week and can be set as default or specialized menus.
Path Parameters
string
required
The unique identifier of the store for which to create the menu
Request Body
string
required
Display name for the menu (e.g., “Weekend Menu”, “Holiday Hours”)
boolean
required
Whether this menu should be the default menu for the store
string
required
Menu status: “active” or “inactive”
array
required
Array of operating hours for each day of the week
Request Example
{
"menu_name": "menu-23",
"is_default": false,
"status": "active",
"menu_hours": [
{
"day_of_week": 0,
"open_time": "09:00",
"close_time": "17:00",
"is_closed": false
},
{
"day_of_week": 1,
"open_time": "09:00",
"close_time": "17:00",
"is_closed": false
},
{
"day_of_week": 2,
"open_time": "09:00",
"close_time": "17:00",
"is_closed": false
},
{
"day_of_week": 3,
"open_time": "09:00",
"close_time": "17:00",
"is_closed": false
},
{
"day_of_week": 4,
"open_time": "09:00",
"close_time": "17:00",
"is_closed": false
},
{
"day_of_week": 5,
"open_time": "09:00",
"close_time": "17:00",
"is_closed": false
},
{
"day_of_week": 6,
"open_time": "09:00",
"close_time": "17:00",
"is_closed": false
}
]
}
Response
string
Unique identifier for the created menu
string
Display name of the menu
string
Store identifier this menu belongs to
boolean
Whether this is the default menu for the store
string
Current menu status (ACTIVE/INACTIVE)
string
ID of the user who created the menu
string
External system menu identifier (if applicable)
string
Timestamp when the menu was created
string
Timestamp when the menu was last updated
array
Array of operating hours with complete configuration
Response Example
{
"id": "d4710f37-0490-4c53-a553-a907f3d202c7",
"menu_name": "menu-23",
"store_id": "449235c1-3d04-4519-998b-40d2a621e5e0",
"is_default": false,
"status": "ACTIVE",
"created_by_id": "1000418",
"updatedAt": "2024-09-13T10:47:26.104Z",
"createdAt": "2024-09-13T10:47:26.104Z",
"external_menu_id": null,
"created_by": null,
"updated_by": null,
"updated_by_id": null,
"last_live_at": null,
"archived_at": null,
"deletedAt": null,
"menu_hours": [
{
"id": "48a18cca-f744-427b-b1bd-9e8eff7b98b1",
"day_of_week": 0,
"open_time": "09:00",
"close_time": "17:00",
"is_closed": false,
"menu_id": "d4710f37-0490-4c53-a553-a907f3d202c7",
"created_by_id": "1000418",
"updatedAt": "2024-09-13T10:47:26.114Z",
"createdAt": "2024-09-13T10:47:26.114Z",
"created_by": null,
"updated_by": null,
"updated_by_id": null,
"deletedAt": null
},
{
"id": "a26d4683-025d-4803-8e00-1efd4bdcc5d2",
"day_of_week": 1,
"open_time": "09:00",
"close_time": "17:00",
"is_closed": false,
"menu_id": "d4710f37-0490-4c53-a553-a907f3d202c7",
"created_by_id": "1000418",
"updatedAt": "2024-09-13T10:47:26.114Z",
"createdAt": "2024-09-13T10:47:26.114Z",
"created_by": null,
"updated_by": null,
"updated_by_id": null,
"deletedAt": null
},
{
"id": "69655f6e-3485-47a3-bfad-cd105d5b2f03",
"day_of_week": 2,
"open_time": "09:00",
"close_time": "17:00",
"is_closed": false,
"menu_id": "d4710f37-0490-4c53-a553-a907f3d202c7",
"created_by_id": "1000418",
"updatedAt": "2024-09-13T10:47:26.114Z",
"createdAt": "2024-09-13T10:47:26.114Z",
"created_by": null,
"updated_by": null,
"updated_by_id": null,
"deletedAt": null
},
{
"id": "66d2e767-fef4-4853-a7f8-4cb9ff1cf203",
"day_of_week": 3,
"open_time": "09:00",
"close_time": "17:00",
"is_closed": false,
"menu_id": "d4710f37-0490-4c53-a553-a907f3d202c7",
"created_by_id": "1000418",
"updatedAt": "2024-09-13T10:47:26.187Z",
"createdAt": "2024-09-13T10:47:26.187Z",
"created_by": null,
"updated_by": null,
"updated_by_id": null,
"deletedAt": null
},
{
"id": "f0f02560-5de3-4bfe-9cc6-3c64d4fc065c",
"day_of_week": 4,
"open_time": "09:00",
"close_time": "17:00",
"is_closed": false,
"menu_id": "d4710f37-0490-4c53-a553-a907f3d202c7",
"created_by_id": "1000418",
"updatedAt": "2024-09-13T10:47:26.187Z",
"createdAt": "2024-09-13T10:47:26.187Z",
"created_by": null,
"updated_by": null,
"updated_by_id": null,
"deletedAt": null
},
{
"id": "135b483c-88f5-46e4-8454-bec28f73957d",
"day_of_week": 5,
"open_time": "09:00",
"close_time": "17:00",
"is_closed": false,
"menu_id": "d4710f37-0490-4c53-a553-a907f3d202c7",
"created_by_id": "1000418",
"updatedAt": "2024-09-13T10:47:26.187Z",
"createdAt": "2024-09-13T10:47:26.187Z",
"created_by": null,
"updated_by": null,
"updated_by_id": null,
"deletedAt": null
},
{
"id": "4dae188e-82b6-43ac-84f8-cbf9debcde93",
"day_of_week": 6,
"open_time": "09:00",
"close_time": "17:00",
"is_closed": false,
"menu_id": "d4710f37-0490-4c53-a553-a907f3d202c7",
"created_by_id": "1000418",
"updatedAt": "2024-09-13T10:47:26.187Z",
"createdAt": "2024-09-13T10:47:26.187Z",
"created_by": null,
"updated_by": null,
"updated_by_id": null,
"deletedAt": null
}
]
}
Menu Configuration Best Practices
Menu Configuration Best Practices
Operating Hours Planning
- Define clear opening and closing times for each day
- Consider customer traffic patterns when setting hours
- Use consistent time formats (24-hour) for clarity
- Plan for different hours on weekends vs weekdays
- Use descriptive names that indicate the menu purpose
- Include time periods or special conditions in names
- Maintain consistent naming conventions across stores
- Consider seasonal or promotional menu names
- Only one menu per store should be set as default
- Default menus should have the most comprehensive hours
- Consider customer expectations when setting default hours
- Regular review of default menu effectiveness
Day of Week Values: Days are numbered 0-6 where 0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday.
Time Format: All times should be provided in 24-hour format (HH:MM) for consistency and to avoid AM/PM confusion.
Use Cases
Common Menu Creation Scenarios
Common Menu Creation Scenarios
Standard Business Hours
- Create menus with consistent weekday and weekend hours
- Set appropriate opening and closing times for customer expectations
- Configure closed days for businesses that don’t operate 7 days a week
- Create special menus for holiday seasons
- Temporary menus for promotional periods
- Limited-time menu configurations
- Breakfast, lunch, and dinner menus with different hours
- Late-night menus for extended operations
- Special event menus with unique timing
- Location-based menu hours (mall vs street locations)
- Regional preferences and local regulations
- Franchise-specific menu configurations
Error Handling
Common Error Scenarios
Common Error Scenarios
Invalid Time FormatMissing Required FieldsStore Not FoundInvalid Day of Week
{
"error": "Invalid time format",
"message": "Time must be in HH:MM format",
"field": "menu_hours.open_time"
}
{
"error": "Validation failed",
"message": "menu_name is required",
"field": "menu_name"
}
{
"error": "Store not found",
"message": "The specified store does not exist"
}
{
"error": "Invalid day_of_week",
"message": "day_of_week must be between 0 and 6"
}
Multiple Default Menus: Setting multiple menus as default for the same store may cause conflicts. Ensure only one menu per store is marked as default.
⌘I

