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:

ResourceEndpoint description
GET v1/stores/{store_id}/store-menuRetrieves the complete store menu, including items, categories, and menu types, by store ID.
POST v1/stores/{store_id}/store-menuUploads 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 formatsJSON
Authentication requirementsToken

Path Parameter

ParameterTypeRequiredDescription
store_iduint64YesThe 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:

ObjectDescription
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 formatsJSON
Authentication requirementsToken

Parameters

This endpoint has the following parameters:

ParameterTypeRequiredDescription
store_iduint64YesThe 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)) }