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:

RecursoDescripción
GET v1/stores/{store_id}/store-menuRecupera 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-menuCarga 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 respuestaJSON
Requerimientos de autenticaciónToken

Parámetros

Este endpoint tiene los siguientes parámetros:

ParámetroTipoRequeridoDescripción
store_iduint64El 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:

ObjetoDescripción
store_id
uint64
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[].id
uint64
Identificador único del menú.
menus[].store_id
uint64
ID de la tienda asociada al menú.
menus[].super_store_id
uint64
ID de la super tienda vinculada al menú.
menus[].menu_type
string
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[].id
uint64
Identificador único de la categoría.
categories[].sku
string
Código SKU (Stock Keeping Unit) de la categoría.
categories[].store_id
uint64
ID de la tienda asociada a la categoría.
categories[].title
string
Nombre de la categoría.
categories[].last_updated
string (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[].id
uint64
Identificador único del artículo.
items[].sku
string
Código SKU del artículo.
items[].store_id
uint64
ID de la tienda asociada al artículo.
items[].last_updated
string (ISO 8601)
Marca de tiempo de la última actualización del artículo.
items[].item_type
string
Tipo de artículo (por ejemplo, "ITEM", "MODIFIER_GROUP").
items[].title_info.title
string
Nombre o título del artículo.
items[].description_info.description
string
Descripción del artículo.
items[].images_info.images
[]Image
Lista de imágenes asociadas al artículo.
items[].price_info.price
float
Precio del artículo.
items[].quantity_info.min_permitted
int
Cantidad mínima permitida para la compra.
items[].quantity_info.max_permitted
int
Cantidad máxima permitida para la compra.
items[].quantity_info.modifiers_type
string
Tipo de modificadores permitidos (por ejemplo, "inclusive", "exclusive").
items[].suspension_info.is_available
bool
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 respuestaJSON
Requerimientos de autenticaciónToken

Parámetros

Este endpoint tiene los siguientes parámetros:

ParámetroTipoRequeridoDescripción
store_iduint64El 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)) }