Store Menu
El Recurso del Menú de la Tienda permite la interacción con el menú de una tienda y sus componentes, incluidas las categorías y los artículos. Unificación de todas las entidades bajo el ID de la tienda. Esta entidad devuelve y gestiona información sobre Menús, Categorías y Artículos al mismo tiempo.
La siguiente tabla describe los recursos disponibles del Menú de la Tienda:
| Recurso | Descripción |
|---|---|
GET v1/stores/{store_id}/store-menu | Recupera el menú completo de la tienda, incluidos los artículos, categorías y tipos de menú, mediante el ID de la tienda. |
POST v1/stores/{store_id}/store-menu | Carga el menú completo de la tienda en un bucket de S3. |
GET Store Menu By Store ID
Utiliza este endpoint para recuperar el menú de la tienda (los menús completos con artículos, categorías y tipos de menú) por storeId.
URL del Endpoint
Utiliza esta URL para realizar una solicitud con este endpoint:
https://{NEW_DOMAIN}/restaurants/menu/v1/stores/{store_id}/store-menu
{NEW_DOMAIN}: Este es tu Dominio por País de Rappi. Mira la lista de Dominios por país.
Propiedades del Endpoint
Este recurso tienes las siguiente propiedades:
| Formato de respuesta | JSON |
| Requerimientos de autenticación | Token |
Parámetros
Este endpoint tiene los siguientes parámetros:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
store_id | uint64 | Sí | El identificador único de la tienda cuyo menú se está solicitando. |
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.
Códigos de Respuesta
Estos son los posibles códigos de respuesta en este endpoint:
Ejemplo de Llamada
Este es un ejemplo de una llamada API usando este endpoint:
GET https://api.dev.rappi.com/restaurants/menu/v1/stores/{store_id}/store-menu
Este es un ejemplo de la llamada:
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());
Ejemplo de Respuesta
Este es un ejemplo de la respuesta:
{ "store_id": 232, "menus": [ { "id": 9, "store_id": 232, "super_store_id": 232, "menu_type": "DEFAULT", "categories": [ { "id": 107, "sku": "ADSA-UY-UNICO MONTEVIDEO-800018", "index": 8, "is_category_active": true, "store_id": 232 } ] } ], "categories": [ { "id": 107, "sku": "ADSA-UY-UNICO MONTEVIDEO-800018", "store_id": 232, "title": "Mccafé", "last_updated": "2025-03-14T14:24:11.345803Z", "items": [ { "id": 9335, "sku": "49155", "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": 9335, "sku": "49155", "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": 11797, "sku": "1248188076", "index": 1 }, { "id": 12001, "sku": "1248188077", "index": 2 }, { "id": 11949, "sku": "1248188078", "index": 3 }, { "id": 11772, "sku": "1248188079", "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": 11797, "sku": "1248188076", "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": 12001, "sku": "1248188077", "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": 11949, "sku": "1248188078", "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": 11772, "sku": "1248188079", "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": [] } } ] }
Esta tabla describe los objetos dentro de la respuesta de ejemplo:
| Objeto | Descripción |
|---|---|
store_iduint64 | Identificador de la tienda en la aplicación Rappi. |
menus[]Menu | Lista de menús disponibles en la tienda. Cada menú contiene categorías. |
menus[].iduint64 | Identificador único del menú. |
menus[].store_iduint64 | ID de la tienda asociada al menú. |
menus[].super_store_iduint64 | ID de la super tienda vinculada al menú. |
menus[].menu_typestring | Tipo de menú (por ejemplo, "DEFAULT"). |
menus[].categories[]Category | Categorías contenidas dentro del menú. |
categories[]Category | Lista de categorías disponibles en la tienda. |
categories[].iduint64 | Identificador único de la categoría. |
categories[].skustring | Código SKU (Stock Keeping Unit) de la categoría. |
categories[].store_iduint64 | ID de la tienda asociada a la categoría. |
categories[].titlestring | Nombre de la categoría. |
categories[].last_updatedstring (ISO 8601) | Marca de tiempo de la última actualización de la categoría. |
categories[].items[]Item | Lista de artículos dentro de la categoría. |
categories[].menus[]Menu | Lista de menús asociados a la categoría. |
items[]Item | Lista de artículos disponibles en la tienda. |
items[].iduint64 | Identificador único del artículo. |
items[].skustring | Código SKU del artículo. |
items[].store_iduint64 | ID de la tienda asociada al artículo. |
items[].last_updatedstring (ISO 8601) | Marca de tiempo de la última actualización del artículo. |
items[].item_typestring | Tipo de artículo (por ejemplo, "ITEM", "MODIFIER_GROUP"). |
items[].title_info.titlestring | Nombre o título del artículo. |
items[].description_info.descriptionstring | Descripción del artículo. |
items[].images_info.images[]Image | Lista de imágenes asociadas al artículo. |
items[].price_info.pricefloat | Precio del artículo. |
items[].quantity_info.min_permittedint | Cantidad mínima permitida para la compra. |
items[].quantity_info.max_permittedint | Cantidad máxima permitida para la compra. |
items[].quantity_info.modifiers_typestring | Tipo de modificadores permitidos (por ejemplo, "inclusive", "exclusive"). |
items[].suspension_info.is_availablebool | Indica si el artículo está disponible. |
POST Upload Store Menu
Usa este endpoint para cargar el menú completo de la tienda, incluidos los artículos, categorías y tipos de menú, en un bucket de S3 y procesarlo para guardarlo o actualizarlo.
URL del Endpoint
Utiliza esta URL para realizar una solicitud con este endpoint:
https://{NEW_DOMAIN}/restaurants/menu/v1/stores/{store_id}/store-menu
{NEW_DOMAIN}: Este es tu Dominio por País de Rappi. Mira la lista de Dominios por país.
Propiedades del Endpoint
Este recurso tienes las siguiente propiedades:
| Formato de respuesta | JSON |
| Requerimientos de autenticación | Token |
Parámetros
Este endpoint tiene los siguientes parámetros:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
store_id | uint64 | Sí | El identificador único de la tienda cuyo menú se está solicitando. |
Códigos de Respuesta
Estos son los posibles códigos de respuesta en este endpoint:
Ejemplo de Llamada
Este es un ejemplo de una llamada API usando este endpoint:
POST https://api.dev.rappi.com/restaurants/menu/v1/stores/232/store-menu
Este es un ejemplo de la llamada:
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": "JSDJJ90", "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": "13ML", "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": "SALSA-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": "SALSA-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": "TOMATE-455", "index": 0 }, { "sku": "Mayo466", "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": "TOMATE-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": "Mayo466", "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)) }