Menús
Los recursos de Menús te permiten interactuar con los menús de tus tiendas.
Recurso API | Descripción |
---|---|
GET menu | Devuelve la lista de menús creados por el aliado autenticado |
POST menu | Crea o actualiza un menú de una tienda |
GET menu/approved/{storeId} | Devuelve el estado actual de aprobación de un menú |
GET menu/rappi/{storeId} | Devuelve el último menú creado para una tienda |
GET menu
Utiliza este endpoint para obtener la colección de menús creados por el aliado autenticado.
URL del Endpoint
Utiliza esta URL para hacer una llamada con este endpoint:
https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/menu
{COUNTRY_DOMAIN}
: Este es tu Dominio por País de Rappi. Mira la lista de Dominios por país.
Propiedades del Endpoint
Este recurso tiene las siguientes propiedades:
Formato de respuesta | JSON |
Requerimientos de autenticación | Token |
Parámetros
Este endpoint no permite parámetros adicionales.
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://microservices.dev.rappi.com/api/v2/restaurants-integrations-public-api/menu
Este es un ejemplo de la llamada:
URL url = new URL("https://microservices.dev.rappi.com/api/v2/restaurants-integrations-public-api/menu"); 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 "200 Llamada exitosa":
Este es un ejemplo de la respuesta:
[ { "storeId": "900111978", "items": [ { "name": "Naked Cake con frutos", "description": "Naked cake decorado con frutos. Cubierta de trufa derretida (ganache) y decorada con frutos del bosque.", "sku": "8569874", "type": "PRODUCT", "price": 75.0, "category": { "id": "3", "name": "Tortas", "minQty": 0, "maxQty": 0, "sortingPosition": 0 }, "imageUrl": "https://image.com/image1.jpg", "children": [ { "name": "Chocolate", "description": "", "sku": "8569874-159", "type": "TOPPING", "price": 0.0, "category": { "id": "1", "name": "Sabor", "minQty": 0, "maxQty": 1, "sortingPosition": 0 }, "imageUrl": "https://image.com/image10.jpg", "children": [], "rappiIds": ["340948822"], "sortingPosition": 1, "maxLimit": 1 } ], "rappiIds": ["2135527868"], "sortingPosition": 0, "maxLimit": 1 }, { "name": "Snowman", "description": "Linda lata de Snowman con productos variadosIncluye:Galletas mantequilla 350 gr, 6 brookies y 4 trufas de brownie.", "sku": "856887", "type": "PRODUCT", "price": 75.0, "category": { "id": "9", "name": "Navidad", "minQty": 0, "maxQty": 0, "sortingPosition": 0 }, "imageUrl": "https://image.com/image2.jpg", "children": [], "rappiIds": ["2135524472"], "sortingPosition": 0, "maxLimit": 1 } ] } ]
Esta tabla describe los objectos dentro de la respuesta de ejemplo:
Objeto en la respuesta | Descripción del objeto |
---|---|
storeId string | Identificador de la tienda en la aplicación de Rappi. |
items array of objects | Lista de productos dentro del menú de la tienda. |
items.name string | Nombre del producto en el menú. |
items.description string | Descripción del producto en el menú. |
items.sku string | SKU que el aliado asigna al producto en el menú. |
items.type string | Tipo de producto en el menú, en este caso solamente puede ser PRODUCT |
items.price integer | Precio del producto en el menú. |
items.imageUrl string | Url de la imagen del producto en el menú |
items.rappiIds array of string | Lista de los identificadores que Rappi le da al producto |
items.sortingPosition integer | La posición del producto en su categoría en el menú |
items.maxLimit integer | Indicador máximo, es requerido solo si el tipo es topping |
items.category string | Categoría a la cual pertenece el producto en el menú |
items.category.id string | Id de la categoría |
items.category.name string | Nombre de la categoría |
items.category.minQty integer | La cantidad maxima de elementos que se pueden pedir en esta categoría |
items.category.maxQty integer | La cantidad minima de elementos que se pueden pedir en esta categoría (En toppings, si es 0 significa que no es obligatorio) |
items.category.sortingPosition integer | Es la posición de la categoría en el menu |
items.children array of objects | Lista de toppings del producto |
items.children.name string | Nombre del topping en el menú. |
items.children.description string | Descripción del toppin en el menú. |
items.children.sku string | SKU que el aliado asigna al topping en el menú. |
items.children.type string | Tipo de topping en el menú, en este caso solamente puede ser TOPPING |
items.children.price integer | Precio del topping en el menú. |
items.children.imageUrl string | Url de la imagen del topping en el menú |
items.children.rappiIds array of string | Lista de los identificadores que Rappi le da al topping |
items.children.sortingPosition integer | La posición del topping en su categoría en el menú |
items.children.maxLimit integer | Indicador máximo, es requerido solo si el tipo es topping |
items.children.category string | Categoría a la cual pertenece el topping en el menú |
items.children.category.id string | Id de la categoría |
items.children.category.name string | Nombre de la categoría |
items.children.category.minQty integer | La cantidad maxima de elementos que se pueden pedir en esta categoría |
items.children.category.maxQty integer | La cantidad minima de elementos que se pueden pedir en esta categoría (En toppings, si es 0 significa que no es obligatorio) |
items.children.category.sortingPosition integer | La posición de la categoría dentro del producto |
Ejemplo de Respuesta "Credenciales invalidas 401":
{ "message": "Not a valid token" }
Esta tabla describe los objectos dentro de la respuesta de ejemplo:
Atributos | Descripción |
---|---|
message string | El token es invalido |
POST menu
Usa este endpoint para crear un nuevo menú o añadir nuevos artículos a un menú existente del aliado autenticado.
Después de crear un menú o añadir nuevos artículos a alguno existente, el equipo de Rappi valida los artículos y la estructura del menú. Puedes consultar el estado de aprobación usando el endpoint GET menu/approved/{storeId}
.
URL del Endpoint
Utiliza esta URL para hacer una llamada con este endpoint:
https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/menu
{COUNTRY_DOMAIN}
: Este es tu Dominio por País de Rappi. Mira la lista de dominios por país.
Propiedades del Endpoint
Este recurso tiene las siguientes propiedades:
Formato de respuesta | JSON |
Requerimientos del body para llamadas | JSON |
Requerimientos de autenticación | Token |
Parámetros
Este endpoint no permite parámetros adicionales.
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://microservices.dev.rappi.com/api/v2/restaurants-integrations-public-api/menu
Este es un ejemplo de la llamada:
{ "storeId": "900103361", "items": [ { "category": { "id": "2090019638", "maxQty": 0, "minQty": 0, "name": "Burgers", "sortingPosition": 0 }, "children": [ { "category": { "id": "211", "maxQty": 1, "minQty": 0, "name": "Do you want to add?", "sortingPosition": 0 }, "children": [], "name": "French Fries", "price": 5000, "sku": "2135092195", "sortingPosition": 1, "type": "TOPPING", "maxLimit": 1 }, { "category": { "id": "211", "maxQty": 1, "minQty": 0, "name": "Do you want to add?", "sortingPosition": 0 }, "children": [], "name": "Potato Wedges", "price": 7000, "sku": "2135092196", "sortingPosition": 1, "type": "TOPPING", "maxLimit": 1 } ], "name": "Grilled Chicken Burger", "price": 14000, "sku": "2135092197", "sortingPosition": 0, "type": "PRODUCT", "combo": true }, { "category": { "id": "2090019639", "maxQty": 0, "minQty": 0, "name": "Pizzas", "sortingPosition": 1 }, "children": [], "name": "Hawaiian Pizza", "price": 17000, "sku": "2135092198", "sortingPosition": 1, "type": "PRODUCT", "combo": true } ] }
URL url = new URL("https://microservices.dev.rappi.com/api/v2/restaurants-integrations-public-api/menu"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); 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"); connection.setDoOutput(true); String jsonInputString = "{\n" + " \"storeId\": \"900103361\",\n" + " \"items\": [\n" + " {\n" + " \"category\": {\n" + " \"id\": \"2090019638\",\n" + " \"maxQty\": 0,\n" + " \"minQty\": 0,\n" + " \"name\": \"Burgers\",\n" + " \"sortingPosition\": 0\n" + " },\n" + " \"children\": [\n" + " {\n" + " \"category\": {\n" + " \"id\": \"211\",\n" + " \"maxQty\": 1,\n" + " \"minQty\": 0,\n" + " \"name\": \"Do you want to add?\",\n" + " \"sortingPosition\": 0\n" + " },\n" + " \"children\": [],\n" + " \"name\": \"French Fries\",\n" + " \"price\": 5000,\n" + " \"sku\": \"2135092145\",\n" + " \"sortingPosition\": 1,\n" + " \"type\": \"TOPPING\",\n" + " \"maxLimit\": 1\n" + " },\n" + " {\n" + " \"category\": {\n" + " \"id\": \"211\",\n" + " \"maxQty\": 1,\n" + " \"minQty\": 0,\n" + " \"name\": \"Do you want to add?\",\n" + " \"sortingPosition\": 0\n" + " },\n" + " \"children\": [],\n" + " \"name\": \"Potato Wedges\",\n" + " \"price\": 7000,\n" + " \"sku\": \"2135092145\",\n" + " \"sortingPosition\": 1,\n" + " \"type\": \"TOPPING\",\n" + " \"maxLimit\": 1\n" + " }\n" + " ],\n" + " \"name\": \"Grilled Chicken Burger\",\n" + " \"price\": 14000,\n" + " \"sku\": \"2135092145\",\n" + " \"sortingPosition\": 0,\n" + " \"type\": \"PRODUCT\"\n" + " \"combo\": true\n" + " },\n" + " {\n" + " \"category\": {\n" + " \"id\": \"2090019639\",\n" + " \"maxQty\": 0,\n" + " \"minQty\": 0,\n" + " \"name\": \"Pizzas\",\n" + " \"sortingPosition\": 1\n" + " },\n" + " \"children\": [],\n" + " \"name\": \"Hawaiian Pizza\",\n" + " \"price\": 17000,\n" + " \"sku\": \"2135092145\",\n" + " \"sortingPosition\": 1,\n" + " \"type\": \"PRODUCT\"\n" + " \"combo\": true\n" + " }\n" + " ]\n" + "}\n"; try (OutputStream os = connection.getOutputStream()) { byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8); os.write(input, 0, input.length); } 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());
Esta tabla describe los atributos que el JSON
de tu llamada requiere:
Atributos | Requerido | Descripción |
---|---|---|
storeId string | requerido | Identificador de la tienda en la aplicación de Rappi. |
items array of objects | requerido | Lista de productos dentro del menú de la tienda. |
items.name string | requerido | Nombre del producto en el menú. |
items.description string | requerido | Descripción del producto en el menú. |
items.sku string | requerido | SKU que el aliado asigna al producto en el menú. |
items.type string | requerido | Tipo de producto en el menú, en este caso solamente puede ser PRODUCT |
items.price integer | requerido | Precio del producto en el menú. |
items.imageUrl string | opcional | Url de la imagen del producto en el menú |
items.rappiIds array of string | opcional | Lista de los identificadores que Rappi le da al producto |
items.sortingPosition integer | opcional | La posición del producto en su categoría en el menú |
items.maxLimit integer | opcional | Indicador máximo, es requerido solo si el tipo es topping |
items.combo boolean | opcional | Indica si el elemento pertenece a un combo |
items.category string | requerido | Categoría a la cual pertenece el producto en el menú |
items.category.id string | requerido | Id de la categoría |
items.category.name string | requerido | Nombre de la categoría |
items.category.minQty integer | requerido | La cantidad maxima de elementos que se pueden pedir en esta categoría |
items.category.maxQty integer | requerido | La cantidad minima de elementos que se pueden pedir en esta categoría (En toppings, si es 0 significa que no es obligatorio) |
items.category.sortingPosition integer | requerido | Es la posición de la categoría en el menu |
items.children array of objects | opcional | Lista de toppings del producto |
items.children.name string | requerido | Nombre del topping en el menú. |
items.children.description string | requerido | Descripción del toppin en el menú. |
items.children.sku string | requerido | SKU que el aliado asigna al topping en el menú. |
items.children.type string | requerido | Tipo de topping en el menú, en este caso solamente puede ser TOPPING |
items.children.price integer | requerido | Precio del topping en el menú. |
items.children.imageUrl string | opcional | Url de la imagen del topping en el menú |
items.children.rappiIds array of string | opcional | Lista de los identificadores que Rappi le da al topping |
items.children.sortingPosition integer | requerido | La posición del topping en su categoría en el menú |
items.children.maxLimit integer | requerido | Indicador máximo, es requerido solo si el tipo es topping |
items.children.category string | requerido | Categoría a la cual pertenece el topping en el menú |
items.children.category.id string | requerido | Id de la categoría |
items.children.category.name string | requerido | Nombre de la categoría |
items.children.category.minQty integer | requerido | La cantidad maxima de elementos que se pueden pedir en esta categoría |
items.children.category.maxQty integer | requerido | La cantidad minima de elementos que se pueden pedir en esta categoría (En toppings, si es 0 significa que no es obligatorio) |
items.children.category.sortingPosition integer | requerido | La posición de la categoría dentro del producto |
Ejemplo de Respuesta "200 Llamada exitosa"
Este endpoint regresa solo un código de respuesta exitosa.
Ejemplo de Respuesta "400 La estructura del menú es invalida."
{ "message": "The submitted menu has errors.", "errors": [ { "reason": "All items must have a valid name, category or product description.", "relatedItems": [ { "description": "", "sku": "product1", "type": "PRODUCT", "price": 899.0, "category": { "id": "455", "name": "producto category name 1", "minQty": 0, "maxQty": 0, "sortingPosition": 0 }, "imageUrl": "https://anydomain/anyimagen_1.png", "rappiIds": ["1965855"], "sortingPosition": 0, "maxLimit": 1 } ] }, { "reason": "Invalid urls were found", "relatedItems": [ { "name": "producto name 1", "description": "", "sku": "product2", "type": "PRODUCT", "price": 899.0, "category": { "id": "455", "name": "producto category name 1", "minQty": 0, "maxQty": 0, "sortingPosition": 0 }, "imageUrl": "httpaas://anydomain/anyimagen_2.png", "rappiIds": ["1965855"], "sortingPosition": 0, "maxLimit": 1 } ] } ] }
Esta tabla describe los objetos dentro de la respuesta de ejemplo:
Objeto en la respuesta | Descripción del objeto |
---|---|
message string | Mensaje de error al enviar el menu. El mensaje por defecto es "The submitted menu has errors." |
errors array of objects | Lista de errores encontrados en el menu. |
errors.reason string | Descripción del error encontrado en el menu. Los distintos mensajes los podemos encontrar en "VALIDACIONES SOBRE EL MENU RECIBIDO" |
errors.relatedItems array of objects | Lista de items que poseen el error, pueden ser tanto productos como toppings |
Para ver todas las posibles validaciones de la estructura del menú pueden ver las VALIDACIONES SOBRE EL MENU RECIBIDO.
Ejemplo de Respuesta "401 Credenciales inválidas"
401 Credenciales inválidas:
{ "message": "Not a valid token" }
Esta tabla describe los objetos dentro de la respuesta de ejemplo:
Atributos | Descripción |
---|---|
message string | Token inválido |
Ejemplo de Respuesta "404 Tienda no encontrada"
404 Tienda no encontrada:
{ "message": "StoreId 9001035324: not found associated Stores" }
Esta tabla describe los objetos dentro de la respuesta de ejemplo:
Atributos | Descripción |
---|---|
message string | Tienda no encontrada |
GET menu/approved/{storeId}
Usa este endpoint para regresar el estado de aprobación de un menú.
URL del Endpoint
Usa esta URL para hacer llamadas con este endpoint:
https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/menu/approved/{storeId}
{COUNTRY_DOMAIN}
: Este es tu Dominio por País de Rappi. Mira la lista de dominios por país.
Propiedades del Endpoint
Este recurso tiene las siguientes propiedades:
Formato de respuesta | JSON |
Requerimientos de autenticación | Token |
Parámetros
Este endpoint no permite parámetros adicionales.
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://microservices.dev.rappi.com/api/v2/restaurants-integrations-public-api/menu/approved/251
Este es un ejemplo de la llamada:
final Integer storeId = 251; URL url = new URL(String.format("https://microservices.dev.rappi.com/api/v2/restaurants-integrations-public-api/menu/approved/%s", storeId)); 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 endpoint regresa unicamente un código de respuesta.
401 Credenciales inválidas:
{ "message": "Not a valid token" }
GET menu/rappi/{storeId}
Utiliza este endpoint para obtener el último menú creado para una tienda en especifico.
URL del Endpoint
Utiliza esta URL para hacer llamadas con este endpoint:
https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/menu/rappi/{storeId}
{COUNTRY_DOMAIN}
: Este es tu Dominio por País de Rappi. Mira la lista de dominios por país.{storeId}
: Este es el identificador de la integración de tu tienda.
Propiedades del Endpoint
Este recurso tiene las siguientes propiedades:
Formato de respuesta | JSON |
Requerimientos de autenticación | Token |
Parámetros
Este endpoint no permite parámetros adicionales.
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://microservices.dev.rappi.com/api/v2/restaurants-integrations-public-api/menu/rappi/251
Este es un ejemplo de la llamada:
final Integer storeId = 251; URL url = new URL(String.format("https://microservices.dev.rappi.com/api/v2/restaurants-integrations-public-api/menu/rappi/%s", storeId)); 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 "200 Llamada exitosa":
{ "storeId": "900111978", "items": [ { "name": "Naked Cake con frutos", "description": "Naked cake decorado con frutos. Cubierta de trufa derretida (ganache) y decorada con frutos del bosque.", "sku": "8569874", "type": "PRODUCT", "price": 75.0, "category": { "id": "3", "name": "Tortas", "minQty": 0, "maxQty": 0, "sortingPosition": 0 }, "imageUrl": "https://image.com/image1.jpg", "children": [ { "name": "Chocolate", "description": "", "sku": "8569874-159", "type": "TOPPING", "price": 0.0, "category": { "id": "1", "name": "Sabor", "minQty": 0, "maxQty": 1, "sortingPosition": 0 }, "imageUrl": "https://image.com/image10.jpg", "children": [], "rappiIds": ["340948822"], "sortingPosition": 1, "maxLimit": 1 } ], "rappiIds": ["2135527868"], "sortingPosition": 0, "maxLimit": 1 }, { "name": "Snowman", "description": "Linda lata de Snowman con productos variadosIncluye:Galletas mantequilla 350 gr, 6 brookies y 4 trufas de brownie.", "sku": "856887", "type": "PRODUCT", "price": 75.0, "category": { "id": "9", "name": "Navidad", "minQty": 0, "maxQty": 0, "sortingPosition": 0 }, "imageUrl": "https://image.com/image2.jpg", "children": [], "rappiIds": ["2135524472"], "sortingPosition": 0, "maxLimit": 1 } ] }
Este es un ejemplo de la respuesta "401 Credenciales inválidas":
{ "message": "Not a valid token" }
El detalle de lo que significa cada atributo esta dentro de la sección Get Menu.