Menus
10 API calls in this section.
List Menus
/restaurant/locations/:locationId/menus?page=1&limit=20&search=&lang=enLists menus for a location with pagination and optional search. Includes is_available computed field.
1curl --request GET "$ONDI_BASE_URL/restaurant/locations/:locationId/menus?page=1&limit=20&search=&lang=en" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
locationIdRequiredQuery parameters
pageOptional1
limitOptional20
searchOptionallangOptionalen
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
1{2 "success": true,3 "data": [4 {5 "id": "{{menuId}}",6 "name": {7 "en": "Lunch"8 },9 "activation_mode": "automatic",10 "manual_is_active": false,11 "is_published": true,12 "is_available": true13 }14 ],15 "page": 1,16 "limit": 20,17 "total": 118}Get Menu
/restaurant/menus/:menuIdGet a menu by ID. Includes is_available.
1curl --request GET "$ONDI_BASE_URL/restaurant/menus/:menuId" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
menuIdRequiredHeaders
AuthorizationOptionalBearer {{access_token}}
Responses
1{2 "success": true,3 "data": {4 "id": "{{menuId}}",5 "location_id": "{{locationId}}",6 "name": {7 "en": "Lunch"8 },9 "activation_mode": "automatic",10 "manual_is_active": false,11 "is_published": true,12 "is_available": true13 }14}Create Menu
/restaurant/locations/:locationId/menusCreate a new menu. activation_mode can be 'automatic' or 'manual'.
1curl --request POST "$ONDI_BASE_URL/restaurant/locations/:locationId/menus" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --data '{5 "name": {6 "en": "Lunch"7 },8 "description": {9 "en": "Lunch Menu"10 },11 "image": "https://example.com/menu.jpg",12 "activation_mode": "automatic",13 "manual_is_active": false,14 "is_published": true15}'1{2 "name": {3 "en": "Lunch"4 },5 "description": {6 "en": "Lunch Menu"7 },8 "image": "https://example.com/menu.jpg",9 "activation_mode": "automatic",10 "manual_is_active": false,11 "is_published": true12}Path parameters
locationIdRequiredRequest body fields
nameExampleExample field from the request body.
name.enExampleExample field from the request body.
descriptionExampleExample field from the request body.
description.enExampleExample field from the request body.
imageExampleExample field from the request body.
activation_modeExampleExample field from the request body.
manual_is_activeExampleExample field from the request body.
is_publishedExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
1{ "success": true, "data": { "id": "{{menuId}}", ... } }Update Menu
/restaurant/menus/:menuIdUpdate menu details.
1curl --request PUT "$ONDI_BASE_URL/restaurant/menus/:menuId" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --data '{5 "name": {6 "en": "Lunch Special"7 },8 "is_published": true9}'1{2 "name": {3 "en": "Lunch Special"4 },5 "is_published": true6}Path parameters
menuIdRequiredRequest body fields
nameExampleExample field from the request body.
name.enExampleExample field from the request body.
is_publishedExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
1{ "success": true, "data": { ... } }Delete Menu
/restaurant/menus/:menuIdSoft delete a menu.
1curl --request DELETE "$ONDI_BASE_URL/restaurant/menus/:menuId" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
menuIdRequiredHeaders
AuthorizationOptionalBearer {{access_token}}
Responses
1{2 "success": true,3 "data": {4 "id": "{{menuId}}",5 "deleted_at": "..."6 }7}Link Products to Menu
/restaurant/menus/:menuId/productsLink multiple products to a menu. Idempotent upsert.
1curl --request POST "$ONDI_BASE_URL/restaurant/menus/:menuId/products" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --data '{5 "product_ids": [6 "{{productId1}}",7 "{{productId2}}"8 ]9}'1{2 "product_ids": [3 "{{productId1}}",4 "{{productId2}}"5 ]6}Path parameters
menuIdRequiredRequest body fields
product_idsExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
1{ "success": true, "data": [ ... ] }List Products in Menu
/restaurant/menus/:menuId/products?page=1&limit=20List products linked to a specific menu.
1curl --request GET "$ONDI_BASE_URL/restaurant/menus/:menuId/products?page=1&limit=20" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
menuIdRequiredQuery parameters
pageOptional1
limitOptional20
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
1{ "success": true, "data": [ ... ], "page": 1, "limit": 20, "total": 5 }Pause Menu
/restaurant/menus/:menuId/pauseTemporarily pause the menu (deactivate current time window). Requires automatic schedule mode.
1curl --request POST "$ONDI_BASE_URL/restaurant/menus/:menuId/pause" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
menuIdRequiredHeaders
AuthorizationOptionalBearer {{access_token}}
Responses
1{2 "success": true,3 "message": "Menu paused successfully"4}Resume Menu
/restaurant/menus/:menuId/resumeResume the menu (reactivate current time window) if manually paused.
1curl --request POST "$ONDI_BASE_URL/restaurant/menus/:menuId/resume" \2 --header "Authorization: Bearer {{access_token}}"Path parameters
menuIdRequiredHeaders
AuthorizationOptionalBearer {{access_token}}
Responses
1{2 "success": true,3 "message": "Menu resumed successfully"4}Set Menu State
/restaurant/menus/:menuId/stateSet a menu to automatic (schedule-driven) or manual (manual_is_active=true/false). Bumps location availability_version by trigger.
1curl --request POST "$ONDI_BASE_URL/restaurant/menus/:menuId/state" \2 --header "Authorization: Bearer {{access_token}}" \3 --header "Content-Type: application/json" \4 --data '{5 "activation_mode": "manual",6 "manual_is_active": true7}'1{2 "activation_mode": "manual",3 "manual_is_active": true4}Path parameters
menuIdRequiredRequest body fields
activation_modeExampleExample field from the request body.
manual_is_activeExampleExample field from the request body.
Headers
AuthorizationOptionalBearer {{access_token}}
Responses
1{2 "success": true,3 "data": {4 "id": "{{menuId}}",5 "activation_mode": "manual",6 "manual_is_active": true7 }8}