Store Menu
The Store Menu Resource enables interaction with a store's menu and its components, including categories and items. Unification of all entities under a store's ID. This entity returns and manages information about Menus, Categories, and Items at the same time.
The following table outlines the available Store Menu resources:
Resource | Endpoint description |
---|---|
GET v1/stores/{store_id}/store-menu | Retrieves the complete store menu, including items, categories, and menu types, by store ID. |
POST v1/stores/{store_id}/store-menu | Uploads the complete store menu to an S3 bucket. |
GET Store Menu By Store ID
Use this endpoint to retrieve the store menu (the complete menus with items, categories, and menu types) by storeId.
Endpoint URL
Use this URL to make a request with this endpoint:
https://{NEW_DOMAIN}/restaurants/menu/v1/stores/{store_id}/store-menu
{NEW_DOMAIN}
: This is your Rappi Country Domain. See the list of Country Domains.
Endpoint Properties
This resource has the following properties:
Response formats | JSON |
Authentication requirements | Token |
Path Parameter
Parameter | Type | Required | Description |
---|---|---|---|
store_id | uint64 | Yes | The unique identifier of the store whose menu is being requested. |
This parameter is used to specify which store's menu should be retrieved. The store_id should be a valid integer representing a store registered in the system.
Status Codes
These are the possible status codes of the response for this endpoint:
Sample Request
This is an example of an API request using this endpoint:
GET https://api.dev.rappi.com/restaurants/menu/v1/stores/{store_id}/store-menu
This is an example of the request:
String storeId = "232"; String urlString = "https://api.dev.rappi.com/restaurants/menu/v1/stores/"+storeId+"/store-menu"; URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("User-Agent", "Mozilla/5.0"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("x-authorization", "Bearer YOUR_TOKEN"); try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) { StringBuilder response = new StringBuilder(); String responseLine; while ((responseLine = br.readLine()) != null) { response.append(responseLine.trim()); } System.out.println("Response body: " + response.toString()); } System.out.println("Response Code : " + connection.getResponseCode());
Sample Response "Success 200"
This is an example of the response "Success 200":
{ "store_id": 232, "menus": [ { "id": 9, "store_id": 232, "super_store_id": 232, "menu_type": "DEFAULT", "categories": [ { "id": 1, "sku": "abc", "index": 8, "is_category_active": true, "store_id": 232 } ] } ], "categories": [ { "id": 1, "sku": "abc", "store_id": 232, "title": "Mccafé", "last_updated": "2025-03-14T14:24:11.345803Z", "items": [ { "id": 933, "sku": "def", "index": 1, "menu_id": 9, "menu_type": "DEFAULT", "store_id": 232 } ], "menus": [ { "id": 9, "index": 8, "is_category_active": true, "menu_type": "DEFAULT", "store_id": 232 } ], "schedules": [] } ], "items": [ { "id": 933, "sku": "def", "store_id": 232, "last_updated": "2025-03-14T14:23:58.338248Z", "item_type": "ITEM", "title_info": { "title": "Cappuccino Regular + Croissant Con Lomito Y Queso", "overrides": [] }, "description_info": { "description": "Promo \"cappuccino regular + croissant con lomito y queso\"", "overrides": [] }, "images_info": { "images": [ { "id": 279, "path": "my/path/to/my/image.jpg", "index": 1, "host": "https://my.cdn.com" } ], "overrides": [] }, "items_info": { "items": [ { "id": 11, "sku": "gfd", "index": 1 }, { "id": 12, "sku": "kjh", "index": 2 }, { "id": 94, "sku": "pol", "index": 3 }, { "id": 72, "sku": "rew", "index": 4 } ], "overrides": [] }, "price_info": { "price": 199, "overrides": [] }, "quantity_info": { "min_permitted": null, "max_permitted": null, "modifiers_type": null, "overrides": [] }, "suspension_info": { "suspend_until": null, "suspend_reason": null, "overrides": [], "is_available": true }, "schedules_info": { "schedules": [], "overrides": [] } }, { "id": 11, "sku": "gfd", "store_id": 232, "last_updated": "2025-03-14T14:23:58.979715Z", "item_type": "MODIFIER_GROUP", "title_info": { "title": "Extra grand croissant relleno de lomito y queso", "overrides": [] }, "description_info": { "description": "Extra grand croissant relleno de lomito y queso", "overrides": [] }, "images_info": { "images": [], "overrides": [] }, "items_info": { "items": [], "overrides": [] }, "price_info": { "price": 0, "overrides": [] }, "quantity_info": { "min_permitted": 0, "max_permitted": 2, "modifiers_type": "inclusive", "overrides": [] }, "suspension_info": { "suspend_until": null, "suspend_reason": null, "overrides": [], "is_available": true }, "schedules_info": { "schedules": [], "overrides": [] } }, { "id": 12, "sku": "kjh", "store_id": 232, "last_updated": "2025-03-14T14:23:58.85638Z", "item_type": "MODIFIER_GROUP", "title_info": { "title": "Extra cappuccino regular", "overrides": [] }, "description_info": { "description": "Extra cappuccino regular", "overrides": [] }, "images_info": { "images": [], "overrides": [] }, "items_info": { "items": [], "overrides": [] }, "price_info": { "price": 0, "overrides": [] }, "quantity_info": { "min_permitted": 0, "max_permitted": 8, "modifiers_type": "inclusive", "overrides": [] }, "suspension_info": { "suspend_until": null, "suspend_reason": null, "overrides": [], "is_available": true }, "schedules_info": { "schedules": [], "overrides": [] } }, { "id": 94, "sku": "pol", "store_id": 232, "last_updated": "2025-03-14T14:23:58.829912Z", "item_type": "MODIFIER_GROUP", "title_info": { "title": "Personalizar grand croissant relleno de lomito y queso", "overrides": [] }, "description_info": { "description": "Personalizar grand croissant relleno de lomito y queso", "overrides": [] }, "images_info": { "images": [], "overrides": [] }, "items_info": { "items": [], "overrides": [] }, "price_info": { "price": 0, "overrides": [] }, "quantity_info": { "min_permitted": 0, "max_permitted": 1, "modifiers_type": "exclusive", "overrides": [] }, "suspension_info": { "suspend_until": null, "suspend_reason": null, "overrides": [], "is_available": true }, "schedules_info": { "schedules": [], "overrides": [] } }, { "id": 72, "sku": "rew", "store_id": 232, "last_updated": "2025-03-14T14:23:58.342775Z", "item_type": "MODIFIER_GROUP", "title_info": { "title": "Personalizar cappuccino regular", "overrides": [] }, "description_info": { "description": "Personalizar cappuccino regular", "overrides": [] }, "images_info": { "images": [], "overrides": [] }, "items_info": { "items": [], "overrides": [] }, "price_info": { "price": 0, "overrides": [] }, "quantity_info": { "min_permitted": 0, "max_permitted": 2, "modifiers_type": "inclusive", "overrides": [] }, "suspension_info": { "suspend_until": null, "suspend_reason": null, "overrides": [], "is_available": true }, "schedules_info": { "schedules": [], "overrides": [] } } ] }
This table describes the objects contained in the response example:
Object | Description |
---|---|
store_id uint64 | Identifier of the store in the Rappi application |
menus []Menu | List of menus available in the store. Each menu contains categories. |
menus[].id uint64 | Unique identifier of the menu. |
menus[].store_id uint64 | Store ID associated with the menu. |
menus[].super_store_id uint64 | Super store ID linked to the menu. |
menus[].menu_type string | Type of menu (e.g., "DEFAULT"). |
menus[].categories []Category | Categories contained within the menu. |
categories []Category | List of categories available in the store. |
categories[].id uint64 | Unique identifier of the category. |
categories[].sku string | Stock keeping unit of the category. |
categories[].store_id uint64 | Store ID associated with the category. |
categories[].title string | Name of the category. |
categories[].last_updated string (ISO 8601) | Timestamp of last update for the category. |
categories[].items []Item | List of items within the category. |
categories[].menus []Menu | List of menus associated with the category. |
items []Item | List of items available in the store. |
items[].id uint64 | Unique identifier of the item. |
items[].sku string | Stock keeping unit of the item. |
items[].store_id uint64 | Store ID associated with the item. |
items[].last_updated string (ISO 8601) | Timestamp of last update for the item. |
items[].item_type string | Type of item (e.g., "ITEM", "MODIFIER_GROUP"). |
items[].title_info.title string | Name/title of the item. |
items[].description_info.description string | Description of the item. |
items[].images_info.images []Image | List of images associated with the item. |
items[].price_info.price float | Price of the item. |
items[].quantity_info.min_permitted int | Minimum quantity allowed for purchase. |
items[].quantity_info.max_permitted int | Maximum quantity allowed for purchase. |
items[].quantity_info.modifiers_type string | Type of modifiers allowed (e.g., "inclusive", "exclusive"). |
items[].suspension_info.is_available bool | Indicates if the item is available. |
POST Upload Store Menu
Use this endpoint to upload the complete store menu, including items, categories, and menu types to an s3 Bucket and process it to save or update the menu
Endpoint URL
Use this URL to make a request with this endpoint:
https://{NEW_DOMAIN}/restaurants/menu/v1/stores/{store_id}/store-menu
{NEW_DOMAIN}
: This is your Rappi Country Domain. See the list of Country Domains.
Endpoint Properties
This resource has the following properties:
Response formats | JSON |
Authentication requirements | Token |
Parameters
This endpoint has the following parameters:
Parameter | Type | Required | Description |
---|---|---|---|
store_id | uint64 | Yes | The unique identifier of the store whose menu is being requested. |
Status Codes
These are the possible status codes of the response for this endpoint:
Sample Request
This is an example of an API request using this endpoint:
POST https://api.dev.rappi.com/restaurants/menu/v1/stores/232/store-menu
This is an example of the request:
curl --location 'https://api.dev.rappi.com/restaurants/menu/v1/stores/232/store-menu' \ --header 'x-authorization: Bearer eyJhbGciOiJIUzI1NiIsI' --header 'Content-Type: application/json' \ --data '{ "store_id": 232, "menus": [ { "id": 62, "store_id": 232, "super_store_id": 232, "menu_type": "DEFAULT", "categories": [] } ], "categories": [ { "sku": "abc", "store_id": 232, "title": "Bebidas", "description": "Bebidas", "last_updated": "2025-02-24T18:06:19.65862Z", "items": [], "menus": [], "schedules": [ { "days_of_week": "fri, sat", "time_periods": [ { "start_time": "12:00", "end_time": "23:59" } ] }, { "days_of_week": "mon", "time_periods": [ { "start_time": "12:00", "end_time": "21:59" } ] } ] } ], "items": [ { "sku": "def", "store_id": 232, "last_updated": "2025-02-24T18:06:19.532278Z", "item_type": "ITEM", "title_info": { "title": "Hamburguesa de pollo con salsas", "overrides": [] }, "description_info": { "description": "Hamburguesa de pollo", "overrides": [] }, "images_info": { "images": [], "overrides": [] }, "items_info": { "items": [ { "sku": "16", "index": 0 } ], "overrides": [] }, "price_info": { "price": 6000, "overrides": [] }, "quantity_info": { "min_permitted": null, "max_permitted": null, "overrides": [] }, "suspension_info": { "suspend_until": null, "suspend_reason": null, "overrides": [] }, "schedules_info": { "schedules": [], "overrides": [] } }, { "sku": "16", "store_id": 232, "last_updated": "2025-02-24T18:06:19.535201Z", "item_type": "MODIFIER_GROUP", "title_info": { "title": "Salsas adicionales", "overrides": [] }, "description_info": { "description": "Salsas adicionales", "overrides": [] }, "images_info": { "images": [], "overrides": [] }, "items_info": { "items": [ { "sku": "455", "index": 0 }, { "sku": "466", "index": 0 } ], "overrides": [] }, "price_info": { "price": 25, "overrides": [] }, "quantity_info": { "min_permitted": 0, "max_permitted": 0, "overrides": [] }, "suspension_info": { "suspend_until": null, "suspend_reason": null, "overrides": [] }, "schedules_info": { "schedules": [], "overrides": [] } }, { "sku": "455", "store_id": 232, "last_updated": "2025-02-24T18:06:19.536526Z", "item_type": "ITEM", "title_info": { "title": "Salsas de tomate", "overrides": [] }, "description_info": { "description": "Salsa de tomate", "overrides": [] }, "images_info": { "images": [], "overrides": [] }, "items_info": { "items": [], "overrides": [] }, "price_info": { "price": 25, "overrides": [] }, "quantity_info": { "min_permitted": 0, "max_permitted": 0, "overrides": [] }, "suspension_info": { "suspend_until": null, "suspend_reason": null, "overrides": [] }, "schedules_info": { "schedules": [], "overrides": [] } }, { "sku": "466", "store_id": 232, "last_updated": "2025-02-24T18:06:19.537743Z", "item_type": "ITEM", "title_info": { "title": "Mayonesa", "overrides": [] }, "description_info": { "description": "Mayonesa", "overrides": [] }, "images_info": { "images": [], "overrides": [] }, "items_info": { "items": [], "overrides": [] }, "price_info": { "price": 25, "overrides": [] }, "quantity_info": { "min_permitted": 0, "max_permitted": 0, "overrides": [] }, "suspension_info": { "suspend_until": null, "suspend_reason": null, "overrides": [] }, "schedules_info": { "schedules": [], "overrides": [] } } ] }'
String urlString = "https://api.dev.rappi.com/restaurants/menu/v1/stores/232/store-menu"; String jsonInputString = "{ \"store_id\": 232, \"menus\": [{ \"id\": 62, \"store_id\": 232, \"super_store_id\": 232, \"menu_type\": \"DEFAULT\", \"categories\": [] }], \"categories\": [], \"items\": [] }"; URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("x-authorization", "Bearer YOUR_TOKEN"); connection.setDoOutput(true); try (OutputStream os = connection.getOutputStream()) { byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8); os.write(input, 0, input.length); } int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode); } catch (Exception e) { e.printStackTrace(); }
const https = require("https"); const data = JSON.stringify({ store_id: 232, menus: [ { id: 62, store_id: 232, super_store_id: 232, menu_type: "DEFAULT", categories: [], }, ], categories: [], items: [], }); const options = { hostname: "api.dev.rappi.com", path: "/restaurants/menu/v1/stores/232/store-menu", method: "POST", headers: { "Content-Type": "application/json", "x-authorization": "Bearer YOUR_TOKEN", "Content-Length": data.length, }, }; const req = https.request(options, (res) => { let response = ""; res.on("data", (chunk) => { response += chunk; }); res.on("end", () => { console.log("Response:", response); }); }); req.on("error", (error) => { console.error(error); }); req.write(data); req.end();
import requests url = "https://api.dev.rappi.com/restaurants/menu/v1/stores/232/store-menu" payload = { "store_id": 232, "menus": [{"id": 62, "store_id": 232, "super_store_id": 232, "menu_type": "DEFAULT", "categories": []}], "categories": [], "items": [] } headers = { "Content-Type": "application/json", "x-authorization": "Bearer YOUR_TOKEN" } response = requests.post(url, json=payload, headers=headers) print("Response Code:", response.status_code) print("Response Body:", response.text)
package main import ( "bytes" "fmt" "net/http" "io/ioutil" ) func main() { url := "https://api.dev.rappi.com/restaurants/menu/v1/stores/232/store-menu" jsonPayload := `{ "store_id": 232, "menus": [{ "id": 62, "store_id": 232, "super_store_id": 232, "menu_type": "DEFAULT", "categories": [] }], "categories": [], "items": [] }` req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(jsonPayload))) if err != nil { fmt.Println("Error creating request:", err) return } req.Header.Set("Content-Type", "application/json") req.Header.Add("x-authorization", "Bearer YOUR_TOKEN") client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Println("Error sending request:", err) return } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println("Error reading response:", err) return } fmt.Println("Response Code:", resp.StatusCode) fmt.Println("Response Body:", string(body)) }