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
The unique identifier of the store for which to create the menu
Request Body
Display name for the menu (e.g., “Weekend Menu”, “Holiday Hours”)
Whether this menu should be the default menu for the store
Menu status: “active” or “inactive”
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
Unique identifier for the created menu
Display name of the menu
Store identifier this menu belongs to
Whether this is the default menu for the store
Current menu status (ACTIVE/INACTIVE)
ID of the user who created the menu
External system menu identifier (if applicable)
Timestamp when the menu was created
Timestamp when the menu was last updated
Array of operating hours with complete configuration
Show Menu Hours Response
Show Menu Hours Response
Unique identifier for the menu hour entry
Day of the week
Opening time
Closing time
Whether closed on this day
Parent menu identifier
Creator user ID
Creation timestamp
Last update timestamp
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

