Menús

Los recursos de Menús te permiten interactuar con los menús de tus tiendas.

Recurso APIDescripción
GET menuDevuelve la lista de menús creados por el aliado autenticado
POST menuCrea 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 respuestaJSON
Requerimientos de autenticaciónToken

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 respuestaDescripció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:

AtributosDescripció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 respuestaJSON
Requerimientos del body para llamadasJSON
Requerimientos de autenticaciónToken

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" }, { "category": { "id": "2090019639", "maxQty": 0, "minQty": 0, "name": "Pizzas", "sortingPosition": 1 }, "children": [], "name": "Hawaiian Pizza", "price": 17000, "sku": "2135092198", "sortingPosition": 1, "type": "PRODUCT" } ] }
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" + " },\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" + " }\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:

AtributosRequeridoDescripción
storeId
string
requeridoIdentificador de la tienda en la aplicación de Rappi.
items
array of objects
requeridoLista de productos dentro del menú de la tienda.
items.name
string
requeridoNombre del producto en el menú.
items.description
string
requeridoDescripción del producto en el menú.
items.sku
string
requeridoSKU que el aliado asigna al producto en el menú.
items.type
string
requeridoTipo de producto en el menú, en este caso solamente puede ser PRODUCT
items.price
integer
requeridoPrecio del producto en el menú.
items.imageUrl
string
opcionalUrl de la imagen del producto en el menú
items.rappiIds
array of string
opcionalLista de los identificadores que Rappi le da al producto
items.sortingPosition
integer
opcionalLa posición del producto en su categoría en el menú
items.maxLimit
integer
opcionalIndicador máximo, es requerido solo si el tipo es topping
items.category
string
requeridoCategoría a la cual pertenece el producto en el menú
items.category.id
string
requeridoId de la categoría
items.category.name
string
requeridoNombre de la categoría
items.category.minQty
integer
requeridoLa cantidad maxima de elementos que se pueden pedir en esta categoría
items.category.maxQty
integer
requeridoLa 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
requeridoEs la posición de la categoría en el menu
items.children
array of objects
opcionalLista de toppings del producto
items.children.name
string
requeridoNombre del topping en el menú.
items.children.description
string
requeridoDescripción del toppin en el menú.
items.children.sku
string
requeridoSKU que el aliado asigna al topping en el menú.
items.children.type
string
requeridoTipo de topping en el menú, en este caso solamente puede ser TOPPING
items.children.price
integer
requeridoPrecio del topping en el menú.
items.children.imageUrl
string
opcionalUrl de la imagen del topping en el menú
items.children.rappiIds
array of string
opcionalLista de los identificadores que Rappi le da al topping
items.children.sortingPosition
integer
requeridoLa posición del topping en su categoría en el menú
items.children.maxLimit
integer
requeridoIndicador máximo, es requerido solo si el tipo es topping
items.children.category
string
requeridoCategoría a la cual pertenece el topping en el menú
items.children.category.id
string
requeridoId de la categoría
items.children.category.name
string
requeridoNombre de la categoría
items.children.category.minQty
integer
requeridoLa cantidad maxima de elementos que se pueden pedir en esta categoría
items.children.category.maxQty
integer
requeridoLa 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
requeridoLa 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 respuestaDescripció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:

AtributosDescripció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:

AtributosDescripció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 respuestaJSON
Requerimientos de autenticaciónToken

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}

Propiedades del Endpoint

Este recurso tiene las siguientes propiedades:

Formato de respuestaJSON
Requerimientos de autenticaciónToken

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.